Не подгружаются данные в форму

  • 12 Ответов
  • 567 Просмотров

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

*

Оффлайн 32ops

Пробую писать компонент. Есть список элементов, по нажатию на кнопку редактировать должна открываться форма для редактирования элемента, заполненная данными текущего элемента. Но данные в форму не подгружаются и непонятен сам механизм подкачки данных

Привожу код для элемента.
В модели в getItem посмотрел - переменные заполнены
[spoiler]
<?php
// Запрет прямого доступа.
defined('_JEXEC') or die;
 
// Подключаем библиотеку modellist Joomla.
jimport('joomla.application.component.modeladmin');
 
class JShopCPriceModelPriceType extends JModelAdmin
{

    private $data;
   
   
    public function getForm($data=array(),$loadData=true) {
        $form=$this->loadForm(
            'com_jshopcprice.pricetype',
            'pricetype',
            array ('control'=>'jform', 'loadData'=> $loadData)
        );
        if (empty($form)) {
            return false;
        }
        return $form;
   }
   public function getTable ($type='PriceTypes',$prefix='JShopCPriceTable',$config=array()) {
      return JTable::getInstance($type,$prefix,$config);
   }
   public function prepareTable ($table) {
   }
   protected function loadFormData () {
      $data=$this->getItem();
      return $data;
   }
   public function getItem ($pk=null) {
      $pk = (!empty($pk))? $pk : (int) $this->getState($this->getName(). '.id');
      print_r($pk);
      if  ($item=parent::getItem($pk)) {
         print_r($item);
         return $item;

      }
      return false;
   }

}
?>
[/spoiler]

Во вьюхе  $this->item -тоже все поддягивается
[spoiler]
<?php
// Запрет прямого доступа.
defined('_JEXEC') or die;

 
// Подключаем библиотеку представления Joomla.
jimport('joomla.application.component.view');
 
class jshopcpriceViewpricetype extends JViewLegacy
{

   protected $form;
   protected $item;

   protected function addToolbar () {
      JToolBarHelper::title(JText::_('COM_JSHOPCPRICE_PRICETYPE_TITLE'));
           JToolBarHelper::save('pricetype.save');
           JToolBarHelper::cancel('pricetype.cancel');
   }
    public function display($tpl = null)
    {
   $this->form=$this->get('Form');
   $this->item=$this->get('Item');
   //print_r($this->item);
   $this->addToolbar();
   parent::display($tpl);
    }
}[/spoiler]

Привожу шаблон
[spoiler]
<?php
// Запрет прямого доступа.
defined('_JEXEC') or die;
 
// Загружаем тултипы.
JHtml::_('bootstrap.tooltip');
JHtml::_('behavior.formvalidation');
JHtml::_('behavior.keepalive');
$input = JFactory::getApplication()->input;
?>           
<form action="index.php?option=com_jshopcprice&view=pricetype&layout=edit&pricetype_id= <?php echo JText::_($this->form->getValue('pricetype_id')); ?> method="post" name="adminForm" id="adminForm">
   <div class="forn-horizontal">
      <?php foreach($this->form->getFieldsets() as $name=>$fieldset) : ?>
         <fieldset class="adminform">
            <legend><?php echo JText::_($fieldset->label)?></legend>
            <div class="row-fluid">
               <div class="span6">
      <?php foreach($this->form->getFieldset($name) as $field) : ?>
            <div class="control-group">
               <div class="control-label"><?php echo JText::_($field->label);?></div>
               <div class="controls"><?php echo JText::_($field->input);?></div>
            </div>
      <?php endforeach; ?>
                  
               </div>
            </div>
         </fieldset>
      <?php endforeach; ?>
   </div>
   <input type="hidden" name="task" value="" />
   <?php echo JHtml::_('form.token'); ?>
</form>[/spoiler]

Что нужно сделать чтобы данные из this->item упали на форму

*

Онлайн Aleks.Denezh

Re: Не подгружаются данные в форму
« Ответ #1 : 12.02.2016, 16:03:29 »
а XML формы где?)
и зачем вы $field->label и $field->input завернули в JText ?

*

Оффлайн zomby6888

Re: Не подгружаются данные в форму
« Ответ #2 : 12.02.2016, 16:06:27 »
Код: (php) [Выделить]
$form=$this->loadForm(
            'com_jshopcprice.pricetype',
            'pricetype',
            array ('control'=>'jform', 'loadData'=> $loadData)
        );

