Пишем компонент joomla. Файловая структура компонента для CMS Joomla

В этом уроке мы создадим простой компонент, который строчку «Hello!» в браузере.
Перед тем, как начать создавать компонент, у Вас на сервере должна быть установлена CMS Joomla 1.5. Если Вы еще не установили, то это можно сделать с помощью уроков в разделе «Установка Joomla ».

В этом уроке сначала создадим папку компонента под названием com_hello, в которую нам нужно добавить пять файлов:
site/hello.php - точка входа в наш компонент;
site/controller.php - содержит наше основное управление компонентом (Контроллер);
site/views/hello/view.html.php - обрабатывает данные и передает их в шаблон для вывода;
site/views/hello/tmpl/default.php - шаблон для вывода данных;
hello.xml- XML служит для передачи инструкций для Joomla по установке компонента.

В следующих уроках мы будем добавлять еще файлы, и общая файловая структура нашего компонента будет выглядеть так, как показано на рис. 2.1. Скачать архив с исходными кодами можно здесь.

CMS Joomla всегда обрабатывает ссылку в корневом файле index.php для страниц Front End (сайт) или administrator/index.php для страниц Back End (админ-панель). Функция обработки URL загрузит требуемый компонент, основанный на значении "option" в URL (метод GET) или переданных данных методом POST.

Для нашего компонента, URL выглядит так:
index.php?option=com_hello&view=hello

Это означает, что если пользователь введет в браузере строчку http://имя сайта/index.php?option=com_hello&view=hello, то переменная «option» получит значение «com_hello&view=hello».

http://имя сайта/components/com_hello/hello.php.

Код для этого файла довольно типичен для всех компонент:

Примечание к коду:

JPATH_COMPONENT – это абсолютный путь к текущему компоненту; в наше случае - components/com_hello.
Для Front End - JPATH_COMPONENT_SITE
Для Back End - JPATH_COMPONENT_ADMINISTRATOR
DS означает автоматический выбор слеша (разделителя директорий) "\" или "/".
JRequest:getVar() находит переменную в URL (или в данных POST). Например, наш URL может выглядеть так index.php?option=com_hello&controller=controller_name, тогда мы можем получить имя нужного нам контроллера, используя:
echo JRequest::getVar(“controller”).

Сейчас мы используем наш базовый контроллер-класс HelloController в com_hello/controller.php. При необходимости, добавляем контроллер HelloControllerController1 из com_hello/controllers/controller1.php.

Такой стандарт упрощает схему многозадачного компонента (это будет использоваться в последующих уроках, в данном случае в нашем компоненте одна задача).

Теперь мы инструктируем контроллер исполнить задачу, которая определена в URL: index.php?option=com_hello&task=sometask. Если нет определения задачи, то по умолчанию будет задача "display". Когда используется задача "display" , переменная "display" укажет то, что выводить. Пример стандартных задач - save, edit, new...

На последней строке кода контроллер переадресовывает страницу. Обычно используется для таких задач как SAVE.

Главная точка входа (hello.php) пропускает управление на контроллер, который обрабатывает выполнение задачи, которая была определена в запросе.

Создание Контроллера

Так как наш компонент имеет только одну задачу (вывод «Hello»), то он будет очень прост. Никакой манипуляции данными не требуется. Все что нужно сделать, это загрузить необходимый view. Поэтому, мы будем иметь только один метод в нашем контроллере: view (). Большинство требуемых функциональных возможностей уже встроено в JController класс. Потому мы должны только вызывать метод JController:: view ().

Код основного контроллера site/controller.php такой:

Конструктор JController будет всегда по умолчанию регистрировать задачу display() используя метод registerDefaultTask(), если не определена другая задача. В самом деле, метод display() не нужен после того, но в нашем случае он есть хорошей демонстрацией того, что делает контроллер.

Метод JController:: display() метод определит имя view и шаблон из запроса, потом загрузит view и установит шаблон. Когда Вы создаете пункт меню для вашего компонента, менеджер меню позволит администратору выбирать задачу с которой начинать выполнение компонента.

В нашем компоненте, view имеет единственное значение - hello и шаблон имеет единственное значение - default (по умолчанию).

Создание вида (view)

Для создания вида нужно извлечь данные, которые будут отображаться, и передать их в шаблон. Данные передаются в шаблон с помощью метода JView::assignRef

К од Вида в файле site/views/hello/view.html.php следующий:

Создание шаблона

Joomla шаблоны являются файлами PHP, которые создают вид данных. Переменные, переданные с помощью метода JView::assignRef можно получить из шаблона с помощью $this->propertyname.
В нашем простом шаблоне site/views/hello/tmpl/default.php мы только выводим на экран приветствие.

greeting; ?> Создание hello.xml

Компонент можно установить вручну путем копирования файлов с помошью FTP-клиента на сервер, и модификации базы данных.

Но лучше создать xml файл, и тогда Установщик Joomla все сделает за вас. XML файл может содержать разнообразную информацию и инструкции по установке:

  • Общую информацию о компоненте и авторе.
  • Список файлов, которые нужно скопировать из архива, с указанием куда копировать;
  • По-необходимости можно добавить скрипты сопровождающие установку и удаление компонента;
  • По-необходимости можно добавить файлы с sql-запросами, которые будут выполняться при установке и удалении компонента.

Наш XML файл выглядит так:

Hello 2007 02 22 Имя Автора author собачка mail.net http://www.autor.net Копирайт Лицензия Component Version String Description of the component ... index.html hello.php controller.php views/index.html views/hello/index.html views/hello/view.html.php views/hello/tmpl/index.html views/hello/tmpl/default.php Hello World! index.html admin.hello.php

Создайте также в каталоге admin файлы admin.hello.php и index.html. Оставьте их пока пустыми.
Как Вы заметили, каждая папка имеет файлы index.html (рис. 2.1). Файлы index.html помещают в каждый каталог, чтобы препятствовать пользователям получать листинг каталога.
Эти файлы содержат одну единственную строку:

С помощью этих файлов будет отображаться пустая страница.
У нас получился простейший компонент.

Архив исходных файлов для этого урока можно скачать по этой ссылке:

Предлагаю читателям «Хабрахабра» обзорную статью-шпаргалку по основным классам, используемым при разработке компонентов в CMS Joomla 3.0 +. Далее в планах сделать подробный обзор каждой группы классов в отдельности.Структура компонентов Joomla Компонент является базовой логической единицей, построенной в соответствии с моделью MVC.

Компонент состоит из следующих структурных единиц:
  • Точка входа в компонент – исполняемый php файл в корне каталога компонента. В нем расположен код инициализации и вызова базового контроллера компонента;
  • Класс контроллера компонента – анализирует uri и вызывает нужное действие (по умолчанию рендеринг дефолтного view);
  • Модели – содержат основную бизнес-логику приложения;
  • Виды – содержат контроллеры видов, получающие данные для отображения из моделей и файлы шаблонов вывода;
  • Контроллеры – содержат методы действий для обработки пользовательского ввода.
  • Классы необходимые при разработке компонентов При разработке расширений используются классы платформы Joomla. Некоторые из них служат базовыми классами для новых пользовательских классов, другие являются вспомогательными, предоставляя интерфейс для использования возможностей системы.Базовые классы, расширяемые пользовательскими классами при создании компонентов Для того, чтобы соответствовать модели MVC, каждый компонент должен содержать в себе модели, виды и контроллеры. Платформа Joomla предоставляет классы содержащие в себе базовый функционал всех трех составляющих MVC-приложения. Вновь разрабатываемые классы должны расширять базовые классы с целью повышения скорости разработки за счет повторно используемого кода.

    Классы MVC платформы Joomla:

  • Класс таблиц JTable – реализует шаблон ActiveRecord для работы с базой данных.
  • Классы моделей содержат бизнес-логику. При работе с базой данных зачастую используют класс JTable. В платформе Joomla существуют следующие классы моделей:
    • JModelLegacy – базовый класс моделей в Joomla;
    • JModelList – класс моделей списка – содержит методы групповой записи, выборки коллекции, выборки коллекции поэтапно для пагинации;
    • JModelItem - класс модели значения – содержит методы для работы с одним экземпляром;
    • JModelForm – класс обработки форм – содержит методы обработки и валидации форм;
    • JModelAdmin – наследуется от JModelForm. Предоставляет методы для автоматизированного выполнения задач администрирования компонента.
  • Классы контроллеров – обрабатывают пользовательские действия, являются промежуточным звеном между моделями и видами. Основные классы контроллеров:
    • JControllerLegacy – базовый класс контроллеров, предоставляет методы для пользовательского ввода и рендеринга видов, является базовым для остальных видов контроллеров;
    • JControllerForm - класс, предоставляющий методы для базовых CRUD операций при обработке форм;
    • JControllerAdmin – предоставляет методы для выполнения базовых операций обработки данных в административной панели.
  • Классы видов. Получают данные из моделей, рендерят шаблон вывода. Имеют методы для управления текущим документом (веб-страницей), такие как изменение заголовка, изменение содержания мета тегов или их добавление/удаление. Основные классы видов:
    • JViewLegacy – предоставляет методы получения данных из моделей и их передачу в шаблон отображения;
    • JViewCategory – класс отображения категории материалов;
    • JViewCategories – класс отображения списка категорий.
  • Классы, предоставляющие интерфейс для доступа к возможностям системы Ниже представлены классы, представляющие собой инструменты для работы с теми или иными сущностями веб-приложения.
  • Класс JFactory – является фабрикой для получения существующих и создания новых объектов классов сущностей веб приложения;
  • Класс JApplicationCms – предоставляем метод для настройки, запуска, остановки веб приложения, а так же настройки и запуска переадресации, управления роутингом. Экземпляр текущего приложения доступен через статический метод JFactory::getApplication();
  • Класс JRegistry – содержит методы для чтения и записи конфигурации приложения. Объект JRegistry доступен через JFactory::getConfig();
  • Класс JSession – содержит методы для работы с сессиями. Позволяет открывать и зарывать сессии, записывать и читать значения. Текущий экземпляр JSession доступен через JFactory::getSession().
  • JLanguage – содержит методы для установки локализации приложения. Текущий объект доступен через JFactory::getLanguage();
  • JDocument – инструмент работы с DOM моделью страницы для рендеринга. Доступен через JFactory::getDocument();
  • JUser – класс представляющий пользователя системы. Метод JFactory::getUser() позволяет получить данные текущего пользователя в системе;
  • JAccess – класс для управления списками контроля доступа. Объект JAccess доступен через JFactory::getAcl();
  • JDatabaseDriver – класс взаимодействия с базой данных через PDO. Объект доступен через JFactory::getDbo();
  • JMail – класс для отправки сообщений по электронной почте. Объект класса доступен через метод JFactory::getMail().
  • Теги: joomla 3.4, разработка компонентов joomla

    И вы хотите ознакомится с ее основными возможностями, особенностями и устройством. Описать все в одной статье не возможно, поэтому пробегусь только по основным функциям и понятиям.

    Войдите в административную панель Joomla по адресу http://вашсайтру/administrator, введите логин и пароль. У вас откроется главная страница админ. панели.

    Где: 1) Главное меню Joomla; 2) Панель быстрого доступа.

    Главное меню админ. панели Joomla

    Начинающих пользователей путают понятия модулей плагинов, компонентов и их расположение. Давайте попробуем разобраться в этом вопросе:

    В Joomla есть 3 основных компонента "Менеджер пользователей", "Менеджер меню", "Менеджер материалов", они отделены от всех других, и для удобства и быстрого доступа, вынесены в отдельные пункты "Пользователи", "Меню" и "Материалы". Остальные можно найти открыв меню "Компоненты".

    Пункт верхнего меню "Система" - здесь вы сможете произвести основные настройки сайта, выбрать редактор, очистить кэш, посмотреть информацию о движке и системе. А с выходом версии Joomla 3 теперь можно настроить и любой компонент.

    Пункт меню "Пользователи" . Тут вы сможете добавлять, удалять, одобрять новых пользователей, делать рассылку, настроить права для пользователей, создать группы пользователей. Ваш профиль администратора с настройкой пароля, email, редактора, тоже находится в менеджере пользователей.

    Пункт "Меню" . Если нужно добавить или изменить пункты меню на front-end сайте, то этот компонент поможет. Можно создавать отдельные группы меню сайта и выводить их при помощи модуля. В пунктах меню формируются ссылки на страницы сайта. Т.е. создавая пункт можно выбрать, на страницы какого компонента он будет вести. А компонент в свою очередь наполняется нужной информацией, которою можно вывести при помощи пункта меню. Кроме того можно сделать индивидуальные настройки отображения страницы на которую он ведет. Например указать "Показывать заголовок страницы или нет", "Какой шаблон отображать для этой страницы", "Настроить отображение мета информации страницы", "Порядок пунктов меню", "Какой из пунктов меню будет главной страницей", "Опубликовать пункт меню или скрыть" и др.

    Пункт меню "Материалы" . С помощью этого компонента Joomla можно создавать страницы сайта с текстовым и медиа-, контентом. Страницы можно сортировать по группам при помощи категорий с неограниченной вложенностью. Материалы и категории можно выводить списком, в виде блога или по отдельности. Настройка отображения материалов производится через сам компонент, либо через общие настройки.

    Пункт меню "Компоненты" . Тут вы найдете список всех установленных компонентов и сможете перейти в любой из них. Компоненты служат для создания и управления разного вида контента например каталог, магазин, форум и т.д.. Вывести содержимое компонента можно через меню выбрав его из списка.

    Пункт меню "Расширения" - в подменю этого пункта вы найдете менеджеры модулей, плагинов, языков и шаблонов. А так же менеджер установки новых расширений, в том числе и компонентов.

    Компоненты, модули, плагины и шаблоны Joomla

    Для того, что бы двинуться дальше нужно разобраться в том, что лежит в основе этой CMS. Работа с Joomla строится на 4 основных видах расширений, которые создают практически неограниченные возможности по наращиванию функционала сайта, от визитки до полноценного интернет-магазина.

  • Компоненты - это скрипты, которые обладают наибольшей функциональностью и выводят основной контент сайта (статьи, галереи, ССК, форумы, ссылки, поиск, редакторы). Основные компоненты уже встроены в ядро joomla, остальные можно скачать бесплатно или купить и установить на свой сайт.
  • Модули - это расширения, которые дополняют компоненты и отображают нужную информацию на сайте. Например: пункты меню сайта создаются в компоненте, а выводятся при помощи модуля; Форма поиска выводится при помощи модуля, информация из формы обрабатывается компонентом, который в свою очередь выводит результаты поиска; Список последних новостей выводится при помощи модуля, но сами новости создаются с помощью компонента "Менеджер материалов".
  • Плагины - это еще один вид расширений функциональности. Плагины выполняют заложенную в них функцию в момент появления определенного события в системе. К примеру это удобно для отображения одного и того же визуального редактора, выбранного пользователем для всей системы, в разных компонентах и модулях.
  • Шаблоны - позволяют настраивать вид отображения компонентов, модулей и дизайна сайта. Для работы с шаблонами требуются навыки HTML и CSS. Некоторые шаблоны обладают богатым набором настроек, который позволяет менять его вид без навыков верстки и программирования.
  • Я так и не понял в чем разница компонентов, модулей и плагинов.

    Тогда нужно посмотреть на front-end сайта и разобраться где модули, а где содержание компонентов. для наглядности выделил все модули красной рамкой, а компонент зеленой.

    Где модули:

    1) Модуль "Меню"; 2) Модуль "Календарь"; 3) Модуль "Произвольный HTML код" - где при помощи визуального редактора я разместил и настроил вид блока; 4) Модуль "Последние новости" - выводит последние материалы из выбранной категории. Тут выведено сразу три модуля с названиями "Конкурсы", "Новости", "События", по сути это одно и тоже только названия и категории материалов разные.

    Компоненты:

    5) С помощью компонента в данном случае выводится материал с заголовком "О проекте" и текстом.

    Здесь я написал небольшое руководство для начинающих о том как пользоваться Joomla. Более подробную информацию о том как работать с Joomla вы сможете узнать из ссылок по теме в низу страницы.

    Для того чтобы иметь хороший рабочий пример для статей на тему разработки компонента для Joomla! 3.0 , я (David Hurley) выбрал вариант прохождения непосредственно по процессу написания реального расширения. Этот компонент будет доступен для обзора и загрузки с сопроводительного веб-сайта Lendr (сейчас сайт недоступен), на который я буду ссылаться в этой и будущих статьях. Моя цель – это написание полноценного компонента, а не примера вроде "Hello World", для того чтобы продемонстрировать ключевые моменты реальной разработки компонента .

    Шаг 1: Опишите основную схему компонента

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

    Детали компонента

    Название: Lendr
    Название компонента: com_lendr
    Описание: Lendr – это компонент Joomla! 3.0 (использующий Bootstrap), который позволит пользователям создавать профиль, добавлять книги в коллекции своей библиотеки, просматривать библиотеки других пользователей, попросить книгу в долг, добавлять книги в списки желаемых (wishlist), а также подписываться на список ожидания определенной книги.

    Основные функции

    Новый компонент Lendr будет иметь следующий набор возможностей:

    • Аккаунты пользователей / Профили
    • Книги / Библиотеки для пользователей
    • Списки для желаемых книг
    • Одалживание / Заимствование книги
    • Запросы на заимствование книги
    • Списки ожиданий на уже заимствованные книги

    Теперь мы должны написать базовую структуру необходимых нам файлов. Это точно не будет исчерпывающий список, и он, скорее всего, будет изменяться в процессе написания компонента. Однако, имея изначальную схему, мы сможем хоть как-то придерживаться нашего пути. Вот первоначальная схема ключевых файлов необходимых для Lendr:

    Controllers Models Views Tables Misc.
    Save
    List
    Add
    Edit
    Lend
    Delete
    Wish
    Review
    Request
    Default
    Book
    Default
    Library
    Profile
    Review
    Waitlist
    Wishlist
    Book
    Wishlist
    Library
    Profile
    Waitlist
    Review
    Book
    Wishlist
    Library
    Waitlist
    Review
    Install
    Router
    XML
    Основные файлы

    Теперь, когда мы все выписали, мы начинаем создавать эти файлы в нашей структуре папок.

    Шаг 2: Создайте файлы базы данных

    Мы начинаем с создания файлов базы данных. Мы сохраняем эти файлы в папке таблиц, которая расположена во фронтэнде нашего компонента. Мы создаем все файлы, которые описали в нашей схеме. Вот один из этих фалов /components/com_lendr/site/tables/book.php:

    Hello World! January 2018 John Doe [email protected] http://www.example.org Copyright Info License Info 0.0.1 Description of the Hello World component ... sql/updates/mysql index.html helloworld.php Hello World! index.html helloworld.php sql

    site/helloworld.php