Главная Учебники Программисту Создание компонента Ежедневных сообщений
Создание компонента Ежедневных сообщений

Автор перевода Федоринов Григорий
Оригинал можно найти по ссылке The Daily Message Joomla Component Tutorial

Учебник по компоненту «Ежедневные сообщения».

Это пособие должно помощь вам создать компонент с функциональной зоной администрирования. После прочтения вы будете понимать как работают некоторые классы из ядра Joomla, чтобы вы смогли использовать наилучший методы для создания своих собственных компонентов. Полностью законченная версия компонента « Ежедневные сообщения » доступна здесь. Компонент также может устанавливаться на Mambo 4.5 and 4.5.1.

 

Скачать компонент Ежедневные сообщения

 

Учебник по компоненту «Ежедневные сообщения».

Это пособие должно помощь вам создать компонент с функциональной зоной администрирования. После прочтения вы будете понимать, как работают некоторые классы из ядра Joomla, чтобы вы смогли использовать наилучший методы для создания своих собственных компонентов. Полностью законченная версия компонента « Ежедневные сообщения » доступна здесь. Компонент также может устанавливаться на Mambo 4.5 and 4.5.1.

Различные люди будут понимать функциональность компонентов joomla по разному. Разработчики с опытом разработок на PHP могут начинать с файла dailymessage.php (файл который управляет фронтендом – зоной пользователя) и admin.dailymessage.php (файл который управляет бекендом – зоной администратора). Остальные будут начинать понимать с XML файла в котором описаны все содержащиеся файлы в компоненте, а также SQL – запросы для создания таблиц необходимых для компонента в базе данных.


  • dailymessage.php
  • admin.dailymessage.php
  • admin.dailymessage.html.php
  • dailymessage.class.php
  • toolbar.dailymessage.php
  • toolbar.dailymessage.html.php
  • install.dailymessage.php / uninstall.dailymessage.php
  • XML file

{mospagebreak title=Описание файла dailymessage.php}

dailymessage.php

Этот файл отображает то что увидет пользователь когда компонент «Ежедневные Сообщения» загружен. Хотя этот код прост это все что необходимо для генерирования HTML для любой версии Joomla. Это только файл, который копируется в папку components/com_dailymessage.

Расскажем подробнее что в этом файле находится:

{moscode} {/moscode}

Эта строка описывает, что только Joomla может вызвать исполнение этот файл. Именно с нее должны начинаться все php файлы – это сделано в целях безопасности.

{moscode}{/moscode}

Объект $database объявляется в ядре Joomla и директива 'global' делает этот объект доступным в компоненте.

{moscode}setQuery("SELECT * FROM mos_joe_dailymessage_conf LIMIT 1"); $rows = $database->loadObjectList(); $row = $rows[0]; ?>{/moscode}

Запуск MySQL запросов в Joomla состоит из 2-х этапов. Первый вы используете метод setQuery() чтобы сохранить текст SQL запроса в объекте $database. Когда вы используете функцию такую как loadObjectList(), то SQL запрос выполнятеся и возвращатеся результат запроса. Строка $row = $rows[0] присваивает переменные из первого изобъекта в списке в массив $row. При этом мы возвращаем информацию о конфигурации из базы данных, которая хранится в одной записи.

Также , в MySQL запросах Joomla можно заменять префикс ‘mos_’ на '#_' в этом случае даже если префикс установленной базы данных joomla отличается от ‘mos_’, то запрос все равно остается работоспособным. Это позволяет запускать компонент на сайтах где установлено несколько CMS в одной базе данных, отличающих ся префиксом.

{moscode}bold; $italic = $row->italic; $underline = $row->underline; $showdate = $row->showdate; ?> {/moscode}

После загрузки результата запроса в массив, мы помещаем отдельные значения из массива в переменные для дальнейшего их использования.

{moscode} "; $endtags = "" . $endtags; } if($italic == 1) { $starttags .= ""; $endtags = "" . $endtags; } if($underline == 1) { $starttags .= ""; $endtags = "" . $endtags; } ?> {/moscode}

Этот код выстраивает начало и конец строки настроек, которые были выбраны из базы данных. Эти строки будут использованы ниже для форматирования сообщения.

{moscode}setQuery("SELECT * FROM mos_joe_dailymessage WHERE published = '1'"); $rows = $database->loadObjectList(); ?> {/moscode}

