Класс в классе party II

t3[0one]

Новичок
Класс в классе party II

Два класса 1 smarty второй что то типа:
PHP:
<?
class cldb
{
    var $template;
    var $name = '';
    function cldb($template,$name)
    {
        $this->template = $template;
        $this->name = $name;
    }
    function tester(){
        $this->template->register_function("module", "module_inc"); //строка 109
        function module_inc(){
            return $this->name ;
        }
    }
}
?>
index.php
просто использую эту функцияю
PHP:
//создал класс smarty
$lib = new cldb($smarty,"test");
$lib - >tester();
$smarty->display("index.tpl");
index.tpl
PHP:
....
{module}
....
ошибка
Fatal error: Smarty error: [in index.tpl line 5]: [plugin] unknown tag - 'module'
получается что
$this->template->register_function("module", "module_inc");
function module_inc(){
return $this->name ;
}
выполняется но не передаётся наружу (((
Вопрос как сделать так что бы register_function смарти класса передавалась index.php а не оставалась внутри класса cldb
помагите пжлс!
 

clevel

Новичок
$this->template = $template;
$this->template = $name;

вторую строку замени на $this->name= $name;
 

t3[0one]

Новичок
ой сори +) это я для примера писал ошибся )
но смысл остался )
function tester() - smarty не регистрирует функцию module во внешней среде так сказать )

-~{}~ 07.04.05 21:53:

от на ошибки проверил +)
PHP:
<?
class cldb
{
    var $template;
    var $name = '';
    function cldb($template,$name)
    {
        $this->template = $template;
        $this->name = $name;
    }
    function tester(){
        $this->template->register_function("modules", "module_inc"); //строка 109
        function module_inc(){
            return $this->name ;
        }
    }
} 
include_once('class/smarty/smarty.class.php');
$smarty = new Smarty;
$lib = new cldb($smarty,"test");
$lib->tester(); 
$smarty->display("index1.tpl");
?>
index1.tpl
PHP:
<HTML>
<HEAD>
</HEAD>
<BODY>
{modules}
</BODY>
</HTML>
 

Demiurg

Guest
Я знаю откуда ошибка, но не скажу.
Вернее скажу, когда ты скажешь, что за класс такой cldb и зачем он нужен ?
 

t3[0one]

Новичок
вообще типа в нем функции для cms !
а решаю проблему сбора имен блоков и модулей для контента с последующим инклудом соответствующих шаблонов ! Хотелось бы из класса это делать а не передевать имена наружу и снаруже уже регистрировать функции смарти для инклуда !
 

Demiurg

Guest
ладно, при вызове $lib->tester() у тебя делается копия объекта $smarty, поэтому $smarty и не знает ничего о своей копии.
 

t3[0one]

Новичок
это значит в любом случаи придется вполнять
function tester()
С наружи ?
я пробывал return $smarty не помагло (
 

Demiurg

Guest
нет, это не значит ... надо понимаеть, что делаешь.
подсказываю: в функцию параметры можно передавать по ссылке.
 

t3[0one]

Новичок
идея !!! спасибо )) ща попробую ))

-~{}~ 08.04.05 01:41:

PHP:
<?
class cldb
{
    var $name = '';
    function cldb($name)
    {
        $this->name = $name;
    }
    function tester(&$smarty){
    	$smarty->register_function("modules", "module_inc");
    	$names=$this->name;
    	function module_inc($names){
    		return $names; //правдо тут чё то не 'test" а Array пустой ))
    	}
    }
}
include_once('class/smarty/smarty.class.php');
$smarty = new Smarty;
$lib = new cldb("test");
$lib->tester($smarty);
$smarty->display("index1.tpl");
?>
огромнейшее спасибо ))))
 

Demiurg

Guest
только не говори потом, что такую архетектуру тебе посоветовали в этом форуме.
 
Сверху