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