Разрботка расширений для CMS Joomla
Шрифт:
где
$tooltip - текст подсказки; $title - название подсказки или ассоциативный массив с ключами title, image, text, href, alt и соответствующими значениями; $image - изображение, для которого будет выводиться подсказка (если не задано значение $text); $text - текст, для которого будет выводиться подсказка (если не задано значение $image); $href - URL, на который будет произведен переход по щелчку на изображение или текст; $alt - значение атрибута alt тега <img>; $class - название класса элемента <span>, в который будет заключен тег <img>.
Изображение
echo JHTML::tooltip('Текст подсказки', 'Заголовок подсказки', 'tooltip.png', '', 'http://www.mysite.ru');
Текст с подсказкой:
echo JHTML::tooltip('Текст подсказки', 'Заголовок подсказки', '', 'Наведите на этот текст курсор мыши, чтобы увидеть подсказку');
Поддерживающие классы
Рассмотрим некоторые методы поддерживающих классов. Полный список этих методов можно найти в документации, однако на текущий момент она не достаточно полная и содержит ошибки, поэтому для детальной справки по какому-либо методу вы можете обратиться напрямую к исходным кодам в папке /libraries/joomla/html/html.
JHTMLBehavior
Методы этого класса загружают код Javascript в заголовок документа. Методы JHTMLBehavior позволяют вывести календарь, дерево элементов, файловый загрузчик и некоторые другие элементы управления. Рассмотрим один из методов, позволяющий вывести всплывающее модальное окно без перезагрузки страницы:
void modal(string $selector = 'a.modal', array $params = array)
где
$selector - селектор класса; $params - массив параметров, ключи которого могут быть следующими: ajaxOptions, size, shadow, onOpen, onClose, onUpdate, onResize, onShow, onHide.
В следующем примере выводятся две ссылки. При нажатии на первую из них появляется всплывающее окно с изображением, на вторую - с веб-страницей.
<?php JHTML::_('behavior.modal'); ?> <a href="#" class="modal" rel="{size: {x: 100, y: 100}, handler:'iframe'}" >Щелкните, чтобы увидеть изображение</a><br/> <a href="#" class="modal" rel="{size: {x: 700, y: 500}, handler:'iframe'}" >Щелкните, чтобы открылось окно с веб-страницей</a>
Первое окно выглядит так, как на рис. 3.2.
(есть увеличенное изображение)
Рис. 3.2. Модальное окно
JHTMLEmail
Содержит один метод для скрытия адреса электронной почты в целях его защиты от спам-ботов:
string cloak(string $mail, bool $mailto=1, string $text='', bool $email=1)
где
$mail - e-mail; $mailto - выводить ли e-mail в виде ссылки <a href="#">…</a> или в виде текста; $text - текст этой ссылки; $email - является ли $text адресом электронной почты.
Пример:
echo JHtml::_('email.cloak', 'admin@mysite.ru', 1, 'Написать администратору', 0);
JHTMLForm
Содержит один метод, который возвращает код скрытого поля формы для уменьшения риска CSRF-атак: string token
Именем
получившегося элемента формы станет сгенерированная случайным образом строка, которая используется для проверки того, что запрос был сделан из конкретных формы и сессии.Для предотвращения CSRF-атак вставляйте в каждую форму своего компонента строку:
<?php echo JHTML::_('form.token');?>
JHTMLGrid
Методы данного класса используются для вывода в таблице в панели управления таких элементов, как чекбокс, пиктограмма для переключения состояния " опубликовано"/"не опубликовано", для отображения заголовка столбца как ссылки для сортировки по этому столбцу и др.
Таблица должна располагаться внутри формы под названием adminForm, обязательно включающей два скрытых поля: boxchecked со значением по умолчанию 0 и task.
Для создания чекбокса используется метод
mixed id(int $rowNum, int $recId, bool $checkedOut=false, string $name='cid')
где
$rowNum - номер строки в таблице; $recId - id записи; $checkedOut - отмечен ли элемент; $name - имя элемента формы.
Метод возвращает html-код чекбокса, если элемент не отмечен, и пустую строку в противном случае.
Для создания пиктограммы, по щелчку на которой можно изменять значение поля published с 0 на 1 и обратно, используется
string published(mixed $value, int $i, string $img1 = 'tick.png', string $img0 = 'publish_x.png', string $prefix='')
где
$value - объект или только значение поля published; $i - номер строки в таблице; $img1 - изображение при published = 1; $img0 - изображение при published = 0; $prefix - префикс, который будет добавлен к названиям по умолчанию задач publish/unpublish.
Для примера выведем элементы массива $rows как строки таблицы, добавив для каждой записи ячейки с чекбоксом и значком "опубликовано"/"не опубликовано":
$k = 0; for ($i = 0, $n = count($rows); $i < $n; $i ++) { $row = &$rows[$i]; ?> <tr class="<?="row$k"?>"> <td><?=JHTML::_('grid.id', $i, $row->id)?></td> <td><?=$row->name?></td> <td align="center"><?=JHTML::_('grid.published', $row, $i)?></td> </tr> <?php $k = 1 - $k; }
Пример результата приведен на рис. 3.3.
(есть увеличенное изображение)
Рис. 3.3. Чекбокс и пиктограмма "опубликовано/не опубликовано"
Обратите внимание, что методы класса JHTMLGrid лишь отображают какой-либо элемент, но не добавляют код для его обработки. В приведенном выше примере кнопки "опубликовано"/"не опубликовано"отображаются, но не работают. Чтобы это исправить, необходимо зарегистрировать задачи publish и unpublish (если вы не изменили их названия, задав какой-либо префикс) и написать функцию для их обработки, которая будет вызывать метод JTable::publish.
JHTMLImage