Как вызвать функцию php внутри файла .tpl? - PullRequest
5 голосов
/ 28 декабря 2011

Привет, я написал функцию в .php файле. т.е.

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} способ, но это не работает. Как это назвать?

Спасибо

Ответы [ 4 ]

5 голосов
/ 28 декабря 2011

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

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

, а затем используйте ее в своем шаблоне

{$categories}

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

4 голосов
/ 28 сентября 2013

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

{category.id|function_name}

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

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

имя_функции = это имя функции

2 голосов
/ 11 сентября 2014

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

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

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

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

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

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

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

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

0 голосов
/ 28 декабря 2011

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

...