JHTML в Joomla. Списки Select
Базовый раскрывающийся список
Простой пример как с помощью этого класса в 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 );
Эта конструкция выведит следующее:
<select name="test" id="test">
<option value="1" disabled="disabled">первый</option>
<option value="2" >Second</option><option value="3" >Three</option>
</select>
Массив $state, который собственно и задает значения и имена для списка
- $value - задает value для тега <option> элемента;
- $text - текст который будет выводиться в этом элементе;
- $disable - редко используется на практике, устанавливает отключен ли элемент или включен;
В основном используется сокращенный вариант, как во втором и третем элементе массива.
Функция, которая собственно и генерирует список (select.genericlist)
- $state - массив с элементами списка;
- $name - имя списка (<select name="xxx">), так же подставляется в id тэга, если не установленна переменная $idtag;
- $attribs - атрибуты списка; Немного из html, что может пригодиться для атрибутов. disabled - Блокирует доступ и изменение элемента. multiple - Этот параметр позволяет одновременно выбирать сразу несколько элементов списка. size - Количество отображаемых строк списка.
- $key и $text лучше оставлять как и есть, т.е. 'value' и 'text';
- $selected - значение выбранного елемента по умолчанию;
- $idtag - значение id для списка;
- $translate - это переменная, которая позволяет переводить текст. Т.е. допустим если бы я описал первый элемент так $state[] = JHTML::_('select.option', $value = '1', $text= 'First'); и поставил бы $translate = true, то значение $text преобразовалось бы в JText::_( 'First' ).
Числовой список (integer)
echo JHTML::_('select.integerlist', $start, $end, $inc, $name, $attribs = null, $selected = null, $format = "");
- $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);
Выведит следующее:
<input type="radio" name="Radio" id="Radio1" value="1" />
<label for="Radio1">First</label>
<input type="radio" name="Radio" id="Radio2" value="2" />
<label for="Radio2">Second</label>
<input type="radio" name="Radio" id="Radio3" value="3" />
<label for="Radio3">Three</label>
Для обычных радио, состоящих из 2-х кнопочек лучше использовать
echo JHTML::_('select.booleanlist', $name , $attribs = null, $selected = null, $yes='yes', $no='no', $id=false);
Здесь стоит учесть, что $yes и $no сразу будуту попадать в JText.
Вывод списка пользователей
echo JHTML::_('list.users', $name, $active, $nouser = 0, $javascript = NULL, $order = 'name', $reg = 1);
В качестве значения (value) будет ID пользователя, в качестве имени будет имя пользователя (не логин).
- $active - здесь можно поставить id пользователя, который будет активным в списке по умолчанию. Либо ставить NULL, видимо по умолчанию забыли прописать;
- $nouser - булевая переменная. Устанавливает будет ли список с нулевым значением "- No User -";
- $javascript - здесь можно передать какое-нибудь событие для JS;
- $order - сортировка, по умолчанию по имени пользователя;
- $reg - булевая переменная. Устанавливает будует ли список только с пользователями, которые имеют доступ к админке (gid > 18), или списоок будет из всех пользователей. По умолчания включена;
Вывод списка категорий
echo JHTML::_('list.category', $name, $section, $active = NULL, $javascript = NULL, $order = 'ordering', $size = 1, $sel_cat = 1);
- $section - ID раздела или название компонента;
- $size - подставляется размер в тег <select size='1'>;
- $sel_cat - - булевая переменная. Устанавливает будет ли список с нулевым значением;
Вывод списка разделов
echo JHTML::_('list.section', $name, $active = NULL, $javascript = NULL, $order = 'ordering', $uncategorized = true, $scope = 'content');
- $uncategorized - показывать или нет "Без раздела";
- $scope - к какому компоненту относится раздел;
Вывод группы пользователей, уровень доступа
$row = new stdClass();
$row->access = null;
echo JHTML::_('list.accesslevel', $row);
Здесь в объекте $row->access ставим нужную группу пользователей (0- Public; 1-Registered; 2-Special), для элемента, который будет по умолчанию.
Вывод списка картинок из папки
echo JHTML::_('list.images', $name, $active = NULL, $javascript = NULL, $directory = NULL, $extensions = "bmp|gif|jpg|png");
- $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="/">
В этом примере если не выбирать картинку, то ничего в src выводиться не будет.
Вывод списка позиций
Как раз может пригодиться для картинок.
echo JHTML::_('list.positions', $name, $active = NULL, $javascript = NULL, $none = 1, $center = 1, $left = 1, $right = 1, $id = false)
Эта конструкция позволяет сразу вывести основные позиции (нет, по центру, слева, справа)
- $id - это ID элемента;
Пару полезных методов, для организации порядка показа
JHTML::_('list.genericordering', $sql, $chop = '30');
- $sql - это запрос в БД;
- $chop - автоматическое обрезание текста. (по умолчания обрезается если больше 30 символов);
Пример:
$sql = 'SELECT id AS value, username AS text'
. ' FROM #__users';
$state = JHTML::_('list.genericordering', $sql, $chop = '30');
echo JHTML::_('select.genericlist', $state, 'test');
Выведит список пользователей, начинающийся c 0-первый и заканчивающися на X-последний.
И еще одна конструкция, описывать ее я пока не буду. Это лучше показать на более глобальном примере, где она может пригодиться.
JHTML::_('list.specificordering', &$row, $id, $query, $neworder = 0);