Новости Joomla

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

GuDeVic

  • Захожу иногда
  • 228
  • 0 / 0
Здравствуйте!
Как правильно загрузить форму по известному имени в контроллере компонента?
Спойлер
[свернуть]
Обращение к методу из формы для сохранения внесённых изменений.
На экране сообщение, HTTP ERROR 500 - невозможно обработать запрос
« Последнее редактирование: 15.12.2016, 17:59:41 от GuDeVic »
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Сначала вам нужно получить экземпляр класса модели
Код: php-brief
$model=$this->getModel();
Вы не можете извне обратиться к функции loadForm, но к getForm - можете
Код: php-brief
$form=$model->getForm();
Не будь паразитом, сделай что-нибудь самостоятельно!
*

GuDeVic

  • Захожу иногда
  • 228
  • 0 / 0
Сначала вам нужно получить экземпляр класса модели
Код: php-brief
$model=$this->getModel();
Вы не можете извне обратиться к функции loadForm, но к getForm - можете
Код: php-brief
$form=$model->getForm();
В контроллере есть
Код
 $model  = $this->getModel('Order', 'OrderModel');
и сначала форму я вызывала в контроллере
Код
		$form = $model->getForm();

if (!$form)
{
JError::raiseError(500, $model->getError());

return false;
}
В модели GetForm:
Код
public function getForm($data = array(), $loadData = true) 
{
        $input = JFactory::getApplication()->input;
     
   // Устанавливаем форму в зависимости от типа заявки.
 
   $this->form = $this->getItem( $input->getInt('id', 0))->tip;
   // Get the form.
   $form = $this->loadForm(
     
      'com_order.' . $this->form, $this->form, array('control' => 'jform', 'load_data' => $loadData)
   );
   
   if (empty($form))
   {
      return false;
   }
   
   return $form;
}
В итоге ошибка:
Код
500 JForm::getInstance(name, *string*)
т.е. ошибка при загрузки формы.
*

SmokerMan

  • Гуру
  • 5293
  • 720 / 26
Цитировать
$input->getInt('id', 0))->tip
Здравствуйте!
Как правильно загрузить форму по известному имени в контроллере компонента?
Спойлер
[свернуть]
если это контроллер, откуда в нем метод loadForm не понятно

Цитировать
$this->form = $this->getItem( $input->getInt('id', 0))->tip;
что там в getItem тоже не понятно
Код
var_dump($this->form)
что показывает?

да и совсем не понятно что и где надо вывести, сформулируйте вопрос внятно, с полным кодом, а не отрывками непонятного кода
*

GuDeVic

  • Захожу иногда
  • 228
  • 0 / 0

да и совсем не понятно что и где надо вывести, сформулируйте вопрос внятно, с полным кодом, а не отрывками непонятного кода

Код
loadform
в контроллере - это ... ошибка, попытка обойти ошибку
Код
$form=$model->getForm();
Задача такая: сохранить отредактированные данные из формы редактирования.
представление:
Спойлер
[свернуть]
модель/site/com_order/models/order.php
Спойлер
[свернуть]
контроллер
Спойлер
[свернуть]
« Последнее редактирование: 15.12.2016, 20:26:50 от GuDeVic »
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Замените в модели эти методы
Спойлер
[свернуть]
Если ошибка все равно вылезет, то сделайте проверку в методе getForm
Код: php-brief
	$form=$this->loadForm('com_order.'.$type,$type,array('control'=>'jform','load_data'=>$loadData));//после этой строки добавьте следующую
print_r($form);exit();

P.S. Где-то я уже видел очень похожую тему.
P.P.S. Исправил ошибку в loadFormData().
« Последнее редактирование: 15.12.2016, 21:09:32 от robert »
Не будь паразитом, сделай что-нибудь самостоятельно!
*

GuDeVic

  • Захожу иногда
  • 228
  • 0 / 0
Замените в модели эти методы
Спойлер
[свернуть]
Если ошибка все равно вылезет, то сделайте проверку в методе getForm
Код: php-brief
	$form=$this->loadForm('com_order.'.$type,$type,array('control'=>'jform','load_data'=>$loadData));//после этой строки добавьте следующую