замените на

Код: (php) [Выделить]
$form=$this->loadForm(
            'com_jshopcprice.pricetype',
            'pricetype',
            array ('control'=>'jform', 'load_data'=> $loadData)
        );
« Последнее редактирование: 12.02.2016, 16:14:03 от zomby6888 »
интернет-блог: http://websiteprog.ru

*

Оффлайн 32ops

Re: Не подгружаются данные в форму
« Ответ #3 : 12.02.2016, 18:24:46 »
Спасибо!  ;D

*

Оффлайн 32ops

Re: Не подгружаются данные в форму
« Ответ #4 : 12.02.2016, 18:28:26 »
и зачем вы $field->label и $field->input завернули в JText ?
Я как обезьяна с очками - делаю что-то по примеру, а что не понимаю. Трудно сразу осилить - слишком новое все.

*

Оффлайн 32ops

Re: Не подгружаются данные в форму
« Ответ #5 : 12.02.2016, 20:30:53 »
 >:( Теперь элемент не записывает, говорит
Недействительный контроллер: имя = 'pricetype', формат = ''

Кнопка для сохранения элемента
   JToolBarHelper::save('pricetype.save');
Причем в списке команда с тем же контроллером работает.
    JToolBarHelper::addNew('pricetype.add');

Контроллер описан, функции не переопределял
<?php
// Запрет прямого доступа.
defined('_JEXEC') or die;
 
// Подключаем библиотеку контроллера Joomla.
jimport('joomla.application.component.controllerform');
 
class jshopcpriceControllerpricetype extends JControllerForm {
   protected $view_list = 'pricetypes';
}


Блин, отладки нет почти, жесть. Вообще не понимаю как угадывать, что не так. Работало ведь, после экспериментов - перестало.
« Последнее редактирование: 12.02.2016, 20:40:16 от 32ops »

*

Оффлайн zomby6888

Re: Не подгружаются данные в форму
« Ответ #6 : 12.02.2016, 20:40:05 »
А что мешает использовать IDE для отладки? По какому пути контроллер лежит? Названия файла должно быть pricetype.php. Папка controllers
« Последнее редактирование: 12.02.2016, 21:05:45 от zomby6888 »
интернет-блог: http://websiteprog.ru

*

Оффлайн 32ops

Re: Не подгружаются данные в форму
« Ответ #7 : 12.02.2016, 21:10:26 »
А что мешает использовать IDE для отладки? По какому пути контроллер лежит? Названия файла должно быть pricetype.php. Папка controllers
Мешает неграмотность. контроллер лежит controllers\pricetype.php, причем он срабатывает, когда из формы списка вызываю 'pricetype.add'. А когда из формы элемента пытаюсь записать 'pricetype.save' - говорит, что его нет((

*

Оффлайн 32ops

Re: Не подгружаются данные в форму
« Ответ #8 : 13.02.2016, 18:55:55 »
Таки нашел ошибку. В action формы непраильный url был и нужно добавлять токен на  форму.

*

Оффлайн 32ops

Re: Не подгружаются данные в форму
« Ответ #9 : 15.02.2016, 12:31:17 »
А что мешает использовать IDE для отладки?
Я правильно понимаю, что для отладки прийдется установить локально XAMPP или что-нибудь подобное, т.к. на хостах нужные для отладки опции отключены?

*

Оффлайн zomby6888

Re: Не подгружаются данные в форму
« Ответ #10 : 15.02.2016, 15:13:00 »
Конечно, я использую xampp+phpStorm+xdebug
интернет-блог: http://websiteprog.ru

*

Оффлайн b2z

  • *****
  • 7740
  • [+]739 / [-]0
  • Пол: Мужской
  • Разраблю понемногу
    • Просмотр профиля
    • NorrNext - расширения для Joomla! и Pagekit
Re: Не подгружаются данные в форму
« Ответ #11 : 15.02.2016, 16:01:44 »
Конечно, я использую xampp+phpStorm+xdebug
+1. Очень удобно, когда есть какие-то сложные ситуации и нужно проследить, верно ли инициализируются переменные. Если что-то простое, то мне как-то привычней по старинке через var_dump().

*

Оффлайн 32ops

Re: Не подгружаются данные в форму
« Ответ #12 : 20.02.2016, 07:55:10 »
Конечно, я использую xampp+phpStorm+xdebug
Да, то что доктор прописал. Спасибо