Используя объект $database как показано выше мы устанавливаем запрос и выводим содержание сообщений из таблицы в список объектов $rows.

{moscode} ?> Теперь мы начинаем вывод HTML кода. Тег ?> разрешает использовать HTML в php файле пока не начнется тег {moscode} "; else echo ""; echo ""; } ?> {/moscode}

Этот цикл просматривает каждый объект в массиве объектов $rows и загружает содержание в $row. Теперь мы способны вывести информацию и строки компоновки, которые выведут должным образом отформатированный HTML.

{moscode} ?>

" . mosFormatDate($row->date) . "
" . $starttags . $row->message . $endtags . "

{/moscode}

Вывод заканчивается закрытием тега table.

{mospagebreak title=Описание файла admin.dailymessage.php}

admin.dailymessage.php

Этот файл управляет видом, который видит администратор, когда конфигурирует компонент. Большая часть вида генерируется через функцию HTML_joeDailyMessage [от скромности я не умру :) ] находящуюся в файле admin.dailymessage.html.php .

{moscode} acl_check( 'administration', 'edit', 'users', $my->usertype, 'components', 'all' ) | $acl->acl_check( 'administration', 'edit', 'users', $my->usertype, 'components', 'com_dailymessage' ))) { mosRedirect( 'index2.php', _NOT_AUTH ); } ?> {/moscode}

Так выполняется проверка чтобы убедится что пользователь является администратором.

{moscode} getPath( 'admin_html' ) ); require_once( $mainframe->getPath( 'class' ) ); ?> {/moscode}

Эти 2 строки включают файлы admin.dailymessage.html.php и dailymessage.class.php. Функция getPath() возвращает соответствующие полные пути и имена файлов.

{moscode} $id = mosGetParam( $_REQUEST, 'cid', array(0) ); if (!is_array( $id )) { $id = array(0); } {/moscode}

Главный вид имеет форму на которой расположен список состоящий из чекбоксов имеющий name = 'cid.' Функция mosGetParam() возвращает этот массив и сохраняет в переменной $id. Если массив не предстален (например когда загружена первая страница), $id устанавливается в пустой массив чтобы предотвратить ошибки, которые могли бы возникнуть в дальнейшем.

{moscode} {/moscode}

Теперь наступает подходящий момент поговорить о различиях между $task и $act. Когда администратор делает щелчок на кнопке "publish" или "save," действие должно быть передано компоненту. Это достигается через переменную $task. Эта кнопка используется для различных форм и это необходимо для того чтобы компонент узнал какая форма была отправлена в данный момент. Теперь настает черед переменной $act. В главном меню при выборе Daily Message появляется два субменю - опции: Edit Messages и Configure. Эти опции называются 'all' и 'configure’ соответственно.

Компонент Daily Message использует оператор switch, чтобы выбрать действие, которое будет совершено. Внешний переключатель основан на переменной $act, которая может принимать значения такие как 'all' и 'configure'.

{moscode} {/moscode}

Теперь описание функций для обработки различных заданий. Первая будет обновлять базу данных с новыми переменными, когда кто-нибудь нажмет кнопку 'save' на странице конфигурации. Первое, переменная $option variable применяется в функции и будет установлена в 'com_dailymessage' окружением Joomla. Это значение будет передано после того как пользователь зайдет в администраторскую часть данного компонента. Следующее объект $database уже определен вне функции. Когда мы декларируем какой либо объект $row например joeDailyMessageConf [defined in dailymessage.class.php], являющийся расширением класса mosDBTable. Объекты основаны на mosDBTable имют много методов, которые позволяют упростить процесс записи информации в базу.

{moscode} bind($_POST)) { echo " alert('" .$row -> getError() ."'); window.history.go(-1); n"; exit(); } ?> {/moscode}

Этот код использует наследованный метод bind() от класса mosDBTable для получения значения переменных из массива post и копирования их в объект $row. Если попытка использовать этот метод не удалась, a Javascript показывает сообщения об ошибке. Ошибка показывается Javascript как всплывающее окно, которое возвращает пользователя на предыдущую страницу.

{moscode} store()) { echo " alert('" .$row -> getError() ."'); window.history.go(-1); n"; exit(); } {/moscode}