print_r($form);exit();

P.S. Где-то я уже видел очень похожую тему.
Я не очень поняла, чем отличаются приведённые Вами коды методов от того, что в моем компоненте
Спойлер
[свернуть]
Та же ошибка выходит. Если прямо в getForm указать имя формы, то ошибки нет. Но у меня 10 типов форм, так что.
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Вы читали мой последний пост до конца? Проверку сделали?
Не будь паразитом, сделай что-нибудь самостоятельно!
*

GuDeVic

  • Захожу иногда
  • 228
  • 0 / 0
Вы читали мой последний пост до конца? Проверку сделали?
Читала до конца. Вставила проверку, белый экран, переход на index.php?option=com_order&task=order.save&Itemid=142
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Читала до конца.
И это тоже
P.P.S. Исправил ошибку в loadFormData().
?
И почему переход на order.save? Вставьте проверку, откройте запись для редактирования - при отсутствии ошибки у вас должен выводиться JForm Object.
« Последнее редактирование: 15.12.2016, 22:10:48 от robert »
Не будь паразитом, сделай что-нибудь самостоятельно!
*

GuDeVic

  • Захожу иногда
  • 228
  • 0 / 0
И это тоже?
И это тоже исправила.
Похоже, всё-таки, не определяется в getForm тип записи, т.к., если я принудительно вставляю название формы (номер), то форма в контроллер возвращается без ошибки.
Похожая тема была. И это была моя тема. Задача была создать новую заявку, информация о типе заявки получалась из как бы независимой формы, в которой был просто селект типов заявок, в модели  getForm
Спойлер
[свернуть]
Данные заявки сохранялись.
Теперь несколько иная задача - из списка заявок, по интерактивному полю (когда известны и тип заявки и id) переход в режим редактирования. Так что методы модели используются для перехода в order.edit. А теперь надо сделать save того, что добавляется в редактируюмую запись. И вот здесь-то getForm не может выбрать нужное название формы. Может быть, там уже не input должен быть?
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Ну почему вы все всегда говорите кусками, вырванными из контекста?
Похожая тема была. И это была моя тема. Задача была создать новую заявку, информация о типе заявки получалась из как бы независимой формы, в которой был просто селект типов заявок, в модели  getForm
Теперь несколько иная задача - из списка заявок, по интерактивному полю (когда известны и тип заявки и id) переход в режим редактирования. Так что методы модели используются для перехода в order.edit. А теперь надо сделать save того, что добавляется в редактируюмую запись. И вот здесь-то getForm не может выбрать нужное название формы. Может быть, там уже не input должен быть?
С этого и должны были начать.
Что за интерактивное поле?
Проблема в открывании формы или в сохранении?
Не будь паразитом, сделай что-нибудь самостоятельно!
*

GuDeVic

  • Захожу иногда
  • 228
  • 0 / 0
И это тоже?
И почему переход на order.save? Вставьте проверку, откройте запись для редактирования - при отсутствии ошибки у вас должен выводиться JForm Object.
Да, выводится JForm Object при открытии записи на редактирование. Правильно заполнено.
*

GuDeVic

  • Захожу иногда
  • 228
  • 0 / 0
