Пишем плагин для Thunder 3

Тема в разделе "Thunder 3.X", создана пользователем Firestarter, 29 июн 2016.

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

    Firestarter Администратор
    Команда форума

    26 окт 2015
    1.195
    553
    #1 Firestarter, 29 июн 2016
    Последнее редактирование: 29 июн 2016
    Пару заметок для тех, кто хочет расширить возможности доргена.
    Заметки будут работать, для всех версий, начиная с Thunder 3.0.

    Все плагины лежат в папке /plugins/ доргена. Подключаются автоматически при загрузке каждой страницы дорвея.

    Файл плагина должен бить именован латинскими символам с Заглавной.
    Название класса плагина начинается с приставки которая является название файла + _Twig_Extension

    Заготовка для плагина(файл Plugin.php + название класса Plugin_Twig_Extension):

    Код:
    <?php
    
    class Plugin_Twig_Extension extends Twig_Extension
    {
    
        private $container  = NULL;
    
        function __construct ($container = NULL) {
      
            $this->container = $container;
        }
    
        public function getName()
        {
            return 'plugin';
        }
    
        public function getDescription()
        {
            return '';
        }
    
        public function getGlobals()
        {
            return [];
        }
    
        public function getFunctions() {
            return [];
        }
    
        public function getFilters()
        {
            return [];
        }
    
    }
    Функция getName - должна возвращать название плагина в транслите.
    Функция getDescription - описание функционала плагина.
    getName и getDescription автоматически подхватываются админкой и отображаются на странице "Плагины".

    Функция getGlobals() регистрирует все ваши глобальные переменные для шаблонизатора доргена.
    Функция getFunctions() регистрирует все функции для шаблонов доргена.
    Функция getFilters() регистрирует все фильтра для шаблонов доргена.

    Функции и переменные зарегистрированные в getGlobals() выполняться всегда, доже без использования их в шаблоне.
     
  2. Firestarter

    Firestarter Администратор
    Команда форума

    26 окт 2015
    1.195
    553
    Напишем простую функцию для вывода текущего ключа страницы(не зависимо от того включен ЧПУ или нет):

    В getFunctions() добавляю:

    Код:
    public function getFunctions() {
            return [
                new \Twig_SimpleFunction('get_current_url', array($this, 'getCurrentUrl')),
            ];
        }
    и ниже добавляю функцию , которая будет выводить ключ:

    Код:
    public function getCurrentUrl() {
    
            $url = $this->container->request->getUri()->getPath();
    
            $chanks = explode("/", $url);
    
            $encoded_keyword = end($chanks);
    
            if(empty($encoded_keyword)) {
                return null;
            }
    
            if($this->container->cache->contains($encoded_keyword)) {
    
                return $this->container->cache->fetch($encoded_keyword);
    
            } else {
    
                return rawurldecode($encoded_keyword);
            }
    
        }
    Если в шаблон сайта добавить:

    {{get_current_url()}}

    Сработает наша функция getCurrentUrl и выведет текущий ключ.

    ПС: если нужно зарегистрировать еще одну функцию, добавляем новый элемент массива в getFunctions:

    Код:
    public function getFunctions() {
            return [
                new \Twig_SimpleFunction('get_current_url', array($this, 'getCurrentUrl')),
                new \Twig_SimpleFunction('get_hello_world', array($this, 'getHelloWorld')),
            ];
        }
     
    Art, sheck и amness нравится это.

Поделиться этой страницей