Для собственного компонента создаю собстенное поле формы. На выходе должно получиться поле SELECT и один из OPTION должен иметь атрибут SELECTED.
Что я делаю:
1) создаю класс, расширяемый от JFormFieldList
2) переопределяю метод getOptions(), в нем получаю выборку из БД
3) там же проганяю выборку в цыкле чтоб сформировать нужный массив
4) при формировании массива добавляю для нужного элемента $options[$i]->selected = true, т.е. OPTION с этим элементом получит атрибут SELECTED
5) отрабатываю родительский функционал
В результате нужный мне OPTION поля SELECT получается без SELECTED. Почему-то $options[$i]->selected = true не дает нужный результат, хотя $options[$i]->disable = true добавляет атрибут DISABLED вполне нормально.
Код приложил ниже.
<?php
defined('_JEXEC') or die('Restricted access');
// подключаем функционал класса JFormFieldList
JFormHelper::loadFieldClass('list');
// JFormFieldSectionparent - клас поля sectionparent XML-формы. Этот класс должен наследовать JFormFieldList
class JFormFieldSectionparent extends JFormFieldList {
// объявляем название пользовательского типа поля
protected $type='sectionparent';
// getOptions() - метод род. класса должен возвращать массив для элементов <option> для поля <select>
protected function getOptions() {
// массив для элементов <option>
$options = array();
// получаем объект подключения к БД
$db = JFactory::getDbo();
// формируем запрос
$query = $db->getQuery(true);
$query->select('s.id as value, s.title AS text, s.level');
$query->from('#__zagotovka_sections AS s');
$query->order('lft ASC');
// назначаем запрос в качестве текущего
$db->setQuery($query);
// пробуем выполнить запрос
try
{
// выполняем запрос. Получаем массив объектов с данными
$options = $db->loadObjectList();
}
// если не удалось выполнить запрос
catch(RuntimeException $e)
{
// выводим ошибку ($e->getMessage())
JFactory::getApplication()->enqueueMessage($e->getMessage(),'error');
return false;
}
// получаем id текущего редактируемого элемента
$app = JFactory::getApplication();
$jinput = $app->input;
$currentId = $jinput->get('id', 0);
/*
// если создается новый элемент, и в фильтре был выбран родитель
if ($currentId == 0)
{
$filterParent = $session->get('registry.data.com_zagotovka.elements.filter.catid', NULL);
}
*/
// формируем массив с элементами для <option>
if($options)
{
for($i = 0;$i < count($options);$i++)
{
// какое-то условие, при котором элемент формы должен получить атрибут SELECTED
if ($i == 7)
{
$options[$i]->selected = true;
}
// обозначаем главного родителя
if ($options[$i]->level == 0)
{
$options[$i]->text = JText::_('JGLOBAL_ROOT_PARENT');
}
// отменяем возможность выбрать родителем самого себя
if ($options[$i]->value == $currentId)
{
$options[$i]->disable = true;
}
// добавляем отступы для отображения в виде дерева
$options[$i]->text = str_repeat('- ', $options[$i]->level). $options[$i]->text;
}
}
return array_merge(parent::getOptions(), $options);
}
}