Компонент или модуль?

Автор перевода: Лебедев Сергей

Оригинал: Components vs. Modules

Часто на форумах новые пользователи Joomla сталкиваются со сложностями при определении понятий «Модуль» и «Компонент». Однако, как только различия между ними станут ясны, это позволит четче понять архитектуру Joomla. Итак, чем же отличается компонент от модуля?

Вот простой ответ: модуль может появиться на любой странице и имеет достаточно простое строение. Компонент загружается на свою собственную страницу и, как правило, сложнее устроен.

 

Такого ответа должно быть достаточно, чтобы удовлетворить простое любопытство. Если же Вас интересует более подробный ответ, тогда давайте начнем с описания того, как Joomla загружает страницы.

 

Когда кто-нибудь заходит на ваш сайт, он запускает файл index. php из каталога Joomla. Этот файл загружает различные классы и другие части кода, которые позволяют Joomla работать. После этого, Joomla ищет каталог текущего шаблона и пытается загрузить index.php оттуда. Итак, файл index. php содержится и в корневом каталоге и в каталоге шаблона, причем корневой index. php загружает шаблонный.

Шаблонный index.php обычно выглядит как типичный HTML файл. В этом файле Вы найдете строку <?php include_once('mainbody.php'); ?>. Эта строка приостанавливает запись HTML строк и включает код из mainbody. php, который загружает один компонент. Это означает, что каждая страница Joomla загружает компонент. (Можно убрать эту строку. Это приведет к тому, что Joomla перестанет загружать компоненты, и Ваш сайт потеряет львиную долю функциональности.) По-умолчанию, Joomla будет загружать компонент, сопоставленный с первым пунктом меню. Обыкновенно это пункт Home’ , указывающий на компонент frontpage’ . Как правило, он содержит ссылки на новостные статьи.  Как только Вы кликните на ссылку, загрузится компонент content’ вместе со статьей. Другие линки загружают другие компоненты.

Вдобавок к mainbody. php в шаблоне содержатся вызовы функций mosLoadModules(), например mosLoadModules(‘left ’);. Эта функция загружает все прикрепленные к текущему компоненту модули в ‘левую’ часть экрана (по-умолчанию, экран разделен на следующие части: левая (‘left’), правая(‘right’), верх(‘top’), низ(‘bottom’), внутренняя(‘inset’), пользователь1(‘user1’) и пользователь2(‘user2’)). После конфигурирования модуля в бэкенде появится список выбора, позволяющий прикрепить данный модуль к каким-либо компонентам. Для загрузки модулей во все позиции шаблоны не нужны, но они пригодятся для загрузки хотя бы одного модуля так, чтобы осталось место для меню до тех пор, пока Вы не пожелаете прописать его расположение сами.

Пользователей Вашего сайта обычно не волнует различие между модулем и компонентом. Однако, администраторам сайта необходимо знать как управлять этими элементами. Модули инсталлируются/деинсталлируются в подменю модулей.

Если Вы кликните на пункте Manage Modules’ , появится другой список, предоставляющий опции показа/скрытия (publishing/unpublishing), позиционирования и расположения. Этот список может быть длиннее первого за счет пользовательских модулей. Эти модули содержатся не в папке modules, а в базе данных, как статьи. В остальном, они ничем не отличаются от других модулей.

Все модули могут иметь какие-либо свои параметры. Это позволяет администраторам сайтов изменять настройки модуля без создания комплексного интерфейса. Например,  если разработчик хочет дать администратору возможность изменять фон модуля, он может добавить соответствующий параметр в менеджмент модуля. Администратор кликнет на заголовок модуля и сможет ввести, например, backgroundcolor = green в табличке Parameters’ .

Разработка админской части компонента требует больших временных затрат, но в результате получается простой для использования интерфейс, при помощи которого администратор сможет легко им управлять. При загрузке админской части компонента выполняется файл admin.[имя_компонента]. php из директории /administrator/components/

com_[ имя_компонента]. Большеоб админской части компонента (бэкенде) можно прочитать в учебнике Daily Message Component Tutorial.