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

Если в 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.

Ссылки

Комментарии читателей

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