Эта часть кода описывает попытку сохранить информацию из объекта $row в базу данных. Обработка ошибок такая же как и в предыдущей части.

{moscode} {/moscode}

В заключении, если все прошло успешно, пользователь перемещается назад к странице конфигурирования с сообщением "Configuration Saved", которое будет показано вверху экрана. Переменная $option, говорит Joomla страница какого компонента будет использоваться т.е. если значение переменной 'com_dailymessage' то выводится страница администрирования компонента Daily Message. Замечание: URL несодержит переменную 'act' со значением 'configure', то он перемещается на страницу по умолчанию компонента Daily Message: редактирование сообщений.

{moscode} setQuery("SELECT * FROM mos_joe_dailymessage_conf" ); $rows = $database -> loadObjectList(); ?> {/moscode}

Эта функция загружает текущую конфигурацию из базы данных и показывает ее в виде формы, при этом значения могут быть отредактированы администратором. Вызывается соответствующий запрос и результат загружается в объект $rows как список объектов.

{moscode} getErrorNum()) { echo $database -> stderr(); return false; } ?> {/moscode}

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

{moscode} {/moscode}

Это вызывает функцию listConfiguration объекта HTML_joeDailyMessage из файла dailymessage.class.php file.

{moscode} alert('Select an item to $action'); window.history.go(-1);n"; exit; } ?> {/moscode}

Когда администратор хочет опубликовать письмо эта функция устанавливает флаг 'published' сообщения в '1.' Первое мы должны определить действительно ли действие является публикацией. Если нет, то выводим ошибку и редиректим пользователя на предыдущую страницу. Строка, где $action устанавливается посредством краткой версии директивы 'if'. Переменная устанавливается в 'publish' если условие выполняется, т.е. $publish равно 1, аналогично если переменная установлена в 'unpublish.' Javascript показывает сообщение и редиректит пользователя.

{moscode} {/moscode}

Если мы имеем статьи которые отмечены на публикацию, мы устанавливаем строковую переменную $сids которая включает в себя весь список идентификаторов статей, которые находятся в масссиве $id и разделяет переменные посредством запятых. Этот прием позволяет нам просто вставить все это в SQL запрос.

{moscode} setQuery( "UPDATE mos_joe_dailymessage SET published='$publish'" . "nWHERE id IN ($cids)" ); if (!$database->query()) { echo " alert('".$database->getErrorMsg()."'); window.history.go(-1); n"; exit(); } ?> {/moscode}

Запрос отсылается в базу данных и любая ошибка будет показана при помощи Javascript.

{moscode} {/moscode}

В заключении администратор редиректится назад к главной странице компонента Daily Message в зоне администрирования.

{moscode} bind($_POST)) { echo " alert('" .$row -> getError() ."'); window.history.go(-1); n"; exit(); } // сохраняем все в базе данных if (!$row -> store()) { echo " alert('" .$row -> getError() ."'); window.history.go(-1); n"; exit(); } mosRedirect("index2.php?option=$option", "Saved"); } ?> {/moscode}

Эта функция обычно идентична с saveConfiguration(), только эта функция записывает строку в базу с типом joeDailyMessage и редиректит на страницу по умолчанию (редактирование сообщений) "Saved."

{moscode} alert('Select an item to delete'); window.history.go(-1);n"; exit(); } ?> {/moscode}

Список ежедневных сообщений для удаления обрабатывается следующей функцией. Если нет идентификаторов статей в массиве $cid [или $cid не является массивом], любая ошибка будет показана и администратор будет возвращен на предыдущую страницу.

{moscode} setQuery("DELETE FROM mos_joe_dailymessage nWHERE id IN ($ids)"); } ?> {/moscode}

Если сообщения, которые нужно удалить были выбраны, вызываем запрос, который удаляет эти сообщения.

{moscode} query()) { echo " alert('" .$database -> getErrorMsg() ."'); window.history.go(-1); n"; } mosRedirect("index2.php?option=$option"); } ?> {/moscode}

Запрос на удаления выполнен и администратор возвращен на страницу по умолчанию.

{moscode} load($uid[0]); } ?> {/moscode}

Когда администратор выбирает сообщения для редактирования, эта функция будет загружать соответствующее сообщение из базы данных в объект $row. Однако администратор может редактировать только одно сообщение одновременно – первое $uid [0].

