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

GuDeVic

  • Захожу иногда
  • 228
  • 0 / 0
Здравствуйте!
У меня возникла проблема с сохранением информации, введённой пользователем в виде заявки. Сохраняются только сведения, явно указанные в форме, а то что дополнительно вставляется в данные перед операцией store - не сохраняются в БД.
site:
site/com_order/controllers/registartion.php:
Спойлер
[свернуть]
модель
site/com_order/models/registartion.php:
Спойлер
[свернуть]
Всё, что добавлено ($user_id, $state_order, $state, $date_order) при store() в БД  не сохраняются. Запись создается только с теми полями, которые были заполнены в форме.

форма
Спойлер
[свернуть]
*

SmokerMan

  • Гуру
  • 5293
  • 720 / 26
ну судя по этому
Цитировать
* @param array $data
я так понимаю там должен быть массив, а не объект и странно что это не вызывает ошибки
*

Septdir

  • Живу я здесь
  • 3370
  • 168 / 4
table бы тоже глянуть не мешало.
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
CodersRank | Контакты | Мой GitHub | Workshop
*

GuDeVic

  • Захожу иногда
  • 228
  • 0 / 0
ну судя по этомуя так понимаю там должен быть массив, а не объект и странно что это не вызывает ошибки
Спасибо! Переделала:
Спойлер
[свернуть]
Сохранилось все, кроме даты.
Неправильно так текущую дату-время задавать?
Спойлер
[свернуть]
*

SmokerMan

  • Гуру
  • 5293
  • 720 / 26
Неправильно так текущую дату-время задавать?
ну смотря какой тип поля стоит в базе если datetime, то так
Код
$date = JFactory::getDate()->toSql();
*

GuDeVic

  • Захожу иногда
  • 228
  • 0 / 0
ну смотря какой тип поля стоит в базе если datetime, то так
Код
$date = JFactory::getDate()->toSql();
Именно datetime. Спасибо.
Если все в store() сохранилось, то можно прочесть id созданной записи? И возвращать в контроллер
Код
    if ( $table->store() ) {

        //возвращаем id созданной записи
$order_id=$table->id;
                //return true;
return $order_id;
    }
а в контроллере переход на просмотр введённой записи по возвращённому $order_id
Код
		// Flush the data from the session.
$app->setUserState('com_order.registration.data', null);

$this->setMessage(JText::_('COM_ORDER_REGISTRATION_SAVE_SUCCESS'));
//$this->setRedirect(JRoute::_('index.php?option=com_order&view=registration&layout=complete', false));
$this->setRedirect(JRoute::_('index.php?option=com_order&view=profile&id='.$order_id, false));
return true;
Но что-то как-то не получается.
*

SmokerMan

  • Гуру
  • 5293
  • 720 / 26
Но что-то как-то не получается.
нам видно стоит гадать из этого куска кода, откуда в контроллере взялась переменная $order_id
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
*

Septdir

  • Живу я здесь
  • 3370
  • 168 / 4
Я думаю проще будет если ts кинет компонент целиком, чтобы поставить да пощупать. Частенько бывает что ошибки в самых неожиданных местах
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
CodersRank | Контакты | Мой GitHub | Workshop
*

GuDeVic

  • Захожу иногда
  • 228
  • 0 / 0
нам видно стоит гадать из этого куска кода, откуда в контроллере взялась переменная $order_id
Э-э, виновата...
Это в контроллере
Спойлер
[свернуть]
Т.е. из модели, если всё благополучно сохранилось, возвращается $order_id (id сохранённой записи), и -> редирект на просмотр сохранённой записи
Код
$this->setRedirect(JRoute::_('index.php?option=com_order&view=profile&id='.$order_id, false));
На всякий слйчай и модель с register($data)
Спойлер
[свернуть]
Вообще-то возвращается
Код
* @return bool
, а я  пытаюсь вернуть id. Как быть?
*

SmokerMan

  • Гуру
  • 5293
  • 720 / 26
Вообще-то возвращается
Код
* @return bool
, а я  пытаюсь вернуть id. Как быть?
откуда там $order_id возьмется не известно, когда вместо нее видимо надо ставить $return
Цитировать
$return = $model->register($data);
*

GuDeVic

  • Захожу иногда
  • 228
  • 0 / 0
Странно, что не получается. $table->id как раз содержит ID созданной записи.
ID, скорее всего, и получается, но как его вернуть из функции, которая возвращает в контроллер bool?
*

