Прикручиваем 3 Smarty к LS

В коментариях к одному из топиков, randomtoy попросил меня рассказать по подробней про прикрутку smarty 3 к ЛайвСтриту — рассказываю.

Там в общем-то ничего сложного нет.
1) Файл /engine/modules/viewer/Viewer.class.php
Не заработал метод Viewer -> TemplateExists()
Времени разбираться и делать по человечески не было, заменил внутренности функции на следующий код
if (file_exists($sTemplate)) return true;

foreach ($this->oSmarty->template_dir as $dir) {
   if (file_exists($dir . '/' . $sTemplate)) return true;
}
return false;


В этом же файле после
$this->oSmarty = new lsSmarty();

добавляем
$this->oSmarty->loadPlugin('smarty_modifier_escape');
if('rss'== Router::GetAction()){
   $this->oSmarty->loadPlugin('smarty_modifier_replace');
}


2) В самом смарти
файл — /engine/lib/external/Smarty-2.6.19/libs/sysplugins/smarty_internal_data.php: 226
public function getVariable($_variable, $_ptr = null, $search_parents = true, $error_enable = true)

заменил на
public function getVariable($_variable, $_ptr = null, $search_parents = true, $error_enable = false)

Возможно это где-то настраивается в конфиге, но ни дока ни гугл ответа не дали.

3) 3 смарти более строг к синтаксису потому при первом просмотре из шаблонов посыпятся ошибки.

Собсвенно все

UPD Все это проделано с текущим стабильным релизом Smarty 3.0.7.

11 комментариев

avatar
если сделали такой мини-гайд, уже было бы здорово прочитать в чем смысл переезда на смарти3 по вашему мнению.
avatar
в производительности
avatar
Во первых — прирост производительности. В моем случае 3й смарти работает на процентов на 20 быстре второго.
Во вторых — в третьем появилось много плюшек ради которых стоит перейти на него. Детальнее можно почитать тут.
avatar
Я всегда буду нажимать кнопку «предпросмотр», перед отправкой комента.
Я всегда буду нажимать кнопку «предпросмотр», перед отправкой комента.
Я всегда буду нажимать кнопку «предпросмотр», перед отправкой комента.
avatar
Sawadee Krap!
У меня к вам пара вопросов и не могу набраться наглости написать в лс.

Попробовал прикрутить по инструкции.
Скачал смарти, переименовал папку нового смарти в Smarty-2.6.19.
Все заменил. Получил —
Fatal error: Class 'Smarty_Internal_Wrapper' not found in Smarty.class.php on line 763

Второй вопрос по кэшу для анонимных пользователей. Вы писали в прошлом посте, что отдаете не авторизованным посетителям все из кэша. Безумно интересно как вы это реализовали. Все мои попытки закончились передачей куки неизвестно кому, кто начал под сессией админа удалять все подрят :-)
avatar
Кап.

Такие вопросы лучше обсуждать в топиках :)

в начале файла engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php есть код
if (SMARTY_SPL_AUTOLOAD && set_include_path(get_include_path() . PATH_SEPARATOR . SMARTY_SYSPLUGINS_DIR) !== false) {
    $registeredAutoLoadFunctions = spl_autoload_functions();
    if (!isset($registeredAutoLoadFunctions['spl_autoload'])) {
        spl_autoload_register();
    } 
} else {
    spl_autoload_register('smartyAutoload');
} 

Который региструрет смартевый автолоад. Вот он почему-то у Вас не срабатывает.
Я бы поставил брейкпоинты и проверил что там не так.

По кешу для анонимов.
Кешируется силами смарти, и пока не очень хорошо. Вся проблема в том что я пока не придумал как чистить кеш для анонимов когда меняется страница. Вернее придумал но еще не реализовал.

Алгоритм такой. При инициализации движка, если аноним и страница есть в кеше выплевываем ее из кеша и умираем. Если в кеше нет то генерируем страницу с Smarty->caching = true как обычно.

Если интересны подробности накатаю топик.
avatar
опять же, смарти 3 для PHP5
а в ls при php5 летят варнинги, поэтому не каждый человек готов перейти на пятую версию
кстати, вы забыли упомянуть об этом в топике :)
avatar
аа стоп, там же на 5 а не 6, праздник даёт о себе знать :) извиняюсь :)
avatar
php6 пока из области фантастики :)
На локалке эксперементировать можно, в продакшн сильно рано.
avatar
это да :)
а вообще хорошая идея обновить смарти, возможно, когда будет окончательное решение Макс внесёт его в транк — было бы здорово!
avatar
Поддерживаю!
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.