Проектный плагин
Популярные запросы: тема Omnis, плагин Pagelist, Cotonti 0.9.24.2, ЧПУ, Font Face
- 37 просмотров
- 17 сентября, 2024
- Обновлено: 23 сентября, 2024
- admin
- Время чтения: 4 минуты
- 3 (Подробно)
Одним из самых интересных достоинств Cotonti является возможность реализовывать баланс между типовыми и кастомными возможностями и решениями. Другими словами, в “коробке” мы имеем то, что подойдет условному большинству. При этом у любого разработчика есть удобный инструмент для того, чтобы безболезненно расширить эти возможности в требующем этого проекте.
Речь, естественно, идет о хуках. Эта фича Cotonti подробно расписана в документации к движку, но все же мы вкратце напомним что это такое.
Хук представляет собой событие в коде дистрибутива, позволяющее с помощью соответствующего обработчика исполнять в нем скрипт, являющийся частью стороннего расширения.
Говоря простым языком, в ядре, модулях и плагинах Cotonti Siena есть некие точки входа, где вы можете исполнять собственный код, модифицируя логику работы дистрибутива или добавляя собственную. Даже в собственных плагинах можно размещать хуки для перспективного добавления “нетипового” для них функционала.
Пример использования хука
В качестве примера рассмотрим реализацию размещения страницы не в одном, а в нескольких разделах. Для этого нам понадобится:
- модификация SQL-запроса, которую мы реализуем через хук
page.list.query
; - экстраполе, в котором мы определим код дополнительного раздела.
Сделать это несложно с помощью следующего кода:
<?php /* ==================== [BEGIN_COT_EXT] Hooks=page.list.query [END_COT_EXT] ==================== */ defined('COT_CODE') or die('Wrong URL.'); $where['cat'] .= ' AND page_extracat = "shop"';
Но теперь возникает вопрос: а где все это разместить? Естественно, модификации дистрибутива мы даже не рассматриваем, поэтому адекватных решений здесь два:
- Создавать плагин под каждый использованный хук.
- Создать так называемый проектный плагин, в котором собирать все модификации для данного проекта.
Второй вариант мне подходит больше, поэтому о нем подробнее.
Проектный плагин и как он организован
Все свои модификации в пределах каждого конкретного проекта я размещаю в сборном плагине, который называю проектным. Благодаря этому я вижу все изменения и, при необходимости, могу легко:
- изменить или отключить любое из них,
- скопировать любой обработчик в другой проект.
При этом мне не нужно разбираться в россыпи мелких плагинов, вспоминая в котором из них я реализовал ту или иную задачу.
Создаем проектный плагин
Здесь нет ничего сложного, поскольку проектный плагин представляет собой стандартное расширение Cotonti, создаваемое и оформляемое по общим правилам.
Допустим, наш проект называется Juno. Ничего не усложняя, используем это же имя в названии нашего плагина. Создадим папку /plugins/juno
, в которой разместим файл juno.setup.php
со следующим содержанием:
<?php /* ==================== [BEGIN_COT_EXT] Code=juno Name=Juno Category=administration-management Description=Add/modify features for the Juno project Version=1.00 Date=2024-09-17 Author=Put your name here Copyright=© 2024 your copyright here Notes= Auth_guests=R Lock_guests=W12345A Auth_members=R Lock_members=W12345A Requires_plugins= Requires_modules= Recommends_plugins= Recommends_modules= [END_COT_EXT] [BEGIN_COT_EXT_CONFIG] [END_COT_EXT_CONFIG] ==================== */ defined('COT_CODE') or die('Wrong URL');
Для приличия создадим папку /plugins/juno/lang
, в которой разместим файл juno.ru.lang.php
с локализационными строками:
<?php /** * Russian Localization for the Juno Plugin * @package juno */ defined('COT_CODE') or die('Wrong URL'); $L['info_name'] = 'Juno: проектный плагин'; $L['info_desc'] = 'Модификации кода для проекта Juno';
Теперь настала очередь нашего примера с хуком page.list.query
. В папке /plugins/juno
создадим файл с именем juno.page.list.query.php
и разместим в нем наш указанный выше код.
Устанавливаем и обновляем проектный плагин
Дело за малым: заходим в панель управления сайтом и устанавливаем наш плагин. Проверяем реализацию нашего функционала. Если все сделано правильно, в разделах мы увидим дополнительные страницы, которые мы сконфигурировали с помощью указанного экстраполя.
Теперь при необходимости добавить новый обработчик какого-либо хука нам надо создать соответствующий файл, указать в нем необходимый хук и обновить наше расширение в админке.
Если необходимо и дальше работать с хуком page.list.query
, необходимо убедиться в отсутствии конфликтов или накладок. В противном случае необходимо использовать операторы условия. Например, селективно выполнять кастомный код в разделах с конкретным кодом или шаблоном:
... if ($c == "shop") { $where['cat'] .= ' AND page_extracat = "shop"'; } ...
Выводы и заключение
В сравнении с большинством конкурентов, Cotonti Siena была и остается компактным и быстрым движком. Отчасти благодаря тому, что она не перегружена экзотическим или мало используемым функционалом.
При этом вы легко и безболезненно для целостности дистрибутива можете добавить свой собственный код для модификации стандартной “коробочной” логики или добавления кастомной. И, конечно, используя хуки вместо хаков ядра, вы сохраняете возможность обновления движка без потери дополнительного функционала.
Используя проектный плагин, вы сможете локализовать, изменять и управлять своими модификациями и, при желании, легко переносить их в следующие проекты. Этот простой лайфхак позволит вам реализовать гибкость движка и повысить эффективность своей работы над проектом любой сложности.
Ранее мы сравнивали возможности FTP и Git в работе над проектом.
Новый комментарий