Как организовать работу с формами в Joomla
Создаем XML файл с описанием полей формы.
<?xml version="1.0" encoding="utf-8"?> <form> <fieldset name="metadogovor2"> <field name="adres" type="text" label="Адрес" description="Адрес" /> </fieldset> </form>
Загружаем форму с помощью следующего кода:
$form = JForm::getInstance('metadogovor2', JPATH_COMPONENT . '/models/forms/metadogovor.xml', array('control' => 'jform')); $form->bind(array('adres' => 1111)); echo $form->renderFieldset('metadogovor2');
Если поля сохраняются в одном поле в базе данных, к примеру, в поле metadata2 в формате json, то немного поменяем XML файл:
<?xml version="1.0" encoding="utf-8"?> <form> <fields name="metadata2" label="Данные по договору"> <fieldset name="metadogovor2"> <field name="adres" type="text" label="Адрес" description="Адрес" /> </fieldset> </fields> </form>
Теперь код для формы будет такой:
$form = JForm::getInstance('metadogovor2', JPATH_COMPONENT . '/models/forms/metadogovor.xml', array('control' => 'jform')); $form->bind(array('metadata2' => array('adres' => 1111))); echo $form->renderFieldset('metadogovor2');
в форму будет добавлено такое поле:
<input type="text" name="jform[metadata2][adres]" id="jform_metadata2_adres" value="1111">
При загрузе данных из базы данных в моделе конвертируем данные из json формата в массив следующим образом:
public function getItem($pk = null) { if ($item = parent::getItem($pk)) { $registry = new JRegistry; $registry->loadString($item->metadata2); $item->metadata2 = $registry->toArray(); } return $item; }
А при сохранении данных в базу конвертируем массив в json формат в файле таблицы:
if (isset($array['metadata']) && is_array($array['metadata'])) { $registry = new JRegistry; $registry->loadArray($array['metadata']); $array['metadata'] = (string)$registry; }