Разрботка расширений для CMS Joomla
Шрифт:
Параметры $icon и $iconOver задают, как ни странно, не название файла изображения, а название класса CSS, для которого задано это изображение в качестве фонового. К названию класса автоматически добавится строка "icon-32-" и будет произведен поиск этого класса в подключенных файлах CSS. Например, если третий параметр функции JToolBarHelper::custom задан как send.png, то будет найден класс .icon-32-send, а в результате картинка будет отображена с помощью кода:
<span class="icon-32-send"></span>
Если данная панель инструментов создана для одной-единственной записи, а не для списка, то параметру $listSelect следует задавать
if (document.adminForm.boxchecked.value==0) { alert('Пожалуйста, выберите объект из списка'); } else { Joomla.submitbutton('myquestions_sendToExpert') }
Если же $listSelect имеет значение false, то проверка того, выбраны ли в списке какие-либо элементы, не осуществляется:
Joomla.submitbutton('myquestions_sendToExpert')
Для вывода названия панели инструментов и пиктограммы служит метод void title(string $title, string $icon), где:
$title - название панели инструментов; $icon - название класса CSS, для которого необходимое изображение задано в качестве фонового. К названию класса автоматически добавится строка "icon-48-".
Например, если вы хотите использовать в качестве пиктограммы файл /media/com_mycomponent/images/sample-48.png, то добавьте в CSS класс
.icon-48-sample { background: url('../images/sample-48.png') 0 0 no-repeat; }
Теперь для отображения названия необходимо добавить в код строку:
JToolBarHelper::title('Мой компонент','sample');
Для вывода между кнопками вертикальной черты-разделителя служит метод divider:
void divider;
Практика
Описание учебного примера
Для примера будем создавать компонент системы "вопрос - ответ". Назовем его myquestions. С помощью этого компонента посетители сайта смогут задавать свои вопросы, по желанию помечая их как предназначенные для публикации на сайте или как скрытые. Функциональность, доступная администратору системы:
отправить уведомление о вопросе эксперту по электронной почте;
задать дату снятия вопроса с публикации;
скрыть от посетителей сайта отдельные поля вопроса;
присвоить вопросу категорию;
редактировать список категорий;
ответить на вопрос;
отправить ответ автору вопроса по электронной почте;
удалить вопрос.
Уведомление о каждом присланном вопросе автоматически отправляется модератору по электронной почте. Модератор либо пересылает вопрос эксперту, либо удаляет (например, в случае спама), а также присваивает вопросу какую-либо категорию. Если посетитель пометил свой вопрос как скрытый, но по каким-то причинам его необходимо опубликовать (например, указан некорректный e-mail и отправить ответ невозможно), то модератор задает дату снятия вопроса с публикации. Таким образом, отображаться на сайте будут вопросы, удовлетворяющие следующим условиям:
есть ответ;
либо вопрос не помечен как скрытый, либо дата снятия вопроса с публикации указана и больше текущей даты
Для каждого вопроса будем хранить следующие данные:
id;
имя автора;
дата вопроса;
собственно текст вопроса;
город;
e-mail автора;
IP автора;
id категории;
отображать ли вопрос на сайте;
дата снятия вопроса с публикации;
отправлен ли вопрос эксперту;
ответ
на вопрос;отправлен ли ответ автору вопроса.
Регистрация компонента в базе данных
Зарегистрируем наш компонент в базе данных, добавив запись в таблицу, содержащую данные о расширениях. Перейдите в phpMyAdmin(если вы работаете с Denwer, то для этого вам нужно ввести в адресной строке браузера ссылка: http://localhost/tools/phpmyadmin), зайдите в базу данных, в которую вы установили Joomla, и откройте вкладку " SQL" (рис. 1.3).
(есть увеличенное изображение)
Рис. 1.3. Выполнение SQL-запроса
Теперь введите следующий SQL-запрос. Предполагается, что префикс таблиц вашей базы данных - "jos_". Если вы указали при установке Joomla другой префикс, замените "jos_" на него.
INSERT INTO `jos_extensions`(`name`, `type`, `element`, `folder`, `client_id`, `manifest_cache`, `params`, `custom_data`, `system_data`) VALUES('myquestions', 'component', 'com_myquestions', '', 1, '{"legacy":false, "name":"Моя система «вопрос – ответ»", "type":"component", "creationDate":"2012", "author":"me", "copyright":"(с) me", "authorEmail":"mymail@example.ru", "authorUrl":"http:\\/\\/www.example.ru", "version":"1.0", "description":"Мой первый компонент для Joomla", "group":""}', '{}', '', '');
Как видите, мы задали название расширения - "myquestions", тип расширения - компонент и некоторую информацию о нем и его авторе.
Первые папки и файлы. Добавление пунктов меню
Создайте две папки под названием com_myquestions:
в папке /components;
в папке /administrator/components.
Создайте файл /components/com_myquestions/myquestions.phpследующего содержания:
<?php defined('_JEXEC') or die('Restricted access'); echo 'Моя система «вопрос – ответ»'; ?>
Как видите, пока наш компонент просто будет выводить надпись "Моя система "вопрос - ответ"".
Не забудьте, что Joomla работает в кодировке UTF-8 и, следовательно, ваши PHP-файлы должны быть в той же кодировке. Например, в популярном текстовом редакторе Notepad++ кодировка изменяется с помощью пункта меню " Кодировка", из подпунктов которого нужно выбрать " Преобразовать в UTF-8 без BOM".
Теперь сохраните файл и обновите страницу ссылка: http://localhost/joomla/index.php?option=com_myquestionsв браузере. Страница примет следующий вид (рис. 1.4).
(есть увеличенное изображение)
Рис. 1.4. Первый результат во фронтенде
Создайте файл /administrator/components/com_myquestions/admin.myquestions.php:
<?php defined('_JEXEC') or die('Restricted access'); echo 'Моя система «вопрос – ответ»'; ?>
Наберите в адресной строке браузера строку ссылка: http://localhost/joomla/administrator/index.php?option=com_myquestions. Результат должен выглядеть так, как на рис. 1.5.