2011-12-28 3 views
5

Привет, я написал функцию в файле .php. то естьКак вызвать функцию php внутри файла smarty .tpl?

public static function getCategories($id_lang = false, $active = true, $order = true, $sql_filter = '', $sql_sort = '',$sql_limit = '') 
{ 
    if (!Validate::isBool($active)) 
     die(Tools::displayError()); 

    $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS(' 
     SELECT * 
     FROM `'._DB_PREFIX_.'category` c 
     LEFT JOIN `'._DB_PREFIX_.'category_lang` cl 
     ON c.`id_category` = cl.`id_category` 
     WHERE 1 '.$sql_filter.' '.($id_lang ? 'AND `id_lang` = '.(int)($id_lang) : '').' 
     '.($active ? 'AND `active` = 1' : '').' 
     '.(!$id_lang ? 'GROUP BY c.id_category' : '').' 
     '.($sql_sort != '' ? $sql_sort : 'ORDER BY c.`level_depth` ASC, c.`position` ASC').' 
     '.($sql_limit != '' ? $sql_limit : '') 
    ); 

    if (!$order) 
     return $result; 

    $categories = array(); 
    foreach ($result AS $row) 
    { 
     $categories[$row['id_parent']][$row['id_category']]['infos'] = $row; 
    } 
    return $categories; 
} 

и я хочу вызвать эту функцию внутри .tpl-файла. Я использовал {php} {/php}, но это не работает. Каким образом можно назвать это?

Благодаря

+0

Эта функция возвращает массив категорий, я прав? Итак, что вы хотите сделать с этим массивом? Как вам нужно использовать его в своем шаблоне Smarty ??? –

ответ

5

Smarty является язык шаблонный - если вы хотите вывести результаты функции, назначить выход к Smarty переменной

$smarty->assign('categories', getCategories($args)); 

И затем использовать его в шаблоне

{$categories} 

Очень мало ситуаций, когда это неправильный шаблон.

+0

спасибо за ответ adam. Я написал код, выше которого вы сказали. но это не работает. can u plz указать, где мне нужно написать строку $ smarty-> assign ('categories', getCategories ($ args)); – srinu

+0

Я согласен с этим комментарием. См. [Связанный ответ на SE] (http://stackoverflow.com/a/7446889/913758). – NobRuked

+0

@srinu первая строка идет в вашем php, вторая в вашем шаблоне. Вы даже прочитали руководство? Http: //www.smarty.net/documentation –

0

Я согласен с адамом, хотя сомитесты я использую php внутри smarty из-за данной архитектуры.
Существует еще один способ сделать это: с {insert} - http://www.smarty.net/docs/en/language.function.insert.tpl

+0

FYI, 'insert' устарел и больше не является частью Smarty с версии v3.1 –

4

вы можете использовать что-то вроде этого, и я всегда использовал его

{category.id|function_name} 

позвольте мне объяснить:

category.id = есть идентификатор категории, о которой вы хотите получить информацию о функции

имя_функции = имя функции

+0

Это будет работать только со встроенными функциями Smarty, а не с пользовательской функцией, заданной в вопросе –

+0

, она будет работать с пользовательской функцией, –

+0

я всегда использую его так: function Test() { echo "Hello World"; } в HTML Smarty я использовать его, как это после того, как я включить функцию на странице PHP {$ а | Test} выход будет Hello World –

2

, потому что вы используете статический метод, вы не сможете использовать $ this keyword в своей функции. И поэтому, вы не сможете использовать

$this->context->smarty->assign('categories', self::getCategories($args)); 

Таким образом, вы должны создать переменную и присвоить контекст для него, и в вашем случае вам потребуется только Smarty часть.

$smarty = Context::getContext()->smarty; 

Теперь вы можете использовать это следующим образом:

$smarty->assign('categories', self::getCategories($args)); 

Я предполагаю, что вы вызываете эту функцию в том же классе, так что я использовал самостоятельно :: getCategories ($ арг) , если вы хотите использовать его в другом использовании класса Classname :: getCategories ($ арг)

Надеюсь, что это помогает вам, попробуйте и дайте мне обратную связь! ;)