JHTML в Joomla. Списки Select
Продолжаю рассматривать класс JHTML в Joomla. В этой статейке рассмотрю методы, которые работают с раскрывающимися списками, в народе это тэг <select> и все что ему сопутствует.
Эти списки используются довольно часто при построении различных форм, Joomla немного упростит в этом задачу.
Базовый раскрывающийся список
Простой пример как с помощью этого класса в Joomlа можно создавать списки.
$state[] = JHTML::_('select.option', $value = '1', $text= JText::_( 'First' ), 'value', 'text', $disable=true );
$state[] = JHTML::_('select.option','2', JText::_( 'Second' ) );
$state[] = JHTML::_('select.option','3', JText::_( 'Three' ) );
echo JHTML::_('select.genericlist', $state, $name = 'test', $attribs = null, $key = 'value', $text = 'text', $selected = NULL, $idtag = false, $translate = false );
Эта конструкция выведит следующее:
Массив $state, который собственно и задает значения и имена для списка
- $value - задает value для тега <option> элемента;
- $text - текст который будет выводиться в этом элементе;
- $disable - редко используется на практике, устанавливает отключен ли элемент или включен;
В основном используется сокращенный вариант, как во втором и третем элементе массива.
Функция, которая собственно и генерирует список (select.genericlist)
- $state - массив с элементами списка;
- $name - имя списка (<select name="xxx">), так же подставляется в id тэга, если не установленна переменная $idtag;</li> <li>$attribs - атрибуты списка; Немного из html, что может пригодиться для атрибутов. disabled - Блокирует доступ и изменение элемента. multiple - Этот параметр позволяет одновременно выбирать сразу несколько элементов списка. size - Количество отображаемых строк списка.</li> <li>$key и $text лучше оставлять как и есть, т.е. 'value' и 'text';</li> <li>$selected - значение выбранного елемента по умолчанию;</li> <li>$idtag - значение id для списка;</li> <li>$translate - это переменная, которая позволяет переводить текст. Т.е. допустим если бы я описал первый элемент так $state[] = JHTML::_('select.option', $value = '1', $text= 'First'); и поставил бы $translate = true, то значение $text преобразовалось бы в JText::_( 'First' ).</li> </ul> <h3>Числовой список (integer)</h3> <div class="rj_insertcode"> <div class="rj_insertcode_php">
- $start - указываем начало отсчета;
- $end - указываем конец отсчета;
- $inc - шаг, с которым будут перебираться числа;
- $format - формат выводимого числа (sprintf( "$format", $i ));
Список из радио кнопок
$state[] = JHTML::_('select.option', '1', 'First');
$state[] = JHTML::_('select.option', '2', 'Second');
$state[] = JHTML::_('select.option', '3', 'Three');
echo JHTML::_('select.radiolist', $state, $name='Radio', $attribs = null, $key = 'value', $text = 'text', $selected = null, $idtag = false, $translate = false);
Выведит следующее:
Для обычных радио, состоящих из 2-х кнопочек лучше использовать
Здесь стоит учесть, что $yes и $no сразу будуту попадать в JText.
Вывод списка пользователей
В качестве значения (value) будет ID пользователя, в качестве имени будет имя пользователя (не логин).
- $active - здесь можно поставить id пользователя, который будет активным в списке по умолчанию. Либо ставить NULL, видимо по умолчанию забыли прописать;
- $nouser - булевая переменная. Устанавливает будет ли список с нулевым значением "- No User -";
- $javascript - здесь можно передать какое-нибудь событие для JS;
- $order - сортировка, по умолчанию по имени пользователя;
- $reg - булевая переменная. Устанавливает будует ли список только с пользователями, которые имеют доступ к админке (gid > 18), или списоок будет из всех пользователей. По умолчания включена;
Вывод списка категорий
- $section - ID раздела или название компонента;
- $size - подставляется размер в тег <select size='1'>;
- $sel_cat - - булевая переменная. Устанавливает будет ли список с нулевым значением;
Вывод списка разделов
- $uncategorized - показывать или нет "Без раздела";
- $scope - к какому компоненту относится раздел;
Вывод группы пользователей, уровень доступа
Здесь в объекте $row->access ставим нужную группу пользователей (0- Public; 1-Registered; 2-Special), для элемента, который будет по умолчанию.
Вывод списка картинок из папки
- $javascript - скрипт для элемента, по умолчанию (NULL) будет подключаться скрипт - "onchange=\"javascript:if (document.forms.adminForm." . $name . ".options[selectedIndex].value!='') {document.imagelib.src='$directory' + document.forms.adminForm." . $name . ".options[selectedIndex].value} else {document.imagelib.src='../images/blank.png'}\"";
- $directory - указываваем папку, которой лежат картинки. По умолчанию (/images/stories/);
Стандартный скрипт позволяет делать превью картинок, но честно говоря, не совсем подходит под определенные нужды. Неиного по другому:
<?php
$directory = 'images/';
$javascript = "onchange=\"javascript:if (this.value!='') {document.imagelib.src='$directory' + this.value} else {document.imagelib.src=''}\"";
echo JHTML::_('list.images', 'image', $active = NULL, $javascript, $directory, $extensions = "bmp|gif|jpg|png");
?>
<img alt="Просмотр" name="imagelib" src="/"></span></pre><br /></div><br /></div><br /></div><br /><p>В этом примере если не выбирать картинку, то ничего в src выводиться не будет.</p><br /><h3>Вывод списка позиций</h3><br /><p>Как раз может пригодиться для картинок.</p><br /><div class="rj_insertcode"><br /><div class="rj_insertcode_php">
Эта конструкция позволяет сразу вывести основные позиции (нет, по центру, слева, справа)
- $id - это ID элемента;
Пару полезных методов, для организации порядка показа
JHTML::_('list.genericordering', $sql, $chop = '30');
- $sql - это запрос в БД;
- $chop - автоматическое обрезание текста. (по умолчания обрезается если больше 30 символов);
Пример:
Выведит список пользователей, начинающийся c 0-первый и заканчивающися на X-последний.
И еще одна конструкция, описывать ее я пока не буду. Это лучше показать на более глобальном примере, где она может пригодиться.
JHTML::_('list.specificordering', &$row, $id, $query, $neworder = 0);
http://www.joomla-code.ru