GuDeVic

  • Захожу иногда
  • 228
  • 0 / 0
откуда там $order_id возьмется не известно, когда вместо нее видимо надо ставить $return
Код
$return = $model->register($data);
Это в котроллере надо, или в register в модели? Извините, конечно.
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
ID, скорее всего, и получается, но как его вернуть из функции, которая возвращает в контроллер bool?
В модели перед return true;

Код: php
$this->setState($this->getName(). '.id', $table->$key);

В контроллере:
Код: php
$id = $model->getState($this->context . '.id');
*

SmokerMan

  • Гуру
  • 5293
  • 720 / 26
ID, скорее всего, и получается, но как его вернуть из функции, которая возвращает в контроллер bool?
Цитировать
    if ( $table->store() ) {

        //возвращаем id сохранённой записи
      $order_id=$table->id;
        //return true;
      return $order_id;
    }
где здесь boolean?
я выше дал ответ, в контроллере вместо $order_id надо ставить $return
$order_id - в контроллере вообще неопределенная переменная и должна вызывать предупреждение notice
*

GuDeVic

  • Захожу иногда
  • 228
  • 0 / 0
В модели перед return true;

Код: php
$this->setState($this->getName(). '.id', $table->$key);

В контроллере:
Код: php
$id = $model->getState($this->context . '.id');
Вот что в итоге:
Код
Duplicate entry '454' for key 2 SQL=INSERT INTO `#__order` (`id`,`user_id`,`user_cod`,`tip`,`shifr`,`date_order`,`state_order`,`state`) VALUES ('','526','454','1','454','2016-12-05 15:01:21','1','1')
*

GuDeVic

  • Захожу иногда
  • 228
  • 0 / 0
А, дубль возник при повторном сохранении записи, там shifr д.б. уникальным
*

GuDeVic

  • Захожу иногда
  • 228
  • 0 / 0
где здесь boolean?
я выше дал ответ, в контроллере вместо $order_id надо ставить $return
$order_id - в контроллере вообще неопределенная переменная и должна вызывать предупреждение notice
я уже по совету b2z сделала исправления:
в модели
Код
    if ( $table->store() ) {

        //возвращаем true тем самым говоря что сообщение успешно отправлено
//$order_id=$table->id;
//return $order_id;
$this->setState($this->getName(). '.id', $table->$key);
return true;

    }
в контроллере:
Код
// Attempt to save the data.
$return = $model->register($data);

// Check for errors.
if ($return === false)
{
// Save the data in the session.
$app->setUserState('com_order.registration.data', $data);

// Redirect back to the edit screen.
$this->setMessage($model->getError(), 'warning');
$this->setRedirect(JRoute::_('index.php?option=com_order&view=registration', false));

return false;
}
$id = $model->getState($this->context . '.id');
// Flush the data from the session.
$app->setUserState('com_order.registration.data', null);


$this->setMessage(JText::_('COM_ORDER_REGISTRATION_SAVE_SUCCESS'));
$this->setRedirect(JRoute::_('index.php?option=com_order&view=profile&id='.$id, false));
return true;
запись сохраняется, но редиректа на profile нет : index.php?option=com_order&view=registration&Itemid=236 -
Сайт xxx.ru пока не может обработать этот запрос.
HTTP ERROR 500
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
*

GuDeVic

  • Захожу иногда
  • 228
  • 0 / 0
Ну почему $return приходит как false. Отладка, отладка и ещё раз отладка.
Вот закомментировала в модели перед return true;
Код
$this->setState($this->getName(). '.id', $table->$key);
и все худо-бедно заработало, т.е. нет перехода по id в profile.
Что-то неправильно в закомментированной команде? Я её просто скопировала из Вашего поста.
*

GuDeVic

  • Захожу иногда
  • 228
  • 0 / 0
$table->$key заменить на $table->id
Спасибо большое! Теперь все работает.
У меня ещё вопрос.
У меня десять типов записей (заявок). Когда я обращаюсь к конкретной записи (для просмотра или редактирования) из списка записей, то я знаю тип этой записи, и в модели подставляю нужную форму.
Но когда надо создать новую запись - как это лучше сделать? В рамках компонента я сделала ещё одно представление, которое, никак не связано ни с какими таблицами - просто выводится
форма с селектом
Спойлер
[свернуть]
Как получить значение выбранного типа заявки (filter_tip) в модели registration при выборе формы для метода getForm?
Когда известен тип записи, то getForm такой
Спойлер
[свернуть]
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
Тип заявки - это составляющая часть самой заявки? Если так, то лучше сделать своё поле "Тип заявки" и выводить его в форме заявки.
*

