Здравствуйте! Прошу подсказать, как правильно подключить нужный шаблон в Smarty используя условие. Есть форма с полем ввода «Серия», если в это поле введено «CM» нужно вывести ответ в другом шаблоне (с другим дизайном). {if $request.serial == 'CM'} {extends "layout2.tpl"} {else} {extends "layout.tpl"} {/if} Предполагаю, что это не совсем сложно, но и не так просто, как я написал вышел в примере… Однако в синтаксисе Smarty я пока новичок.
Однако в синтаксисе Smarty я пока новичок. Так для этого документацию Smarty надо смотреть, на оффсайте Smarty. Правильней {if $request.serial == 'CM'} {include "layout2.tpl"} {else} {include "layout.tpl"} {/if}
Спасибо — это мне дало понять, что это условие надо вызывать не внутри Smarty, а в самом начале в файле base.php, где начинается подключение шаблона. <?php
$properties = $modx->resource->getOne('Template')->getProperties();
if(!empty($properties['tpl'])){ $tpl = $properties['tpl']; } elseif($request.serial == 'CM') $tpl = 'index2.tpl'; else{ $tpl = 'index.tpl'; }
if ($modx->resource->cacheable != '1') { $modx->smarty->caching = false; }
if(!empty($properties['phptemplates.non-cached'])){ $modx->smarty->compile_check = false; $modx->smarty->force_compile = true; }
return $modx->smarty->fetch("tpl/{$tpl}"); Только теперь надо копать в сторону, как правильно получить значение из поле сериал. elseif($request.serial == 'CM') $tpl = 'index2.tpl'; Потому что так, он явно не понимает, где это поле «serial».
Вот уж точно не по фэншую это… и затрется при переустановке компонента modxSite. Плюс к этому, там чистый php, а значит надо юзать $_REQUEST, а не не понять откуда взявшуюся $request. В общем, учите основы php и разработки сайтов, иначе никак вообще. А то на трехколесном велике только пару метров проехали, а уже хотите тур дэ Франс выиграть.
strcasecmp($_REQUEST['serial'], 'cm') === 0; С этим я был почти рядом )) надо было 3 знака равенства оказывается… Заменил свои костыли на это — все работает. Спасибо, Николай, отличная информация. Думаю многим пригодится!
Пожалуйста.