0 Пользователей и 1 Гость просматривают эту тему.
  • 9 Ответов
  • 17147 Просмотров
*

Виталик

  • Завсегдатай
  • 1244
  • 130 / 0
Пример создания выпадающего списка (<SELECT>) с использованием класса JHTML

Данные для списка будем брать из базы данных.


     
// Получаем объект базы данных
     
$database =& JFactory::getDBO();
     
// Формируем запрос
     
$query "SELECT c.id AS value, c.title AS text FROM #__categories AS c WHERE c.section='com_qcontacts_details'";
     
// Выполняем запрос
     
$database->setQuery($query);
     
// Получаем массив объектов
     
$categorylist $database->loadObjectList();
     
// Создаём первый элемент выпадающего списка (<option value="0">Выберите категорию</option>)
     
$categories[] = JHTML::_('select.option',  '0'"Выберите категорию"'value''text' );
     
// Добавляем массив данных из базы данных
     
$categories array_merge$categories$categorylist);
     
// Получаем выпадающий список
     
$list JHTML::_(
                         
'select.genericlist' /* тип элемента формы */,
                         
$categories /* массив, каждый элемент которого содержит value и текст */
                         
'cid' /* id и name select`a формы */,
                         
'class="inputbox" size="1"' /* другие атрибуты элемента select */
                         
'value' /* название поля в массиве объектов содержащего ключ */,
                         
'text' /* название поля в массиве объектов содержащего значение */,
                         
/* value элемента, который должен быть выбран (selected) по умолчанию */
                      
);
« Последнее редактирование: 31.07.2009, 06:49:46 от Виталик »
*

beliyadm

  • Легенда
  • 9659
  • 1659 / 66
  • Севастополь == Россия
Виталик - замечательно, а сможешь описать создания не только SELECt, но и RADIO, multiply select и прочих опций форм с комментариями к каждой строке\переменной\массиву - цены не будет мануалу!
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

userxp

  • Живу я здесь
  • 2019
  • 403 / 6
  • Злой и ужасный бармалей
последний параметр списка не расписан.
значение по-молчанию, не 0, а NULL(!) ибо этот параметр может быть как числом/текстом, так и массивом совпадающих значений value
Как правильно задавать вопрос службе технической поддержки  yes!
SGA CM 7.2.0 RC0 KANG Build GWK74 + s95allinonescript + CWM 5.0.2.6 + Modem XWKT3
*

smart

  • Администратор
  • 6485
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
значение по-молчанию, не 0, а NULL(!) ибо этот параметр может быть как числом/текстом, так и массивом совпадающих значений value
Леш, это просто не очень однозначно написано, там имело в виду не то, что это значение по умолчанию у метода, а то, что это то значение, которое по умолчанию будет выбрано в списке.

p.s. Виталик, вообще респект, плюс я тебе вчера уже выдал. Если сделаешь для остальных элементов, как предложил Петр, я готов выдать еще дополнительные плюсы за каждый элемент :)
*

Mitrich

  • Захожу иногда
  • 289
  • 524 / 13
  • Все можно. Но сначала учиться, учиться и учиться.
« Последнее редактирование: 20.05.2009, 23:21:27 от smart »
*

vmir

  • Осваиваюсь на форуме
  • 17
  • 4 / 0
На сколько мне известно в Joomla есть всякие примочечки в плане расширений класса JHTML. Но вот чего там точно нет, так это CheckBoxа. И раз уж пошла такая маза предлагаю сообществу заценить мою разработку  ^-^

       
Код
function getCheckBox($arr, $name, $attribs = '', $key = 'value', $value = 'text', $selected = null, $separator = ',')
{
if(is_null($arr)) return '';

reset( $arr );
$html = '<div style="padding: 10px 0 10px 0;">';

$id = $name;
$name .= "[]";

$useSel = (!is_null($selected));
if($useSel)
{
if(is_array($selected)) $useSel = count($selected);
else
{
$selected = trim($selected);
$useSel = strlen($selected);
if($useSel)
{
if(strpos($separator, $separator) !== false) $selected = explode($separator, $selected);
else $selected = array($selected);
}
}
}

for ($i=0, $n=count($arr); $i < $n; $i++ )
{
$k = $arr[$i]->$key;
$v = $arr[$i]->$value;
$_id = $id.$i;
$checked = ($useSel && in_array($k, $selected)) ? 'checked' : '';
$html .= '<span '.$attribs.'>';
$html .= '<input type="checkbox" '.$attribs.' name="'.$name.'" id="'.$_id.'" value="'.$k.'" '.$checked.' />'.$v;
$html .= '</span>';
}
return $html.'</div>';
}