GuDeVic

  • Захожу иногда
  • 228
  • 0 / 0
Тип заявки - это составляющая часть самой заявки? Если так, то лучше сделать своё поле "Тип заявки" и выводить его в форме заявки.
Тип заявки - составляющая часть заявки (по ней я и ориентируюсь, выводя конкретную запись для просмотра и редактирования) и поле тип заявки, разумеется, есть. Но этот тип заявки и определяет форму самой заявки. При этом в некоторых заявках разного типа некоторые поля могут быть одинаковыми, а есть специфические. Т.е. нельзя в в одном xml-файле сделать fieldset's для каждого типа заявки и выводить из после выбора типа заявки. Вернее, можно, но, практически вручную, а полей довольно много. Поэтому лучше просто создать 10 XML файлов и подставлять в соответствии с типом заявки. Что я и делаю, когда имею дело (пардон за тавтологию) с конкретной записью с конкретным типом. Хотелось бы и при создании новых записей иметь такой же механизм - из независимой формы из списка типов заявок получить значение  выбранного типа и подставлять нужную форму (xml-файл). Из этой формы (id=select-registratio) посылаю методом post значение filter_tip, а как его прочесть в модели для registration в getForm?
*

GuDeVic

  • Захожу иногда
  • 228
  • 0 / 0
Может такое https://docs.joomla.org/Subform_form_field_type
Да, это всё полезная информация, спасибо.
Но у меня другой вопрос. Можно ли в контроллере или модели registration (для создания новой записи) получить значение поля c id=filer_tip из формы другого представления (где просто выбирается тип заявки)
Спойлер
[свернуть]
*

robert

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

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
Цитировать
Можно ли в контроллере или модели registration (для создания новой записи) получить значение поля c id=filer_tip из формы другого представления (где просто выбирается тип заявки)
Ну чтобы что-то показать, нужно сначал выбрать этот типа. Тут либо в два шага, либо аяксом подгружать форму в зависимости от выбранного типа заявки.
*

GuDeVic

  • Захожу иногда
  • 228
  • 0 / 0
Ну чтобы что-то показать, нужно сначал выбрать этот типа. Тут либо в два шага, либо аяксом подгружать форму в зависимости от выбранного типа заявки.
Так я и хочу сделать выбор типа заявки в одной форме (просто задать значение) (форму уже выкладывала) и перейти из этой формы
Код
   <input type="hidden" name="option" value="com_order" />
            <input type="hidden" name="task" value="registration" />
в форму регистрации и там (в контроллере?, в модели?) предварительно получить выбранное значение типа заявки. Конечно, можно в самой форме выбрать тип формы и по этому событию формировать поля формы (хоть вручную, хоть с суб-формами).
Я, может быть, не могу правильно сформулировать свой вопрос. Мне хотелось бы получить значение, выбранное в селекте одной независимой формы (где кроме этого селекта ничего нет и она не связана с таблицей) и получить это значение для начала регистрации.
*

GuDeVic

  • Захожу иногда
  • 228
  • 0 / 0
Почему не скрыть по-умолчанию все "специфические" поля и показать только нужные в зависимости от значения filer_tip?
Вопрос как получить это самое значение filer_tip, а не в том как скрывать или раскрывать поля.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Как правильно записать дату создания записи в БД?

Автор ImPuLsE

Ответов: 13
Просмотров: 2764
Последний ответ 11.09.2019, 22:58:57
от sev07
Получить данные из поля " file", и передать в файл обработчик

Автор Glog

Ответов: 5
Просмотров: 1317
Последний ответ 01.08.2017, 13:55:40
от Glog
Проблема с class ers

Автор web3.0

Ответов: 11
Просмотров: 1043
Последний ответ 29.04.2017, 09:57:04
от web3.0
Передача поля формы во view в другую модель по кнопке контроллера

Автор tm2010

Ответов: 28
Просмотров: 1598
Последний ответ 18.02.2016, 17:27:06
от tm2010
Проблема с хлебными крошками!

Автор Aleks.Denezh

Ответов: 1
Просмотров: 1062
Последний ответ 23.12.2015, 00:17:27
от Aleks.Denezh