Переход с MODX на October CMS. Часть 5-я: Создаём плагин

Переход с MODX на October CMS

Если в MODX  достаточно создать сниппет и скопировать в него PHP-код. То в «Октябре» код можно писать либо в лейаутах (layout), либо оформить в виде плагина. Сейчас мы рассмотрим второй случай, т.к. первый подразумевает смешивание кода Twig и PHP в одном файле, что, на мой взгляд, не совсем правильно.

Создаем каркас плагина

В командной строке пишем:

php artisan create:plugin Acme.Blog

где Acme – ваш никнейм или название компании, а Blog – название плагина.

php artisan create:component Acme.Blog MyComponent

Открываем Plugin.php и добавляем наш компонент, для этого закомментируем пустой return []; и укажем название компонента.

    public function registerComponents()
    {
//        return []; // Remove this line to activate

        return [
            'Acme\Blog\Components\MyComponent' => 'myComponent',
        ];
    }

Теперь компонент можно вызывать на наших лейаутах:

[mycomponent]

При необходимости создаем контроллер, чтобы добавить бизнес-логику. Название можно использовать такое же как у компонента:

php artisan create:controller Acme.Blog MyComponent

Пишем функционал

Для вывода данных, к примеру, постов добавляем публичную функцию (метод) posts() в наш компонент components/MyComponent.php. В примере она лишь возвращает массив с данными:

    public function posts()
    {
        return ['First Post', 'Second Post', 'Third Post'];
    }

Теперь её можно вызывать на странице (либо в лейауте, паршле) для получения данных:

{% for post in mycomponent.posts %}
    {{ post }}
{% endfor %}

Можно обойтись и без дополнительной функции. Для вывода данных в переменную задаем публичное свойство в классе компонента:

public $navigation = [];

И присваиваем ему значение в методе onRun():

public function onRun()
{
    $navigation = ['Link 1', 'Link 2', 'Link 3'];
    $this->navigation = $this->page['navigation'] = $navigation;
}

В файле шаблона компонента mycomponent/default.htm добавляем код:

<ul>
{% for item in navigation %}
    <li>
        {{ item }}
    </li>
{% endfor %}
</ul>

Теперь можно вызывать компонент в нашем лейауте:

[mycomponent]
==
…

{% component 'mycomponent' %}

Итог

Итак, сегодня мы научились создавать простейшие компоненты без моделей и контроллеров. Всё достаточно просто и намного продуманнее портянок кода, которые мы привыкли видеть в сниппетах MODX.

Ссылки

Total
0
Shares
5 comments
  1. Привет Автор) в MODX сообществе бывают возникают вопросы по поводу создания больших магазинов на несколько миллионов товаров и все они сводятся к тому что виснет админка и вообще нужно оптимизировать работу MODX и писать свои сниппеты для вывода товаров. Я хотел узнать у вас, был ли опыт создания большого магазина на OctoberCMS и с какими проблемами столкнулись вы, ну и какой плагин магазина использовался. Заранее спасибо )

    1. Приветствую, Максим. Автор плагина Shopaholic для October CMS писал о проекте на 20 000 товаров.
      Я бы на вашем месте выбрал чистый Laravel.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Previous Article

Как сохранить лайки в Tumblr

Next Article

О формате WebP

Related Posts
отключить CSS
Далее

Как отключить CSS в Chrome и Firefox

Иногда бывает нужно временно отключить CSS в браузере для тестирования сайта. Ниже рабочий метод для удаления стилей в…