Печать

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);
Интересная статья? Поделись ей с другими: