JHTML в Joomla. Списки Select

08/04/2010 Документация Joomla 1.5

Продолжаю рассматривать класс 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 );

Эта конструкция выведит следующее:

<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);

28 

Комментарии   

 
0 Сергей
04.06.2010 18:31
Приветствую всех. Подскажите пожалуйста. а как в Joomla 1.5 испльзуя поиск пользователей сайта, отсортировавать по джумловским группам?

Например пользователь хочет найти кого то из администрации - Manager, Administrator или Publisher.
Ответить
 
 
0 ecolora
17.06.2010 12:43
Супер. Оказывается тут ЛикБез! Спасибо... буду почитывать.
Ответить
 
 
+1 Граммарнаци
30.11.2010 14:20
выведЕт!
Ответить
 
 
0 Денис
18.12.2010 20:39
Добрый день. Подскажите, пожалуйста, как по аналогии с выводом списка пользователей, вывести просто имя пользователя. А если не зарегистрированный, то имя Гость
Ответить
 
 
0 Сергей
06.01.2011 00:32
Добрый вечер, а скажите пожалуйста а как сделать что бы список категорий выводился тегом селект и что бы категории были disabled а подкатегории enabled, т.е. что бы можно было выбирать только категории, я так понимаю это связано с атрибутом parents в дб но че-то догнать не могу как это сделать
Ответить
 
 
0 Таня
13.01.2015 00:14
Здравствуйте, Вы нашли ответ на свой вопрос.
Ответить
 
 
0 .i.
09.03.2011 12:54
как сделать сортировку для дополнительных полей, чтоб на ровне с именем например фамилия выводилась (из дополнительного поля!)
Ответить
 
 
-2 .i.
09.03.2011 12:57
 

например вот надо заменить полем дополнительным это RS1_ADMIN_SCRN_CATEGORY_COL_HEAD
но как структуру прописать непойму
и вот эту id CategoryName тоже как вывести из дополнительного поля
Ответить
 
 
0 Ваня
10.09.2011 21:57
Сама статья мне не понятна честно. Фильтры в joomla делаются просто, но вот фильтр по категориям из своей таблицы вот эта проблема! Поиск и фильтр по публикации я сделал, а категории это гораздо труднее в понимании они вообще формируются в виде, данные тащутся не из модели, тоесть данные тянутся каким то не понятным образом. А хотелось бы сделать по категориям. И статей про фильтры я практически ненашёл, а те что есть они не совсем рабочие.
Ответить
 
 
0 SmokerMan
20.09.2011 00:35
Ваня
JHTML - это обычный класс, который может упростить работу с некоторыми элементами HTML.
Причем здесь фильтры то?
Ответить
 
 
0 Juliana Queiroz
07.12.2011 20:39
Olá!
Parabéns pelo tutorial, me ajudou muitoooo.
Ответить
 
 
0 Zack
16.05.2017 01:28
Hello my friend! I wish to say that this post is awesome, nice written and come with almost all vital infos.

I would like to see extra posts like this.

Here is my site; pain caused (abbieagurs.jimdo.com: http://abbieagurs.jimdo.com/2015/01/02/workouts-for-pes-planus)
Ответить
 
 
0 Jonnie
07.07.2017 04:58
Hi fellas! Who wants to see me live? I have profile at HotBabesCams.com, we can chat,
you can watch me live for free, my nickname is Anemonalove: https://3.bp.blogspot.com/-u5pGYuGNsSo/WVixiO8RBUI/AAAAAAAAAFA/JWa2LHHFI2AkHParQa3fwwHhVijolmq8QCLcBGAs/s1600/hottest%2Bwebcam%2Bgirl%2B-%2BAnemonalove.jpg , here is my pic:

https://3.bp.blogspot.com/-u5pGYuGNsSo/WVixiO8RBUI/AAAAAAAAAFA/JWa2LHHFI2AkHParQa3fwwHhVijolmq8QCLcBGAs/s1600/hottest%2Bwebcam%2Bgirl%2B-%2BAnemonalove.jpg
Ответить
 
 
0 Naomi
18.07.2017 09:44
Hi fellas! Who wants to chat with me? I'm live at HotBabesCams.com, we
can chat, you can watch me live for free,
my nickname is Anemonalove: https://3.bp.blogspot.com/-u5pGYuGNsSo/WVixiO8RBUI/AAAAAAAAAFA/JWa2LHHFI2AkHParQa3fwwHhVijolmq8QCLcBGAs/s1600/hottest%2Bwebcam%2Bgirl%2B-%2BAnemonalove.jpg , here is my pic:

https://3.bp.blogspot.com/-u5pGYuGNsSo/WVixiO8RBUI/AAAAAAAAAFA/JWa2LHHFI2AkHParQa3fwwHhVijolmq8QCLcBGAs/s1600/hottest%2Bwebcam%2Bgirl%2B-%2BAnemonalove.jpg
Ответить
 
 
0 Antje
17.11.2017 05:12
I have checked your page and i have found some duplicate content, that's why you
don't rank high in google's search results, but there is a tool that can help you to create 100% unique articles, search for; Boorfe's tips
unlimited content

My web site ... FreemanSmall: https://Keira055.blogspot.com
Ответить
 

Добавить комментарий


Защитный код
Обновить