Передача переменной в умную функцию

В моем PHP-приложении я использую Smarty для создания шаблонов и некоторых пользовательских функций. В приведенном ниже примере имя функции — «текст», которое принимает атрибут «ключ». Эта функция получит строковое значение на основе ключа

Приведенный ниже пример отлично работает без проблем.

{text key='isearch+login_name'}

Я пытаюсь динамически передать значение атрибуту. В приведенном ниже коде переменная $plugin будет иметь значение dynmaci и ее нужно заменить.

{text key='isearch+$plugin_plugin'}

С приведенным выше кодом я получаю вывод как «isearch+$plugin_plugin», а не правильное строковое значение.

Функция PHP для функции Smarty приведена ниже.

function smarty_function_text($params, $smarty)
{
    $key = $params['key'];
    unset($params['key']);

    $key = explode('+', $key);

    return OW::getLanguage()->text($key[0], $key[1], $params);
}

person Purus    schedule 18.05.2014    source источник


Ответы (1)


Решение с фильтром cat:

{text key="isearch+"|cat:$plugin|cat:"_plugin"}

В качестве альтернативы вы можете просто добавить строку в двойные кавычки и пометить переменную часть внутренними кавычками:

{text key="isearch+`$plugin`_plugin"}
person jsalonen    schedule 18.05.2014
comment
Прости. Ни один из них не работал. _plugin также является строкой, а не частью динамического значения. - person Purus; 18.05.2014
comment
Неожиданный ., ожидаемый один из: } , , ATTR - person Purus; 18.05.2014
comment
Теперь я получаю Undefined Offset: 1 ошибка, отображаемая в функции Smarty. - person Purus; 18.05.2014
comment
Отредактировал мой вопрос, чтобы добавить код функции текста. - person Purus; 18.05.2014
comment
Спасибо. Я получаю это сейчас; Я пропустил + из присвоения значения. Проверьте редактирование. - person jsalonen; 18.05.2014
comment
Какую ошибку вы получили после добавления этого +? Также, если это не работает, добавьте echo $key перед вызовом explode и добавьте сюда то, что он печатает. - person jsalonen; 18.05.2014
comment
В порядке. Я понял проблему. Вы должны использовать {text key=$keyname}, а не просто {text key=keyname}. Пожалуйста, отредактируйте свой ответ, чтобы я мог его принять. Остальной код hte в порядке. - person Purus; 18.05.2014
comment
О да ты прав! Еще раз отредактировал. Также попробуйте oneliner и посмотрите, работает ли он. Если нет, то удаляю. - person jsalonen; 18.05.2014
comment
Оба ваших решения работают нормально. Спасибо за ваше время на это. - person Purus; 18.05.2014
comment
Можете ли вы также проверить, работает ли форма внутренней цитаты? Тогда я остановлюсь :) - person jsalonen; 18.05.2014
comment
Я думаю, что " не хватало, сейчас исправлено. Но ладно, я отказываюсь от этого, если он все еще не работает. P.S. Пожалуйста! - person jsalonen; 18.05.2014
comment
Ок, отлично. Упрощение моего ответа, чтобы отразить это (первое было специальным решением, которое я удалю). - person jsalonen; 18.05.2014