{moscode} {/moscode}

Функция edit() явлется методом класса HTML_joeDailyMessage, который генерирует соответсвующий вид – HTML страницу. Строка базы данных и имя компонента (com_dailymessage) передаются для того чтобы был сгенерирован соответствующий HTML-код.

{moscode} setQuery("SELECT * FROM mos_joe_dailymessage ORDER BY id" ); ?> {/moscode}

Эта последняя функция для показа страницы по умолчанию. Если не передается конкретное задание, которое должно быть выполнено выполняется эта функция. При этом показывается список всех сообщений, которые администратор может редактировать, удалять публиковать/делать неопубликованными. Запрос установлен для выборки содержания ежедневного сообщения из таблицы. Он отсортирован по полю id т.к. оно представляет собой автоинкремент, т.е. при добавлении новой записи id увеличивается. Такой способ позволяет легко создать уникальный ключ и позволяет выводить список в порядке создания.

{moscode} loadObjectList(); if ($database -> getErrorNum()) { echo $database -> stderr(); return false; } HTML_joeDailyMessage::listMessages($option, $rows); } ?> {/moscode}

Запрос выполняется и если имеет какие либо ошибки, они просто выводятся в странице. Функция listMessages() в классе HTML_joeDailyMessage вызывается для генерации необходимой HTML странички.

{pagebreak title=Описание файла admin.dailymessage.html.php}

admin.dailymessage.html.php

{moscode} {/moscode}

Эта строка кода проверяет действительно ли этот файл вызывается Joomla.

{moscode} {/moscode}

Этот класс первоначально вызывается из файла admin.dailymessage.php и обрабатывает основной вывод HTML для зоны администрирования.

{moscode} {/moscode}

Аргументами этой функции являются название компонента (com_dailymessage) и строка записи из базы данных загружанных в admin.dailymessage.php и показывает форму, где администратор может редактировать сообщение.

{moscode} ?> {/moscode}

Если строка записи базы данных загружена, то форма заполняется данными . Заметьте что поле 'Published' выводится при помощи метода yesnoSelectList класса mosHTML. Класс mosHTML декларирован в файле classes/mambo.php и доступен в любом месте Joomla. Этот метод генерирует выпадающее меню с двумя значениями 'no' и 'yes'. Если значение переменной $row-published равно 0, то будет выставлено значение 'no'. Если значение 1, тогда будет выставлено 'yes'. Это более изящный метод создания административных интерфейсов, нежели чем использовать чекбоксы.

{moscode}

Message:  
Date:  
Published: published ); ?>

Скрытые поля содержат идентификатор сообщения id, имя компонента, и задачу task. Значение 'task' изначально не установлено, однако яваскрипт заполняет это поле в зависимости от того какая кнопка нажата.

 

{moscode}

Bold bold ); ?>
Italic italic ); ?>
Underline underline ); ?>
Show Date showdate ); ?>

{/moscode}

Эта форма заполняется данными из первой записи таблицы mos_joe_dailymessage_conf table [здесь только одна запись]. Метод yesnoSelectList() делает простым управление данными на форме.

{moscode} configid ?> /> Переменные option, task, configid, и act передаются скрытыми полями из формы. Переменная 'configid' выбирает, какая именно запись редактируется, хотя в данном случае у нас только одна запись. Переменная 'act' передает в admin.dailymessage.php данные о том что события произошли на форме редактирования конфигурации, а не сообщений. Это обрабатывается оператором switch который выполняется в начале файла.

 

{moscode} //Функция выводит вид по умолчанию - список сообщений. {/moscode}

Это заголовки всех колонок, включая мастер чекбокс, который управляет всей колонкой чекбоксов.

{moscode} {/moscode}

Начинаем цикл по массиву $rows, чтобы выбрать данные по каждому элементу массива.

{moscode} "> {/moscode}

Меняем название стиля строки в зависимости от тогд является эта строка четной или нечетной. Мы начинаем со строки номер 0 и меняем ее на 1, и наоборот, для того чтобы сделать таблицу удобной для чтения.

{moscode} {/moscode}

Показывает чекбокс и осуществляет наполнение данных об идентификаторе данного элемента. Каждый чекбокс id имеет значение cbX, где X это номер позиции элемента в списке. Имена определяются как массивы и значение устанавливается в id для того чтобы найти строку в базе данных.

{moscode} {/moscode}

Создает ссылки содержащие текст сообщения. Когда происходит щелчок мышью по тексту сообщения ссылка будет автоматически проверять в начале строки чекбокс и после этого Javascript отправляет форму со значением задачи (task) равным 'edit.'

{moscode} {/moscode}

Выводит дату сообщения, отформатированную в соответствии с форматом времени функцией mosFormatDate() которая декларирована в файле classes/mambo.php.

{moscode} {/moscode}

Этот код показывает иконки 'published' или 'unpublished', зависящий от статуса сообщения. Если иконка нажата, форма отправляется и статус меняется на противоположный.

{moscode} {/moscode}

Изменения переменных, которые описывают цвет строки. Еденица меняется на ноль, ноль на еденицу.

{moscode}

  Message Date Published
  message; ?> date); ?> published == "1") { echo ""; } else { echo ""; } ?>

Скрытые поля option, task, and boxchecked в конце формы. Как 'boxchecked' так и 'task' позже меняются Javascript. Boxchecked используется для того чтобы проверить что элементы списка перед тем как запущено задание.

 

{mospagebreak title= Описание файла dailymessage.class.php}

dailymessage.class.php

{moscode} {/moscode}

Проверяем что этот код вызвается из Joomla

{moscode} {/moscode}

Этот класс является расширением mosDBTable class, который предоставляет многие методы, облегчающие работу с записями в таблице данных. Первое, переменная идентична полю в базе данных. По такому пути созданы объекты joeDailyMessage, загруженные в объект желательные аргументы отсылаются в базу данных.

{moscode} mosDBTable('mos_joe_dailymessage', 'id', $db); } } ?> {/moscode}

Этот конструктор класса наследуется у объекта mosDBTable(), при этом имя таблицы можно задавать не жестко, а использовать префикс, который будет заменен на нужный [#_ shorthand для 'mos'] также желательно описать имя поля содержащее первичный ключ.

{moscode} mosDBTable('mos_joe_dailymessage_conf', 'configid', $db); } } ?> {/moscode}

Класс joeDailyMessageConf создается по такому же принципу как и класс joeDailyMessage, основан он на таблце mos_joe_dailymessage_conf и поле 'configid' будет использовано в качестве первичного ключа.

{mospagebreak title=Описание файла toolbar.dailymessage.php}

toolbar.dailymessage.php

Для всех компонентов, Joomla загружает панель инструментов для Бекенда. Создание этого кода довольно однообразное, поскольку весь функционал довольно четко описан. Код в этом файле зависит от значений переменных 'task' и 'act'.

{moscode} getPath( 'toolbar_html' ) ); ?> {/moscode}

Первым делом проверьте что файл запускается из Joomla (Mambo) toolbar.dailymessage.html.php, и включите файл, который обрабатывает вывод HTML для этого меню.

{moscode} {/moscode}

Замечание оба значения task - 'new' и 'edit' разделяют это меню. Это не вызывает конфликта потому что меню начинает запускать задачи функционально друг от друга не зависящие. Текущее значения `task` и 'act' описывают какой вид будет показан. Все меню вызваются через методы класса menuDailyMessage, который находится в файле toolbar.dailymessage.html.php.

{mospagebreak title=Описание файла toolbar.dailymessage.html.php}

toolbar.dailymessage.html.php

 

Этот файл описывает класс menuDailyMessage, который имеет три метода для трех различных видов.

{moscode} {/moscode}

Конечно проверяем что вызывается все из Joomla. {/moscode}

У большинства приведенных функций первый параметр это значение переменной 'task'. Для функции deleteList() первый аргумент необязательный он нужен для того чтобы показывать сообщения типа "вы действительно уверены в том что хотите удалить это". Второй аргумент это уже значение переменной 'task', и последний аргумент это надпись для показа при наведении на пункт меню мышью – установка свойства изображения 'alt'. Эта функция доступна для других кнопок. Функции startTable() и endTable() выводят начало и конец кода таблицы, для того чтобы Javascript мог нарисовать панель. Функция divider() рисует вертикальный разделитель для визуального разделения кнопок.

{moscode} {/moscode}