Ну почему вы все всегда говорите кусками, вырванными из контекста?С этого и должны были начать.
Что за интерактивное поле?
Проблема в открывании формы или в сохранении?
Интерактивное поле? Ну, наверное, неправильно так называть. Когда я вывожу введенные записи, одно из полей я делаю ссылкой
Код
<a href="<?php echo JRoute::_('index.php?option=com_order&task=order.edit&id=' . (int) $item->id); ?>">
<?php $user_cod=$item->user_cod; echo $user_cod; ?>
</a>
По этой ссылке (этим ссылкам) можно открыть конкретную запись на редактировние (с учетом типа записи (заявки). Проблема с сохранением добавленной в форму информации. Точнее, просто с сохранением. Точнее, не могу загрузить нужную форму в соответствии с типом записи.
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
По этой ссылке (этим ссылкам) можно открыть конкретную запись на редактировние (с учетом типа записи (заявки). Проблема с сохранением добавленной в форму информации. Точнее, просто с сохранением.
Значит, с getForm() все нормально: вы ведь форму открыли, верно? Но сразу в следующем предложении вы написали
Точнее, не могу загрузить нужную форму в соответствии с типом записи.
?
Если вы не научитесь внятно разъясняться, никто не сможет вам помочь, кроме экстрасенсов.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

GuDeVic

  • Захожу иногда
  • 228
  • 0 / 0
Я вставила в модель два одинаковых по содержанию кода getForm и getForm2, к методу getForm2 обращение из контроллера при сохранении записи. Если в getForm2 принудительно задать название формы, то  dump_r выводит JForm Object, но без данных из формы. А вот без принудительно заданного  имени и дампа нет.
Т.е. неправильно к записи обращаюсь из формы редактирования?
*

GuDeVic

  • Захожу иногда
  • 228
  • 0 / 0
Значит, с getForm() все нормально: вы ведь форму открыли, верно? Но сразу в следующем предложении вы написали?
Если вы не научитесь внятно разъясняться, никто не сможет вам помочь, кроме экстрасенсов.
Да и экстрасенсы в отпуске. Спасибо, что помогаете, в том числе, и правильно сформулировать.
Форму для редактирования я открыла. А вот сохранить отредактированные данные не могу. При обращении к getForm из контроллера получаю ошибку.
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Я вставила в модель два одинаковых по содержанию кода getForm и getForm2, к методу getForm2 обращение из контроллера при сохранении записи. Если в getForm2 принудительно задать название формы, то  dump_r выводит JForm Object, но без данных из формы. А вот без принудительно заданного  имени и дампа нет.
Т.е. неправильно к записи обращаюсь из формы редактирования?
Вы с какой планеты, GuDeVic? У вас там все сидят друг у друга в голове? Или у всех на лбу выводятся мысли? Почему только сейчас всплыла getForm2? Что она должна делать и где она фигурирует?
Не будь паразитом, сделай что-нибудь самостоятельно!
*

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
со стороны это даже смешно, совсем не так, когда сам участвуешь :)
проще, наверно, доступ предоставить товарищу robert'у, это сбережет много нервов обеим сторонам.
*

GuDeVic

  • Захожу иногда
  • 228
  • 0 / 0
Вы с какой планеты, GuDeVic? У вас там все сидят друг у друга в голове? Или у всех на лбу выводятся мысли? Почему только сейчас всплыла getForm2? Что она должна делать и где она фигурирует?
Вообще-то в ответе#4 в контроллере написано
Код
 // Validate the posted data.
      //   $form = $model->getForm();  // выдает ошибку!, поэтому для проверки обращение к getForm2 c явно указанной формой
      $form = $model->getForm2();
Сейчас в getForm2() абсолютно тот-же код, что и getForm(). Это ведь ни на что не влияет? И потом я использовала эти 2 метода, чтобы вставлять dump_r при вызове формы для редактирования и для сохранения. Как бы можно было пройти через дамп при вызове на редактирование, чтобы посмотреть дамп при сохранении в рамках одного метода?
Хотя о чем я? Вы потратили время на мои проблемы, отягощённые моей уверенностью, что и так всё понятно, что у меня в голове, тем более, это для верности ещё и на лбу у меня написано.. Спасибо Вам огромное.
*

GuDeVic

  • Захожу иногда
  • 228
  • 0 / 0
со стороны это даже смешно, совсем не так, когда сам участвуешь :)
проще, наверно, доступ предоставить товарищу robert'у, это сбережет много нервов обеим сторонам.
Ну, насчет моих нервов. Я очень переживаю, что нервирую roberta.
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Попробуйте соранить id в сессии.
Вот методы в модели
Спойлер
[свернуть]
Убрать getForm2(), использовать только getForm().
« Последнее редактирование: 16.12.2016, 09:58:37 от robert »
Не будь паразитом, сделай что-нибудь самостоятельно!
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться