Reply to Issue Extending Smarty an using Output Filters

Your name:

Reply:


Posted by Mauricio Araya V. on 05/12/05 03:13

Hello All...

I am having some issues extending from the Smarty class... This is my
scenario (sorry for the large email):

- Since HTML is XML, I want to use XML_Beautifier to beautify my pages code..
[http://pear.php.net/package/XML_Beautifier]

- I am trying to apply an output filter to get that done.

- I am using PHP5,
I've already reading "Classes and Objects (PHP5)" from:
http://www.php.net/manual/en/language.oop5.php


This is the code (I got rid of the comments to make it smaller):

<?php
// myClass.php

function __autoload($class_name) {
require_once ('Smarty.class.php');
require_once ('XML/Beautifier.php');
}

class myClass extends Smarty {
private $template_file='/dev/null';

public function __construct ( ) {
parent::__construct( );
}

public function beautifyCode ($code){
$beauty = new XML_Beautifier( );
return $beauty->formatString($code);
}

public function setCacheDir ($dir='cached'){
$this->cache_dir = $dir;
}

public function setTemplateDir ($dir='templates'){
$this->template_dir = $dir;
}

public function setCompileDir ($dir='compiled'){
$this->compile_dir = $dir;
}

public function setConfigDir ($dir='config'){
$this->config_dir = $dir;
}

public function publishContent ( ){
$this->register_outputfilter(array(&$this, "beautifyCode"));
$this->display($this->template_file);
}

public function setTemplateFile ($file){
$this->template_file = $file;
}
}
?>

Now .. my test:
<?php
//test.php
require_once("myClass.php");
$page = new myClass();
$beauty = new XML_Beautifier( );
$page->setTemplateDir('/path/to/my/templates/');
$page->setCompileDir('/path/tp/my/compiled');
$page->setConfigDir('/path/to/my/config/');
$page->setCacheDir('/path/to/my/cache/');
$page->assign('title', "My Page");
$page->assign('content', "My Content");
$page->setTemplateFile('test.tpl');
$page->publishContent();
?>


.....

- If I comment the line where I register the output filter, first line
at publishContent(),
it works just perfect.

- If I don't comment the line, it prints: "Object id #5".

- If I replace the line with:
$this->register_outputfilter("beautifyCode");
it only prints the following warning:
"Warning: call_user_func_array() [function.call-user-func-array]:
First argument
is expected to be a valid callback, 'beautifyCode' was given in
/paht/tol/my/Smarty/Smarty.class.php on line 1264"

- If I change beautifyCode() to:
public function beautifyCode ($code){
return strtoupper($code);
}
It will work converting the HTML to uppercase.

I know that seing the last example (the uppercase), you are now saying that
this problem does not have anything to do with smarty, but you guys know
better how smarty is built... and maybe someone has had the same issue.

Any hint will be appreciated!

Regards,

-Mauricio

[Back to original message]


Удаленная работа для программистов  •  Как заработать на Google AdSense  •  England, UK  •  статьи на английском  •  PHP MySQL CMS Apache Oscommerce  •  Online Business Knowledge Base  •  DVD MP3 AVI MP4 players codecs conversion help
Home  •  Search  •  Site Map  •  Set as Homepage  •  Add to Favourites

Copyright © 2005-2006 Powered by Custom PHP Programming

Сайт изготовлен в Студии Валентина Петручека
изготовление и поддержка веб-сайтов, разработка программного обеспечения, поисковая оптимизация