Как организовать работу с формами в 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;
}

 

Чтобы сделать комментарий, нужно авторизоваться на сайте!