Идея расширить границы применения компонентов в 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.

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