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

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

<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;</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">
    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="/"></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">

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

http://www.joomla-code.ru



JHTML в Joomla. Списки Select - Генератор расширений Joomla и многое другое на нашем сайте посвященном работе расширений, компонентов, модулей, плагинов для линейки Joomla. Отправляйте ссылку на страницу своим друзьям и в социальные сети воспользовавшись графическими иконками выше.

Блог

Календарь приёма объявлений

Небольшой пример из повседневной практики. Организация меняет реквизиты, и они вступят в силу через  пару недель. На сайте идет приём объявлений и объявления принимаются на несколько месяцев в...

Дырка в com_content

Сегодня у товарища, сайт которого находится на старой  Joomla 1.0.3, была сильная нагрузка на сервере, просматривая логи обнаружил не вежливый запрос такого порядка: http://сайт/index2...

Лечим вирус на сайте

  Первоначальный осмотр сайта обнаружил, что у клиента закрыт доступ по фтп, что сузило круг подозреваемых уязвимостей, стало быть отверстие в какомто скрипте движка joomla. Касперский яро...

Troj/JSRedir-MH

Снова грянул гром зарежения сайтов новым вирусом  Troj/JSRedir-MH.  И так в коротко по вирусу Troj/JSRedir-MH. Вирус или троян куда интереснее чем свои предшествиники, тепер...

Доработка расширения для рассылки Send Email JK

Сегодня поделюсь немного интересной информацией для владельцев сайтов собранных ан joomla.  Рано и поздно возникает задача подписки и рассылки информации с сайта, это может быть разная постановка зада...

Привет Ie 10 регулярка

И вот и мне пришлось столкнулся с проблемами перехода на win 8 в придачу с ie 10, некоторых постоянных пользователей моих сайтов. На многих сайтах  имеющих раздел по приёму объявлений, использ...

Kunena заменяем ссылку на профиль пользователя

Всем привет, снова снова кунена, получил задание на допиливание популярного форума Kunena, сегодня потребовалось поменять ссылку на профиль пользователя. Это связано с тем, что на сайте стоит социа...

Работает на Kunena - зачем на каждой странице?

  Все у кого стоит форум kunena мешает надпись с двумя ссылкам внизу форума "Работает на Kunena". Сея надпись висит на каждой странице форма, а также страница разработчиков содержит множество вн...

Kunena избавимся от лишних quote

Для тех кто действительно делает сайт для людей, моя следующая заметка. Расскажу вам, как избавиться от лишних quote в постах на форуме kunena. У меня несколько тематических сайтов с нормальной посеща...

Kunena решаем проблему с пропажей аватаров

Так и вот мы обновись до последней версии кунены, сразу видно компонент внутри сильно изменился, и вот незадача у некоторых пользователей пропали аватары, физически они есть но неотображаются. ...

Джомлавикам

Обработка параметров расширений joomla

При разработке расширений для CMS Joomla, таких как плагины, модули, компоненты или шаблоны, часто возникает необходимость получить параметры разрабатываемого или любого другого расширения. В этой ...

Кunena крамсаем шаблон

1. В папке \components\com_kunena\template\ваш_шаблон\ находим файл template.xml и вставляем в него такой кусок (чтобы была возможность выбора показывать это поле или нет): <param name="l...

Подключить свои классы и методы в Joomla?

Иногда случается, что набор собственных функций или библиотек нужно подключить в Joomla. Но иногда подключить их нужно так, чтобы они присутсвовали во всей системе, вне зависимо...

3 новых полезных класса в Joomla 2.5

В платформе Joomla 11.3 разработчики добавлил несколько полезных новых классов для разработчиков. Рассмотрю некоторый из них - JGrid (для построения HTML таблиц), JWebClient (для получения информац...

Репозиторий файлов на Joomla средствами Apache

Создадим две вложенные директории /files/files в корне сайта. Если вы пожелаете использовать другие имена директорий, то вам необходимо будет внести соответствующие правки в дальнейшем. ...