We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 6866
    • 1 Posts
    Давно хотел добавить поддержку шаблонов Smarty - т.к. привык к нему и мне намного удобнее выводить сложные массивы и писать условия, при этом не заморачиваясь с кучей сниппетов, префиксами в плейсхолдерах итп. В работе я использую только свои модули - данные храню в собственных таблицах, а для вывода использую снипет, делающий выборку из базы. В результате получются массивы с данными. Сначала для вывода использовал такой подход: делал плейсхолдер с массивом, потом вызывал сниппет foreach, который по переданному имени плейсхолдера и чанку формировал вывод. В снипете foreach для каждого элемента массива парсил чанк, передавая ему ассоциативный массивчик с данными. Вроде как нормальный подход, но когда пришлось еще и условия писать, у меня появилось множество дополнительных сниппетов - if, condition итд. В итоге огромное колличество нечитаемого кода.
    Сейчас же все изменилось. Smarty отлично выполняет совю работу! Теперь мне достаточно вызвать снипет для выборки данных и потом вызвать снипет Smarty, передав ему имя чанка, содержащего смарти шаблон.
    Вообщем хочу поделиться идеей, может кому и пригодится.

    • Создаем папку /assets/snippets/smarty/
    • В ней папки templates и templates_c
    • В папке templates создаем файл base.tpl со следующим содержимым:
    {eval var=$template}

    • Скачиваем smarty http://www.smarty.net/download
    • Распаковываем скачанный архив и копируем папку lib в созданную нами папку smarty
    • Создаем новый сниппет Smarty со следующим содержимым:
    <?php
    if (isset($tpl)) {
        $smarty_path = $modx->config['base_path']."assets/snippets/smarty/";
        include_once $smarty_path."libs/Smarty.class.php";
        $smarty = new smarty();
        $smarty -> template_dir = $smarty_path."templates/";
        $smarty -> compile_dir = $smarty_path."templates_c/";
        $smarty -> assign('phr', $modx -> placeholders);
        $smarty -> assign('document', $modx -> documentObject);
        $smarty -> assign('template', $modx -> getChunk($tpl));
        return $smarty -> fetch('base.tpl');
    }
    return 'no template';
    ?>
    

    • Пользуемся [[Smarty? &tpl=`smarty_chunk`]]. Все плейсхолдеры доступны в переменной $phr. Данные страницы в переменной $document.
    Пример вывода заголовка страницы в шаблоне смарти:
    <h1>{$document.pagetitle}</h1>
    

    Появилась идейка по более глубокому внедрению смарти. Как закончу с обмозговыванием, выложу сюда же.
      • 37570
      • 2 Posts
      как ситуация с обмозговыванием?