Как установить cookie в шаблоне smarty с помощью php?

В настоящее время у меня проблема с установкой файла cookie в блоке PHP-кода, который находится в классе шаблона smarty .tpl.

В классе .tpl у меня есть что-то вроде:

{php}
    setcookie("school", "test");
{/php}

School: { $smarty.cookies.school }

Однако при этом ничего не печатается. Я знаю, что вызов php setcookie работает, когда он находится только в файле .php, так как я это тестировал, но не могу заставить его работать с фрагментом кода php, который находится в классе .tpl.

Любой совет оценен, D


person darewreck    schedule 19.11.2011    source источник
comment
Мой совет - не делайте этого. Шаблоны должны выполнять только логику отображения, а не изменять состояние.   -  person webbiedave    schedule 19.11.2011
comment
Почему тогда вы не можете установить cookie из своего php файла?   -  person Cyclonecode    schedule 19.11.2011
comment
Да, я бы предпочел не делать этого, но я использую фреймворк не для этого, и я не хочу менять базовый код .. = (   -  person darewreck    schedule 19.11.2011
comment
Я не хочу изменять базовый код фреймворка. Фреймворк позволяет мне изменять определенные файлы, которые можно настроить и которые не влияют на базовый код. Фреймворк имеет последовательные обновления, которые могут повлиять на изменения, которые я делаю в базовом коде. Если это было сделано с настраиваемой частью, мне не нужно беспокоиться о проблемах с обновлением.   -  person darewreck    schedule 19.11.2011
comment
Тджис - это просто плохая практика.   -  person Rasmus Styrk    schedule 19.11.2011


Ответы (2)


{php}
    setcookie("school", "test");
    $_COOKIE['school'] = 'test';
{/php}

Это потому, что суперглобальный $ _COOKIE обновляется только при обновлении страницы, а не после использования setcookie()

Убедитесь, что вы используете SmartyBC.class.php, а не Smarty.class.php, потому что {php}{/php} не будет работать с Smarty.class.php.

Также не забудьте установить для свойства $php_handling значение SMARTY_PHP_ALLOW.

Дополнительная информация http://www.smarty.net/docsv2/en/variable.php.handling.tpl

person Peter    schedule 19.11.2011
comment
как определить, используете ли вы SmartyBC.class.php или Smarty.class.php? У меня это не работает, значит ли это, что я использую Smarty.class.php? В чем разница? Спасибо, - person darewreck; 19.11.2011
comment
У меня не получалось с Smarty.class.php. Смотрите мой обновленный ответ. - person Peter; 19.11.2011
comment
Однако, даже если я могу установить переменную, когда я перехожу на следующую страницу, файлы cookie больше не сохраняются и не устанавливаются. Я использую firebug в firefox, чтобы увидеть установленные файлы cookie. Есть что-то еще, на что я не обращаю внимания? - person darewreck; 21.11.2011
comment
Вы также захотите выполнить это перед любым выводом HTML на страницу. - person Andrew; 12.12.2012

Вместо того, чтобы вставлять встроенный php-код в свой шаблон, я создал умный плагин настраиваемой функции, который при вызове позволяет мне устанавливать файлы cookie.

Подробная информация о пользовательских функциях: http://www.smarty.net/docsv2/en/plugins.functions.tpl Питер указал мне на идею сделать это.

Однако мне все еще немного любопытно, как это можно сделать на встроенном php в коде шаблона, даже если это не рекомендуется в качестве хорошей практики.

person darewreck    schedule 21.11.2011