dimayakovlev.ru


Что нового в GetSimple Extended CMS: Автоматический вызов компонентов в экшенах

Идея расширить границы применения компонентов в GetSimple CMS была давно. Для оригинальной GetSimple CMS Shawn Alverson написал плагин sa hook components, автоматически выполняющий код компонентов при вызове соответствующих экшенов (хуков). Этот плагин я рекомендовал всем, как возможность сократить общее количество установленных плагинов, заменяя их компонентами. В GetSimple CMS Extended было принято решение задействовать вариант совместного использования компонентов и экшенов в виде стандартной возможности ядра системы управления контентом.

Несмотря на объективную пользу добавленной возможности, на практике она востребована не всеми пользователями и даже может представлять опасность, о чём будет рассказано далее, поэтому по умолчанию использование вызовов компонентов в экшенах отключено. Для её включения в файле конфигурации gsconfig.php следует определить постоянную GSCOMPONENTACTION со значением true. Закомментированный код уже добавлен в файл gsconfig.php, достаточно его раскомментировать.

define('GSCOMPONENTACTION', true);

Теперь все компоненты, названные по схеме action_action-name, где action_ - префикс, указывающий на то, что компонент будет вызван экшеном, а action-name - имя экшена, вызывающего компонент, будут автоматически вызываться при вызове соответствующих экшенов. Например, для вызова компонента в экшене header следует создать компонент с именем action_header.

Ранее в GetSimple CMS Extended была добавлена возможность включения и отключения компонетов. Это работает и с компонентами, вызываемыми в экшенах. Если вызов компонента в экшене временно не требуется, его можно не удалять и не переименовывать, достаточно его отключить.

Существует ограничение при использовании компонентов - в компоненте нельзя зарегистрировать новый экшен при помощи функции add_action(). Следующий код, в котором регистрируется экшен theme-components, работать не будет, но и не приведёт к ошибке.

<?php
	function echoInSidebar() {
		echo '<p>Text in sidebar added from the action.</p>';
	}
	add_action('theme-components', 'echoInSidebar');
?>

Ещё одним важным ограничением для компонентов, вызываемых экшенами панели администрирования, является невозможность использования привычной функции get_component(), возвращающей результат выполнения кода компонента. Это связано с тем, что функция get_component() относится к функциям темы оформления и доступна для вызова только в файлах шаблонов темы оформления. Её включение в код вызываемого экшеном компонента приведёт к ошибке. Это справедливо и для остальных функций, используемых в шаблонах темы оформления. Что касается функции get_component(), возможно, в будущих обновлениях GetSimple CMS Extended это ограничение будет снято.

Так как компоненты могут содержать выполняемый код PHP, следует относиться к их использованию с большой осторожностью. Особенно актуально это при работе с компонентами, вызываемыми через экшены панели администрирования. В случае допущенной ошибки в PHP коде, можно потерять доступ к управлению веб-сайтом сразу после сохранения компонента в редакторе. В этом случае следует вручную восстановить файл /data/other/components.xml из сохранённой копии /backups/other/components.xml.bak. Или вручную отредактировать файл /data/other/components.xml, заменив для компонента, вызвавшего проблему, элемент <enabled>1</enabled> на <enabled>0</enabled> или <enabled/>.

Так как компоненты в GetSimple CMS Extended стали выполнять большую роль в сравнении с ролью блоков кода, встраеваемых в файлы шаблонов темы оформления в оригинальной GetSimple CMS, принято решение пересмотреть местоположение пункта меню для перехода на страницу редактора компонентов.

Пункт меню Edit Components бокового меню страниц подраздела Theme был удалён. Теперь доступ к редактированию компонентов доступен из главного навигационного меню панели администрирования через пункт меню Components.

Пункт главного меню Components в GetSimple Extended CMS для быстрого доступа к странице редактора компонентов

Для перевода нового пункта меню, в языковой файл следует добавить ключ TAB_COMPONENTS, содержащий вариант перевода слова Components на соответствующий язык.

Настоятельно рекомендую ознакомиться со списком доступных экшенов в оригинальной GetSimple CMS и в GetSimple CMS Extended, чтобы попробовать в деле новую возможность вызова компонентов в экшенах, и понять для себя реальные доступные возможности разработки без установки дополнительных плагинов.