Назначьте переменную Smarty для PHP с помощью Smarty 3

Я использую магазинную систему, которая была обновлена ​​с smarty 2 до smarty 3, что привело к появлению списка проблем на нашем сайте. Хуже всего то, что все переменные Smarty, которые мы назначили для их использования в PHP, больше не работают.

Краткий пример:

{assign var=test value=$ORDER_NUMBER}
{php}
    $order = $this->get_template_vars('test');
    echo $order;   
{/php}

Это приводит к следующей ошибке:

FATAL ERROR(1): "Using $this when not in object context"

Теперь на странице Smarty я нашел несколько строк кода, которые делают то же самое, но выглядят немного иначе, например, эта:

$order = $smarty->getTemplateVars('test');

что приводит к:

FATAL ERROR(1): "Call to a member function getTemplateVars() on null"

Ни одно из этих «решений», которые я нашел, больше не работает со времен Smarty 3.


person Marcel Wasilewski    schedule 07.10.2015    source источник
comment
get_template_vars() устарел, используйте getTemplateVars() и убедитесь, что перед этой строкой: $smarty->getTemplateVars('test') вы инициализировали свой смарт-объект.   -  person Amani Ben Azzouz    schedule 07.10.2015
comment
Тег php также устарел в smarty3, вы должны использовать доступные возможности для расширения smarty, чтобы заменить использование php блоков пользовательскими блоками/функциями/...   -  person Tom Regner    schedule 07.10.2015
comment
Ваш второй метод должен работать с использованием переменной $smarty. Если нет, то попробуйте поставить global $smarty; перед вашим кодом. Однако ваш код плохой и очень устаревший, и его необходимо со временем изменить. В следующей версии smarty он, скорее всего, вообще не будет работать.   -  person Toby Allen    schedule 08.10.2015


Ответы (1)


По какой-то причине ничего из вышеперечисленного не сработало. Теперь я передал код в тегах {PHP} во внешний файл PHP, а затем вернул функцию обратно в smarty.

Ниже у меня есть пример для тех, кто борется с этим (не забудьте включить файл PHP в свой index.php или что-то еще):

Я хочу получить некоторую информацию о продукте из базы данных, но в smarty указан только {$module_data.PRODUCTS_ID}.

Итак, в моем файле, где я использую умный тег, я отправляю эту переменную в свою функцию в PHP: {$module_data.PRODUCTS_ID|@get_random_function}

Затем в моем внешнем файле PHP я выполняю свою функцию PHP и возвращаю нужные мне данные:

function get_random_function($products_id)
{
    $t_sql = $sql = "SELECT * FROM products WHERE products_id='".$products_id."'";
    $retval = mysql_query($t_sql);
    $row = mysql_fetch_assoc($retval);


    return $row['gm_needed_data'];
}

Теперь {$module_data.PRODUCTS_ID|@get_random_function} выводит мне результат моей функции PHP.

person Marcel Wasilewski    schedule 09.10.2015