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

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

Статус темы:
Закрыта.
  1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Внимание!!! До 1 Мая, скидка 30% на Thunder 3 и MassSiteProxy в магазине. http://ifirestarter.ru
    76197935908C47D5
    DB8D53C51B1B4292
    ECE321C0FEAA401A
    BC91C339687A45BF
    D2B06542439C4948
    400AF79DD3C64D5A
    C244061C86A64B01
    6E1B8B292E944D0D
    354131281E244BD3
    A11B629F8F97427F
  1. Firestarter

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

    26 окт 2015
    1.242
    559
    #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.242
    559
    Напишем простую функцию для вывода текущего ключа страницы(не зависимо от того включен ЧПУ или нет):

    В 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 нравится это.