Как передать функцию из php в smarty 3?

M2
На сайте с 11.01.2011
Offline
341
2873

Ребят, помогите пожалуйста! Я зае#ался уже :)))

В общем имеет систему на смарти. На каждой странице нужно вывести древовидное меню из базы данных. Функция вывода уже имеется и прекрасно работает. Вот она:


function ShowTree($tree, $pid=0)
{
echo "<ul id=\"right_menu\">";

foreach( $tree as $id=>$root)
{
if($pid!=$id)continue;
if(count($root))
{
foreach($root as $key => $title)
{
if ($pid != "0")
{
if (isset($_GET['id']) && ($_GET['id'] == $key))
{
$class = 'underlined';
}

else
{
$class = '';
}
echo "<li><span class=\"submenu ".$class."\"><a href=\"test.php?id=".$key."\">".$title."</a></span></li>";
}
else
{
echo "<li class=\"main_menu_on\"><span class=\"clr\"><a href=\"test.php?id=".$key."\">".$title."</a></span></li>";
}




if(count($tree[$key]))
{
//echo "<span id=\"test$key\">";
ShowTree($tree,$key);
}

}
//echo "</span>";
}
}
echo "</ul>";

}

Эту функцию нужно внедрить в смарти. Короче, что я пробовал:

Smarty 2:

$smarty->register_function("stree", "ShowTree")

Итог - не работает

Smarty 3:

вообще не знаю как этот механизм задействовать

В общем надо как-то в шаблоне прописать что-то типа {call_function} а в пхп - $smarty->register_function("call_function", "ShowTree"). Но, повторюсь, указанная конструкция в Smarty 2 не работает, а в третьей версии шаблонизатора вообще не воспринимается...

Как быть-то? помогите хто чем может )))

Заранее всем спасибо ))

------------------- Крутые VPS и дедики. Качество по разумной цене ( http://cp.inferno.name/view.php?product=1212&gid=1 ) VPS25OFF - скидка 25% на первый платеж по ссылке выше
TF-Studio
На сайте с 17.08.2010
Offline
334
#1

попробовать не echo, а сделать переменную.

return $some;

а в смарти объявить её в шаблон.

Всё ещё лучший способ заработка для белых сайтов: GoGetLinks (https://www.gogetlinks.net/?inv=fahbn8).
M2
На сайте с 11.01.2011
Offline
341
#2

Так она же внутри функции.... тогда static $some? я не понимаю... и чего объявлять? регистрировать саму функцию в смарти, или только эту переменную?

TF-Studio
На сайте с 17.08.2010
Offline
334
#3

вместо echo:

$listing .= ***;

в конце return $listing

$smarty -> assign ("my_menu", ShowTree($tree, $pid=0))

в шаблон:

{my_menu}

как-то так...

M2
На сайте с 11.01.2011
Offline
341
#4

Кошмар! Сделал всё как написано - скрипт просто отрабатывает и всё, никакого меню НЕ появляется :(( сама функция автономно работает прекрасно...

В функции пробовал делать и return и просто echo - похоже смарти пофиг ))))

Думал что он вот такую строчку не воспринимает:

$smarty->assign('MENU' => ShowTree($tree, $pid = 0))

но тогда бы просто была бы ошибка....

mark2011 добавил 28.06.2011 в 08:46

Сейчас даже до такого додумался: у меня было отдельно от функции выборка из БД, я её загнал в функцию, соответственно убрал параметр tree. Думал что заработает.... ни фига подобного :(( хоть бы какую-нибудь ошибочку увидеть, уже легче было бы ориентироваться...

C
На сайте с 28.01.2010
Offline
70
#5
mark2011:
Ребят, помогите пожалуйста! Я зае#ался уже :)))

В общем имеет систему на смарти. На каждой странице нужно вывести древовидное меню из базы данных. Функция вывода уже имеется и прекрасно работает. Вот она:

Эту функцию нужно внедрить в смарти. Короче, что я пробовал:

$smarty->registerPlugin("function","show_tree", "ShowTree");

в пхп функцию передекларируйте как function ShowTree($params, $smarty)

в теле обращения к переменным pid и tree переделайте на $params["pid"] $params["tree"]

для установки значения по умолчанию соотвественно

if(empty($params["pid"]))
$params["pid"] = 0;

$smarty в теле использовать нигде не нужно.

вместо echo - собирайте строку, которую нужно будет выводить в переменную и используйте return (хотя эхо по-моему тоже будет работать, не проверял)

в шаблоне:

{show_tree tree="xxx"} или {show_tree tree="xxx" pid="1"}
Это - личная подпись. Здесь обычно ставят ссылки на всякие кривые сайты, надеясь получить "жирный бек".
M2
На сайте с 11.01.2011
Offline
341
#6

Немножко не понял сути:


{show_tree tree="xxx" pid="1"}

У меня же tree берётся из базы данных...

C
На сайте с 28.01.2010
Offline
70
#7
mark2011:
Немножко не понял сути:


{show_tree tree="xxx" pid="1"}


У меня же tree берётся из базы данных...

ну я не знаю откуда у вас берется tree и что оно означает, но в вызове функции, которую вы хотите запихать в смарти, есть переменная tree - function ShowTree($tree, $pid=0) .

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий