Здравствуйте!
Не могу передать параметры в форму для редактирования в компоненте.
Из списка выведенных записей по ссылке (активное поле в записи) JRoute::_('index.php?option=com_order&task=order.edit&id=' . (int) $item->id) переход в форму для редактирования
Представление:views\order\view.html.php:<?php
// Запрет прямого доступа.
defined('_JEXEC') or die;
// Подключаем библиотеку представления Joomla.
jimport('joomla.application.component.view');
/**
* HTML представление редактирования сообщения.
*/
class OrderViewOrder extends JViewLegacy
{
/**
* Сообщение.
*
* @var object
*/
protected $item;
/**
* Объект формы.
*
* @var object
*/
protected $form;
/**
* JavaScript файл валидации формы.
*
* @var string
*/
protected $script;
/**
* Доступы пользователя.
*
* @var object
*/
protected $canDo;
/**
* Отображает представление.
*
* @param string $tpl Имя файла шаблона.
*
* @return void
*
* @throws Exception
*/
public function display($tpl = null)
{
try
{
// Получаем данные из модели.
$this->form = $this->get('Form');
$this->item = $this->get('Item');
$this->script = $this->get('Script');
// Получаем доступы пользователя.
//$this->canDo = OrderHelper::getActions($this->item->catid, $this->item->id);
// Устанавливаем панель инструментов.
//$this->addToolBar();
// Отображаем представление.
parent::display($tpl);
// Устанавливаем документ.
$this->setDocument();
}
catch (Exception $e)
{
throw new Exception($e->getMessage());
}
}
/**
* Метод для установки свойств документа.
*
* @return void
*/
protected function setDocument()
{
$document = JFactory::getDocument();
$document->addScript(JURI::root(). $this->script);
}
}
views/order/tmpl/edit.php<?php
// Запрет прямого доступа.
defined('_JEXEC') or die;
// Загружаем тултипы.
JHtml::_('bootstrap.tooltip');
// Загружаем проверку формы.
JHtml::_('behavior.formvalidation');
// Загружаем украшательства формы.
JHtml::_('formbehavior.chosen', 'select');
// Получаем параметры из формы.
$params = $this->form->getFieldsets('params');
?>
<script type="text/javascript">
Joomla.submitbutton = function(task) {
if (task == 'order.cancel' || document.formvalidator.isValid(document.id('order-form'))) {
Joomla.submitform(task, document.getElementById('order-form'));
}
}
</script>
<form action="<?php echo JRoute::_('index.php?option=com_order&layout=edit&id='.(int)$this->item->id); ?>" method="post" name="adminForm" id="order-form" class="form-validate">
<div class="row-fluid">
<div class="span12 form-horizontal">
<ul class="nav nav-tabs">
<li class="active"><a href="#general" data-toggle="tab"><?php echo JText::_('COM_ORDER_ORDER_DETAILS');?></a></li>
<?php foreach ($params as $name => $fieldset): ?>
<li><a href="#params-<?php echo $name;?>" data-toggle="tab"><?php echo JText::_($fieldset->label);?></a></li>
<?php endforeach; ?>
<?php if ($this->canDo->get('core.admin')): ?>
<li><a href="#permissions" data-toggle="tab"><?php echo JText::_('COM_ORDER_FIELDSET_RULES');?></a></li>
<?php endif ?>
</ul>
<div class="tab-content">
<div class="tab-pane active" id="general">
<fieldset class="adminform">
<div class="row-fluid">
<?php foreach ($this->form->getFieldset('details') as $field): ?>
<div class="control-group form-inline">
<div class="control-label">
<?php echo $field->label; ?>
</div>
<div class="controls">
<?php echo $field->input; ?>
</div>
</div>
<?php endforeach; ?>
</div>
</fieldset>
</div>
<?php foreach ($params as $name => $fieldset): ?>
<div class="tab-pane" id="params-<?php echo $name;?>">
<?php if (isset($fieldset->description) && trim($fieldset->description)): ?>
<p class="tip"><?php echo $this->escape(JText::_($fieldset->description));?></p>
<?php endif;
foreach ($this->form->getFieldset($name) as $field) : ?>
<div class="control-group">
<?php echo $field->label; ?>
<div class="controls">
</div>
</div>
<?php endforeach; ?>
</div>
<?php endforeach; ?>
<?php if ($this->canDo->get('core.admin')): ?>
<div class="tab-pane" id="permissions">
<fieldset>
<?php echo $this->form->getInput('rules'); ?>
</fieldset>
</div>
<?php endif; ?>
</div>
</div>
<div>
<input type="hidden" name="task" value="order.edit" />
<?php echo JHtml::_('form.token'); ?>
</div>
</div>
</form>
models/order.php
<?php
// Запрет прямого доступа.
defined('_JEXEC') or die;
// Подключаем библиотеку modeladmin Joomla.
jimport('joomla.application.component.modeladmin');
/**
* Модель Order.
*/
class OrderModelOrder extends JModelAdmin
{
/**
* Возвращает ссылку на объект таблицы, всегда его создавая.
*
* @param string $type Тип таблицы для подключения.
* @param string $prefix Префикс класса таблицы. Необязателен.
* @param array $config Конфигурационный массив. Необязателен.
*
* @return JTable Объект JTable.
*/
public function getTable($type = 'Order', $prefix = 'OrderTable', $config = array())
{
return JTable::getInstance($type, $prefix, $config);
}
/**
* Метод для получения формы.
*
* @param array $data Данные для формы.
* @param boolean $loadData True, если форма загружает свои данные (по умолчанию), false если нет.
*
* @return mixed Объект JForm в случае успеха, в противном случае false.
*/
public function getForm($data = array(), $loadData = true)
{
// Получаем форму.
$form = $this->loadForm(
$this->option . '.order', 'order', array('control' => 'jform', 'load_data' => $loadData)
);
if (empty($form))
{
return false;
}
$id = JFactory::getApplication()->input->get('id', 0);
$user = JFactory::getUser();
// Изменяем форму исходя из доступов пользователя.
if ($id != 0 && (!$user->authorise('core.edit.state', $this->option . '.message.' . (int) $id))
|| ($id == 0 && !$user->authorise('core.edit.state', $this->option)))
{
// Модифицируем поля.
$form->setFieldAttribute('state', 'disabled', 'true');
echo "<p> 8888888</p>";
}
return $form;
}
/**
* Метод для получения скрипта, который будет включен в форму.
*
* @return string Файл скрипта.
*/
public function getScript()
{
return 'administrator/components/' . $this->option . '/models/forms/order.js';
}
/**
* Метод для получения данных, которые должны быть загружены в форму.
*
* @return mixed Данные для формы.
*/
protected function loadFormData()
{
// Проверка сессии на наличие ранее введеных в форму данных.
$data = JFactory::getApplication()->getUserState($this->option . '.edit.order.data', array());
if (empty($data))
{
$data = $this->getItem();
}
return $data;
}
/**
* Метод для проверки, может ли пользователь удалять существующую запись.
*
* @param object $record Объект записи.
*
* @return boolean True, если разрешено удалять запись.
*/
protected function canDelete($record)
{
if (!empty($record->id))
{
return JFactory::getUser()->authorise('core.delete', $this->option . '.message.' . (int) $record->id);
}
else
{
return parent::canDelete($record);
}
}
/**
* Метод для проверки, может ли пользователь изменять состояние записи.
*
* @param object $record Объект записи.
*
* @return boolean True, если разрешено изменять состояние записи.
*/
protected function canEditState($record)
{
$user = JFactory::getUser();
if (!empty($record->id))
{
return $user->authorise('core.edit.state', $this->option . '.message.' . (int) $record->id);
}
elseif (!empty($record->catid))
{
return $user->authorise('core.edit.state', $this->option . '.category.' . (int) $record->catid);
}
else
{
return parent::canEditState($record);
}
}
}
models/forms/order.xml:
<?xml version="1.0" encoding="utf-8"?>
<form
addrulepath="/administrator/components/com_order/models/rules"
>
<fieldset addrulepath="/administrator/components/com_order/models/fields" name="details">
<field
name="id"
type="hidden"
/>
<field
name="user_id"
type="text"
label="COM_ORDER_ORDER_FIELD_USER_ID_LABEL"
description="COM_ORDER_ORDER_FIELD_USER_ID_DESC"
size="5"
default="0"
/>
..........
<field
name="catid"
type="category"
extension="com_order"
class="inputbox"
default=""
label="COM_ORDER_ORDER_FIELD_CATID_LABEL"
description="COM_ORDER_ORDER_FIELD_CATID_DESC"
>
<option value="0">JOPTION_SELECT_CATEGORY</option>
</field>
<field
name="state"
type="list"
label="JSTATUS"
description="JFIELD_PUBLISHED_DESC"
class="inputbox"
size="1"
default="1"
>
<option value="1">JPUBLISHED</option>
<option value="0">JUNPUBLISHED</option>
<option value="2">JARCHIVED</option>
<option value="-2">JTRASHED</option>
</field>
</fieldset>
<fields name="params">
<fieldset
name="params"
label="JGLOBAL_FIELDSET_DISPLAY_OPTIONS"
>
<field
name="show_category"
type="radio"
label="COM_ORDER_ORDER_FIELD_SHOW_CATEGORY_LABEL"
description="COM_ORDER_ORDER_FIELD_SHOW_CATEGORY_DESC"
default=""
labelclass="control-label"
>
<option value="">JGLOBAL_USE_GLOBAL</option>
<option value="0">JHIDE</option>
<option value="1">JSHOW</option>
</field>
</fieldset>
</fields>
<fieldset name="accesscontrol">
<field name="asset_id" type="hidden" filter="unset" />
<field name="rules"
type="rules"
label="JFIELD_RULES_LABEL"
translate_label="false"
filter="rules"
validate="rules"
class="inputbox"
component="com_order"
section="message"
/>
</fieldset>
</form>
В форму я получаю данные, но вот воспользоваться описанием поле из models/forms/order.xml не получается. Или я неправильно название формы передаю?
Помогите, пожалуйста