Эту функицю я использую в классе helper своего компонента и вызываю ее при необходимости для разных видов.
Краткое описание параметров:
1) $arr - массив объектов с данными на основе которых строится чекбокс (получается как правило при запросе к БД с помощью метода $db->loadObjectList())
2) $name - имя чекбокса в html-коде <input type="checkbox" name="'.$name.'">
3) $attribs - атрибуты элемента <input type="checkbox">
4) $key - название ключа для объекта из массива $arr
5) $value - название значения для объекта из массива $arr
6) $selected - это либо массив, либо строка значений (которые разделены с помощью $separator), или одно значение, которые(ое) в чекбоксе будет отмеченно галкой при отображении элемента на сранице
7) $separator - это разделитель для строки $selected в случае, когда она содержит множество значений
*

Mitrich

  • Захожу иногда
  • 289
  • 524 / 13
  • Все можно. Но сначала учиться, учиться и учиться.
$selected я бы передавал как string или как array

и проверял бы на is_array и не вводил бы лишний гемор в виде сепаратора
*

beliyadm

  • Легенда
  • 9659
  • 1659 / 66
  • Севастополь == Россия
интересно по выпадающему списку - как передать одному из option параметр disable при генерации массива вручную либо же из базы?
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

userxp

  • Живу я здесь
  • 2019
  • 403 / 6
  • Злой и ужасный бармалей
пример:
Код: php
$a = 'abcde';
$arr = array(
JHTML::_('select.option',  '0', JText::_( $a[0] ) ),
JHTML::_('select.option',  '1', JText::_( $a[1] ) ),
JHTML::_('select.option',  '2', JText::_( $a[2] ), 'value', 'text', true ), // <-- set true to disable
JHTML::_('select.option',  '3', JText::_( $a[3] ) ),
JHTML::_('select.option',  '4', JText::_( $a[4] ) )
);
$name = 'checklist';
$attribs = '';
$selected = 3;
$id = 'checklistid';
echo JHTML::_('select.genericlist',  $arr, $name, $attribs, 'value', 'text', (int) $selected, $id );
Как правильно задавать вопрос службе технической поддержки  yes!
SGA CM 7.2.0 RC0 KANG Build GWK74 + s95allinonescript + CWM 5.0.2.6 + Modem XWKT3
*

beliyadm

  • Легенда
  • 9659
  • 1659 / 66
  • Севастополь == Россия
Дополнение данной темы для движка 1.0.хх
Встроенной работы с параметром disabled нет. Потому открываем includes/joomla.php, находим функцию function selectList
и после
Код: php
} else {
$extra .= ($k == $selected ? " selected=\"selected\"" : '');
}
дописываем
Код: php
//Add disabled params
$extra2 = '';
$extra2 .= $id ? " id=\"" . $arr[$i]->id . "\"" : '';
if (is_array( $disabled )) {
foreach ($disabled as $obj2) {
$k3 = $obj2->$key;
if ($k == $k3) {
$extra2 .= " disabled=\"disabled\"";
break;
}
}
} else {
$extra2 .= ($k == $disabled ? " disabled=\"disabled\"" : '');
}
//
Далее вместо
Код: php
$html .= "\n\t<option value=\"".$k."\"$extra>" . $t . "</option>";
Пишем
Код: php
$html .= "\n\t<option value=\"".$k."\"$extra.$extra2>" . $t . "</option>";
Далее в нашем скрипте для элемента массива дописываем параметр
Код: php
$arr1[] = mosHTML::makeOption( '2', '22222', disabled );
и добавляем параметр $disabled в mosHTML::selectList
« Последнее редактирование: 20.06.2009, 18:09:24 от beliyadm »
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Валидация форм средствами Joomla

Автор VETERINAR

Ответов: 29
Просмотров: 36266
Последний ответ 09.10.2013, 15:14:44
от digitalheart
Как написать системный плагин для Joomla 1.5

Автор Sergey2

Ответов: 2
Просмотров: 27423
Последний ответ 23.06.2013, 15:28:38
от l-key
[how to] Красота JHTML, или создание элементов формы с

Автор Professor

Ответов: 11
Просмотров: 22244
Последний ответ 27.12.2012, 18:14:38
от BaR
Плагин рейтинга чего угодно для Joomla 1.5

Автор Obmor

Ответов: 54
Просмотров: 29268
Последний ответ 18.12.2012, 15:01:55
от Raimonds
Как вы "въехали" в создание расширений?

Автор aanvale

Ответов: 4
Просмотров: 1994
Последний ответ 13.10.2012, 21:44:25
от passer