Функция back() просто показывает иконку 'cancel' icon с текстом 'back.' Когда нажимаешь на эту кнопку то возвращаешься к предыдущей странице. Функция spacer() рисует некоторое пустое пространство между иконками.

{moscode} {/moscode} {mospagebreak title=Описание файлов install.dailymessage.php/uninstall.dailymessage.php}

install.dailymessage.php/uninstall.dailymessage.php

Файлы install.dailymessage.php и uninstall.dailymessage.php предназначены для вывода дополнительных сообщений когда компонент инсталлируется и анинсталлируется. Компонент Daily Message не имеет каких либо дополнительных сообщений.

install.dailymessage.php: {moscode} {/moscode} uninstall.dailymessage.php: {moscode} {/moscode} {mospagebreak title=Описание файла dailymessage.xml}

dailymessage.xml

{moscode} {/moscode}

Этот тег описывает версию XML используемую в этом документе. Большинство XML файлов написаны в версии 1.0. Вы можете прочитать больше об XML на www.w3c.org.

{moscode} {/moscode}

Тег mosinstall говорит Joomla что за расширение будет установлено. Этот код инсталлируется как компонент, однако могут еще устанавливаться модули, шаблоны, мамботы.

{moscode} DailyMessage 06/03/2004 Joseph LeBlanc This component in released under the GNU/GPL License Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript www.jlleblanc.com 1.0 {/moscode}

Эти теги рассказывают об имени компонента, даты его создания, авторе, копирайтах, e-mail автора и его вебсайте, а также версии компонента. Эта информация в дальнейшем будет отображаться в Бекенде. Имя компонент используется для создания директории с именем com_[имя компонента]. Оно не должно содержать пробелов и служебных символов.

{moscode} dailymessage.php {/moscode}

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

{moscode} DROP TABLE IF EXISTS `# __joe_dailymessage`; CREATE TABLE `# __joe_dailymessage` ( `id` INT NOT NULL AUTO_INCREMENT, `message` TEXT NOT NULL, `date` DATETIME NOT NULL, `published` TINYINT(1) NOT NULL, PRIMARY KEY (`id`) ) DROP TABLE IF EXISTS `# __joe_dailymessage_conf`; CREATE TABLE `# __joe_dailymessage_conf` ( `bold` TINYINT(1) NOT NULL, `italic` TINYINT(1) NOT NULL, `underline` TINYINT(1) NOT NULL, `showdate` TINYINT(1) NOT NULL, `configid` TINYINT(4) NOT NULL ) INSERT INTO `# __joe_dailymessage_conf`(bold, italic, underline, showdate, configid) values(0, 0, 0 , 1, 1); {/moscode}

Инсталляционные запросы, которые устанавливают таблицы баз данных, для компонента открываются посредством тега , которые ограничиваются тегами . Префикс '#_' в запросах будет замещен в на префикс текущей базы данных Joomla [обычно 'jos']. Две таблицы созданы: одна для сообщений, а вторая для хранения информации о конфигурации. Также, первоначальные значения вставляются в конфигурационную таблицу.

{moscode} DROP TABLE IF EXISTS `# __joe_dailymessage`; DROP TABLE IF EXISTS `# __joe_dailymessage_conf`; {/moscode}

Подобные инсталляционным теги для анинсталляции - , ограничивают запросы, которые необходимы, для удаления таблиц созданных при установке компонента. Эти запросы будут исполненты только когда администратор удалит компонент.

{moscode} install.dailymessage.php uninstall.dailymessage.php {/moscode}

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

{moscode} Daily Message Edit Messages Configure {/moscode}

Тег содержит все что относится к зоне администрирования – Бекенду. Тег

содержит заголовок, который будет помещен в качестве элемента меню в главном меню в Бекенде под меню 'Components.' Тег содержит имена элементов меню, которые будут появлятся при выборе в главном меню в зоне администрирования 'Daily Message' под меню 'Components'. Свойство 'act' будет использовано для передачи информации Joomla о выбранном сабменю.

 

{moscode} admin.dailymessage.php admin.dailymessage.html.php dailymessage.class.php toolbar.dailymessage.php toolbar.dailymessage.html.php {/moscode}

Теги внутри тега описывают какие файлы будут скопированы в Бекенд - папку administration/com_dailymessage.

{moscode} {/moscode}