Я занимаюсь обновлением сайта на основе PHP с Smarty2 до Smarty3. Мне удалось заставить почти все работать в обеих версиях, заменив require_once('Smarty.class.php'
следующим:
@ include_once('SmartyBC.class.php');
if (class_exists('SmartyBC')) {
$smarty = new SmartyBC();
//this is for use outside templates. inside templates, $smarty.version == 'Smarty-3.x.y.z'
$smartyVersion = 3;
}
//catch (Exception $e) {
else {
require_once('Smarty.class.php');
$smarty = new Smarty();
$smartyVersion = 2;
}
Затем у меня есть символическая ссылка в /usr/local/lib/php/Smarty, которая указывает либо на версию 2, либо на версию 3. Чтобы переключаться между ними, мне нужно только изменить символическую ссылку. При использовании класса уровня совместимости (SmartyBC) почти все уже работает с обеими версиями. Я хотел бы сохранить совместимость с обеими версиями, пока все не будет полностью протестировано, и внести как можно меньше изменений в старые шаблоны. Имея это в виду, вот фрагмент кода, который я пытаюсь обновить:
//someinclude.php:
define('SOME_CONSTANT', 'someConst');
//somepage.tpl:
{if $dynVal == SOME_CONSTANT}dynamic content{/if}
Это не работает в V3, но это будет:
{if $dynVal == $smarty.const.SOME_CONSTANT}dynamic content{/if}
Эти константы (их довольно много) используются повсеместно, поэтому в идеале я хотел бы найти способ заставить работать первый способ в версии 3. Если это невозможно, каков самый чистый способ поддержки обе версии временно?