Выбрать главу

Элемент <a></a>

string link(string $url, string $text, array $attribs = null)

где:

$text - текст ссылки; $attribs - ассоциативный массив атрибутов будущего тега.

Пример:

echo JHTML::_('link','index.php','На главную страницу', array('title'=>'На главную','id'=>'linktomainpage'));

Элемент <script></script>

mixed script(string $file, bool $framework = false, bool $relative = false, bool $path_only = false, bool $detect_browser = true)

где

$file - путь к файлу; $framework - загружать ли фреймворк Javascript; $path_only - возвращать путь к файлу или добавить все найденные файлы к текущему документу; $detect_browser - определять ли браузер пользователя для включения файлов Javascript для этого браузера.

При $path_only=false метод не возвращает никакого значения.

Пример:

echo JHTML::_('script', 'media/system/js/calendar.js', false, false, true, false);

Элемент <link rel="stylesheet" style="text/css"/>

mixed stylesheet(string $file, array $attribs = array(), bool $relative = false, bool $path_only = false, bool $detect_browser = true)

Все параметры аналогичны рассмотренным выше.

Пример:

echo JHTML::_('stylesheet', 'media/system/css/system.css', array("title"=>"Название стиля","media"=>"screen, print"), false, true, false);

Всплывающая подсказка

string tooltip(string $tooltip, mixed $title = '', string $image = 'tooltip.png', string $text = '', string $href = '', string $alt = 'Tooltip', string $class = 'hasTip')

где

$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="media/system/images/notice-info.png" class="modal" rel="{size: {x: 100, y: 100}, handler:'iframe'}" >Щелкните, чтобы увидеть изображение</a><br/> <a href="http://www.mysite.ru" 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="mailto:name@server.com">…</a> или в виде текста; $text - текст этой ссылки; $email - является ли $text адресом электронной почты.

Пример:

echo JHtmclass="underline" :_('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().