Попытка вызвать умный плагин (с параметрами) в умном foreach - PullRequest
1 голос
/ 24 января 2011

Я пытаюсь встроить персональный плагин в мои умные TPL-файлы, но не могу заставить его работать ...

Это мой умный плагин:

<?php
function smarty_function_alticerik($params, &$smarty) {
    if (!function_exists('alticerik')) {
        if (!function_exists('get_instance')) return "Can't get CI instance";
        $CI= &get_instance();
    }

    return $CI->IceriklerMod->liste($params['where']);
}      
?>

А это мои дрянные коды TPL:

{foreach item=alt from=alticerik|@alticerik(where="where ustid=$ustid")}
{$alt.id}
{/foreach}

Я искал и прочитал все умные страницы справки, но до сих пор не представляю, как заставить эти коды работать корректно ...

Ответы [ 2 ]

1 голос
/ 17 марта 2011

Я считаю, что ваша проблема в том, что функции не вызываются с использованием этого синтаксиса Smarty.

То, что вы делаете, является своего рода смесью между функцией и модификатором.

Модификаторы изменяют заданный ввод - например, нижний регистр строки.

{$upperCaseWord|strtolower}

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

{html_options options=$arrayOfOptions selected=$selectedValue}

В вашем случае, я предполагаю, что вы хотите использовать модификатор, поскольку вы пытаетесь изменить значение. Вы по-прежнему можете передавать опции в них, но они не названы, и это быстро запутывает. Тем не менее, код может быть:

{foreach item=alt from=$alticerik|@alticerik:"where ustid=$ustid"}
     {$alt.id}
{/foreach}

Между тем ваша фактическая функция выглядит так:

<?php
function smarty_modifier_alticerik($input, $whereString) {
    // Here, $input is the same as your $alticerik variable
    // and $whereString is just the string that comes after the colon.
    if (!function_exists('alticerik')) {
        if (!function_exists('get_instance')) return "Can't get CI instance";
        $CI= &get_instance();
    }

    return $CI->IceriklerMod->liste($whereString);
}      
?>

Заметьте, однако, что в вашем коде вы не используете значение $ alticerik из вашего шаблона, поэтому меня интересует, нужна ли вам вместо этого функция. Я не могу знать наверняка, пока не пойму, что должен делать плагин alticerik.

Для получения дополнительной информации о функциях и модификаторах см. Документацию здесь: Документация по функциям Smarty.net и здесь: Документация модификатора Smarty.net .

0 голосов
/ 24 января 2011

Вы имеете в виду $CI =& get_instance(); возможно?

а что не работает? Есть ошибки?

...