Если в 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.
Ссылки
- Справка на официальном сайте: https://octobercms.com/docs/plugin/components (англ.)
- https://octobercms.com/docs/cms/components (англ.)
- Пишем плагин для October CMS: https://habr.com/post/250415/
Спасибо за серию статей. Есть ли аналог multitv в Октябре?
MultiTV – это аналог MIGX в Revo.
В October он есть и называется Repeater: https://zooks.ru/modx-to-october-cms-part3/
Привет Автор) в MODX сообществе бывают возникают вопросы по поводу создания больших магазинов на несколько миллионов товаров и все они сводятся к тому что виснет админка и вообще нужно оптимизировать работу MODX и писать свои сниппеты для вывода товаров. Я хотел узнать у вас, был ли опыт создания большого магазина на OctoberCMS и с какими проблемами столкнулись вы, ну и какой плагин магазина использовался. Заранее спасибо )
Приветствую, Максим. Автор плагина Shopaholic для October CMS писал о проекте на 20 000 товаров.
Я бы на вашем месте выбрал чистый Laravel.