Намного о Smarty на пальцах

Тема в разделе "Shop-script", создана пользователем Ash_Ketchum, 5 май 2008.

Статус темы:
Закрыта.
  1. Ash_Ketchum

    Ash_Ketchum Постоялец

    Регистр.:
    17 фев 2008
    Сообщения:
    89
    Симпатии:
    6
    Вот нашёл на компе статью по шаблонизатору Smarty.

    1. Введение

    Каждый рано или поздно начинает задумываться об оптимизации своих приложений, структуризации кода и конечно же полном отделении дизайна от логики. Именно о шаблонизации дизайна мы сегодня и поговорим. В статье будет описан шаблонный движок Smarty. Почему именно Smarty? Потому что это лучший на сегодняшний день бесплатный продукт, проверенный временем. Мало того, он позволяет кэшировать шаблоны, предварительно компилируя их, в результате чего может работать быстрее, чем приложения, в которых не используется шаблонизации вообще. И так, обо всё по порядку.

    2. О рассматриваемых в статье вопросах

    В рамках текущей статье будут рассмотрены основные моменты, наиболее часто применяемые в проектах средней сложности. Это подключение шаблонизатора, передача значений и массивов в шаблон, для дальнейшей обработки. Так же мы рассмотрим немало важный аспект – реализация многоязычности приложений. И второй, и основной момент – работа с этими данными в шаблоне. В пределах данной статьи я не буду рассматривать кэширование и принципы написания плагинов для движка. С этим вы сможете ознакомиться самостоятельно, почитав, мануал на http://smarty.net/manual/ru/

    3. Детали реализации

    Итак, начнём с установки движка. Для этого посетите страницу http://www.smarty.net/download.php и скачайте последнюю версию. На текущий момент это версия от 5-го марта 2007 года. В архиве находится каталог Smarty со всеми необходимыми для работы классами и плагинами. Всё что нам потребуется знать о ней в рамках данной статьи – это каталоги templates и templates_c. Каталогу templates_c необходимо дать права на запись, т.к. в неё будут сохраняться системой откомпилированные шаблоны.

    Рассмотрим работу с движком на уровне кода:

    PHP:
    <?php

    //Инициализация класса и установка начальных параметров:
    //инициализируем смарти

    require_once('smarty/Smarty.class.php');

    //Создаём обьект класса

    $smarty = new Smarty();

    //Устанваливаем папки шаблонов

    $smarty->template_dir 'templates';
    $smarty->compile_dir 'templates_c';  

    //Передача данных из БД в шаблон:
    //открытие соединения
    //Получение данных их БД

    $DB->query("SELECT * FROM news ORDER BY ID LIMIT 0,10");

    //Передача массива с данными в шаблон в переменную news
    //Примечание: в методе fetchrowset() данные были предварительно помещены в ассоциативный
    //массив, имя которого соответсвует полю в таблице

    $smarty->assign('news'$DB->fetchrowset());

    //Допустим что наша задача была в простом выводе данных в шаблон, что мы уже и сделали, и это
    //конечный этап – вызываем метод display() класса smarty, который выводит, передаёт данные в
    //шаблон, перекомпилирует (если были изменения) и выводит контент.
    //Методу передается имя файла шаблона, в котором как предполагается был обработан нужным
    //образом массив news 

    $smarty->display('index.tpl.html');

    ?>
    Теперь рассмотрим непосредственно файл шаблона index.tpl.html, фактически это обычный html с вставками переменных и конструкций циклов. Все переменные в движке заключены в фигурные скобки. Следующий пример демонстрирует.

    HTML:
    
    <html>
    
    {foreach from=$news item=item}
    Заголовок: {$item.title}
    
    Teкст новости:
     {item.description}
    
    Полная версия: <a href="index.php?id={$item.id}">Подробнее...</a>
    {/foreach}
    
    </html>
    
    Вот собственно и всё, это рабочий пример, который будет выводить 10 извлечённых нами новостей из базы данных.

    Теперь рассмотрим далее, как реализуется манипуляция загрузкой шаблонов для вывода например подробной новости если запрошен параметр id, в противном случае главной страницы:

    В каталог templates поместим ещё два файла, home.tpl.html и full.tpl.html

    Добавим в код php условие запроса подробной новости
    PHP:
    if(isset($_GET['id']))
    {     
    //Запросы к БД, обработка данных
    //В переменную main_content_template поместили имя шаблона, который будет загружен в главный index.tpl.html шаблон
    $smarty->assign('main_content_template''full.tpl.html');
    }
    Else
    {
    $smarty->assign('main_content_template''home.tpl.html');
    }
    Немного модифицируем html файл, поместив цикл в файл home.tpl.html Теперь подключим дополнительный шаблон:
    HTML:
    
    <html>
    
    {include file=$main_content_template}
    
    </html>
    
    Сейчас в файл index.tpl.html будет подключаться дополнительный файл, в соответствии с переменной main_content_template, т.е. либо контент на главной – либо контент в подробнее.

    Обычные значения переменных передаться тем же методом assign(), только в шаблон выводяться непосредственно {$name}, которое было определенно в первом аргументе метода.

    Управляющие структуры реализуются аналогично,
    PHP:
     {if $param == 10}
    html код, либо любые другие операторы, циклы, управляющие структуры и т.п.
    PHP:
    {/if}
    И немного о реализации многоязычности.
    Допустим сайт должен поддерживать два языка: русский и английский. Добавим соответствующие параметры на сайте, выбрав которые данные о выбранном языке будут записаны в сессию, БД или куда угодно ещё.

    Создадим языковой два языковых файла, с набором констант такого вида:

    PHP:
    <?php
    define
    ('BUTTON_LOGIN''логин');
    //…
    ?>
    Аналогично англоязычный файл и сколько угодно других. Т.е. инклудим в скрипте соответствующий языковой файл.

    В шаблонах смарти доступ к константам осуществляется следующим образом:
    PHP:
    {$smarty.const.BUTTON_LOGIN}
    – соответственно BUTTON_LOGIN имя константы.

    Если вдруг появится необходимость использовать php код прямо в шаблоне, то помещаем в шаблоне блок {php}{/php} – между тегами php код, без параметров .

    Ещё существует проблема, когда в коде шаблона вставлены блоки java script, некоторые его операторы, в частности if, компилятор smarty будет рассматривать как операторы smarty. Поэтому JS код лучше выносить в отдельные файлы, либо вокруг кода ставить оператор {literal}{/literal}, внутри этого оператора компилятор не будет искать другие операторы smarty.

    В статье не раскрыто очень много, она лиш создана для минимального ознакомления с возможностями и назначением движка. Smarty предоставляет больше половины функций php по работе со строками в шаблонах, математические функции и прочее. Подробно все функции описаны в официальном мануале на http://smarty.net/manual/ru/

    З.Ы. Источник уже не помню, к сожалению....:confused:
     
    AlexandriusII, adlar, partizannn и ещё 1-му нравится это.
  2. zascia

    zascia Писатель

    Регистр.:
    13 авг 2008
    Сообщения:
    3
    Симпатии:
    0
    Супер! Действительно на пальцах быстро и доступно. Это то, чего не хватало мне как верстальщику без опыта программинга.
    Спасибо!
     
Статус темы:
Закрыта.