Подключаем шаблонизатор Twig к WordPress. Часть 1.

Author Автор: Роман Чернышов    Опубликовано: 7 октября 2011

Добавляем шаблонизатор Twig как плагин для WordPress.
Возможно, многие из вас сейчас крутят у веска пальцем и задаются вопросом – «Зачем это нужно?», и возможно вполне правы, наверняка это весьма сумасшедшая идея, но я все же скажу – «а почему бы и нет?».

Для начала познакомимся с Twig. Что это такое? – Twig это PHP шаблонизатор нового поколения, написанный Fabien Potencier, создателем фреймворка Symfony, в последней версии которого он как раз используется.

Как говорится на официальном сайте, данного чуда:

Быстрый – Twig компилирует шаблоны и при желании складывает их в Кеш, при этом скомпилированный PHP код полностью соответствует ООП, оптимизирован и скорость его последующей работы равна скорости работы обычного PHP кода.

Безопасный – Twig имеет изоляционный режим (режим песочницы), для работы с ненадежным кодом шаблона. Пользователь, имеющий доступ к шаблону, и возможность его редактировать не сможет воспроизвести произвольный код, или получить доступ к данным не касающихся непосредственно его, и нанести ущерб системе в целом.

Гибкий – Twig оснащен гибким лексическим и синтаксическим анализатором кода, это позволяет разработчику определять собственные пользовательские теги и фильтры.

И множество прочих достоинств, таких как: краткость, ориентированный на шаблоны синтаксис, полнофункциональный, легок в изучении, сообщения об ошибках и т.д.

Думаю предельно понятно почему я решил использовать именно твиг в качестве шаблонизатора для CMS WordPress, кроме всего это будет способствовать организации кода в шаблоне. Но главной причиной можно считать любопытство и интерес к данной задумке, удовлетворение не преодолимого желания привинтить твиг к своему блогу.

Я не очень люблю смешивать HTML и PHP теги, по этому в самописных проектах я предпочитаю использовать паттерн MVC, но в данном случаи такой возможности нет. Поэтому, после долгих размышлений, о том как реализовать мою идею, было принято решение написать плагин, который будет обеспечивать все необходимые задачи и позволит использовать twig.

Сначала я создал папку с именем плагина wp_twig_engine, затем в неё копируем папку Lib шаблозатора, скачать шаблонизатор с офф. сайта, таким образом, мы превратили весь набор скриптов твига в плагин для WP.

Затем создаем главный файл плагина: WP-twig.php, с содержимым

<?php
 /*
  Plugin Name: WordPress Twig templating engine
  Version: 1.0
  Plugin URI: http://rche.ru
 */
//Main twig library autoloader file
require_once dirname(__FILE__) . '/lib/Twig/Autoloader.php';
//My custom class made, I also want it to be autoloaded
require_once dirname(__FILE__) . '/Wp_TwigEngine.php';
 
function twigAutoLoad() {
 
    Twig_Autoloader::register();
    Wp_TwigEngine_Autoloader::register();
}
 
add_action('init', 'twigAutoLoad');
?>

Далее добавляем автозагрузку пользовательского класса, создаем файл в директории плагина: Wp_TwigEngine.php

<?
class Wp_TwigEngine_Autoloader {
 
    static public function register() {
        ini_set('unserialize_callback_func', 'spl_autoload_call');
        spl_autoload_register(array(new self, 'autoload'));
    }
 
 static public function autoload($class) {
        if (0 !== strpos($class, 'Wp_TwigEngine')) {
            return;
        }
 
        if (file_exists ( $file = dirname(__FILE__) . '/../' . 
         str_replace(array('_', "\0"), array('/', ''), $class) . 
         '.php')) {        
            echo($file);
            exit;
            require $file;
        }   
    }
}

Таким образом получаем плагин обрабатывающий шаблоны Twig, но для этого его еще предстоит немного настроить, для работы с основной папкой шаблона WP. Об этом в следующей статье.

1 Comment to “Подключаем шаблонизатор Twig к WordPress. Часть 1.”

  • Макс 07.10.2011 в 2:06 дп

    Ждем продолжения статьи, идея хоть и кажется безумной, но интересно) в одно время думал о подключении смарти, но так и не реализовал это на деле…

Оставить комментарий

Автор блога
Чернышов Роман
Роман Чернышов
Веб-разработчик,
Full Stack
Senior, Architector
PHP, JavaScript, Node.JS, Python, HTML 5, CSS 3, MySQL, Bash, Linux Admin
Заказать работу
предложить оффер

Последние вопросы
Список вопросов
Последние комментарии
Меню

Archive

Мои проекты
Insurance CMS Love Crm CMS Совместные покупки Мой PHP Framework Хостинг для моих клиентов Лицензии на мой софт и поддержка