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

Worker

  • Новичок
  • 7
  • 0 / 0
setRedirect
« : 19.10.2008, 17:14:30 »
Это отрывок из com_user\controller.php стандартный компонент, на сколько я понял в случае возникновения ошибки происходит редирект на адрес
index.php?option=com_user&view=reset и передается сообщение с тектом ошибки $message. Вот вопрос как мне добраться до этого сообщения из Представления (View) что-бы вывести на экран?
 
// Request a reset
if ($model->requestReset($email) === false)
{
   $message = JText::sprintf('PASSWORD_RESET_REQUEST_FAILED', $model->getError());
   $this->setRedirect('index.php?option=com_user&view=reset', $message);
   return false;
}
*

Worker

  • Новичок
  • 7
  • 0 / 0
Re: setRedirect
« Ответ #1 : 27.10.2008, 10:12:04 »
С проблемой я разобрался:) Так как я новичок то не знал что в шаблоне надо указывать место отображения сообщений <jdoc:include type="message" /> по этому у меня сообщения и не отображались.
*

Worker

  • Новичок
  • 7
  • 0 / 0
Re: setRedirect
« Ответ #2 : 15.01.2009, 16:39:13 »
Я почему то не могу отправлять Личные сообщение, по этому отвечу zaboich сдесь.
Для вывода сообщения в представлении я использую переменную message:
Задача в контроллере:
function edit(){
      $arr = JRequest::get( 'post' );
      $model =& $this->getModel( 'explog' );
      $r = $model->getConfig($arr['cid'][0]);
      if (!$r) {
         $msg = $model->getError(); // Получение сообщения из объекта модели
         JRequest::setVar( 'view', 'explog' );
         JRequest::setVar( 'layout', 'options'  );
         JRequest::setVar('hidemainmenu', 1);
         JRequest::set(JRequest::get( 'post' ), 'post');
         JRequest::setVar( 'message', $msg  ); // Установка переменной message
      }
      JRequest::setVar( 'view', 'explog' );
      JRequest::setVar( 'layout', 'options'  );
      JRequest::setVar('hidemainmenu', 1);
      parent::display();
   }
В представлении:
$arr = JRequest::get( 'post' );
if(!empty($arr['message'])) echo '<h3 style="color:#FF0000">'.$arr['message'].'</h3>'; // Если переменная не пустая вывести сообщение

В модели например:
$db->setQuery( $query );
if(  !$db->query()  ){
   $this->setError( 'INSERT category cfg  '.$db->getErrorMsg() ); // Получение ошибки при обращении к БД и занесение ее в объект модели
   return false;
}
*

zaboich

  • Осваиваюсь на форуме
  • 37
  • 11 / 0
Re: setRedirect
« Ответ #3 : 20.01.2009, 17:00:07 »
Спасибо за ответ.

Цитировать
В представлении:
Код
$arr = JRequest::get( 'post' );
if(!empty($arr['message'])) echo '<h3 style="color:#FF0000">'.$arr['message'].'</h3>'; // Если переменная не пустая вывести сообщение

Мне кажется более красивое решение:
Код
JError::raiseNotice($code, 'message'); // выводит предупреждение 
или
Код
JError::raiseWarning($code,'message'); // выводит сообщение об ошибке 
Как раз выводят стандартное Jooml`овское сообщение (предупрежедение или ошибку), такой подход должен лучше вписываться в произвольный шаблон. Честно говоря зачем нужна переменная $code я не понял, а "message" - это то самое сообщение.

Ну а соответственно если надо сделать редирект, то из контролера
Код
$this->setRedirect('index.php?...', 'сообщение об ошибке');
$this->redirect;
но иногда хочется сделать редирект из Модели или из Вида (представления)
(может, конечно, все проверки надо делать в контроллере, но:
если Вид (с помощью Модели) делается к.л. сложный и долгий запрос к БД, а запрос возвращает к.н. нехороший результат, например нулевой (не ошибку, а именно результат, который не вписывается в логику текущего Вида), то можно сделать редирект прямо из Вида, с объявнением причины, почему пользователя туда послали
Код
JController::setRedirect('/index.php?option=com_component&view=correctView', 'Вы сделали что-то не то или хотите туда куда Вам нельзя, начните с другой стороны' );
JController::redirect();

к сожалению не могу вспомнить какие значения, кроме "message" может принимать третий параметр setRedirect( $url, $msg = null, $type = 'message' )
*

Cerebrum

  • Новичок
  • 7
  • 1 / 0
Re: setRedirect
« Ответ #4 : 28.09.2011, 22:07:16 »
Цитировать
к сожалению не могу вспомнить какие значения, кроме "message" может принимать третий параметр setRedirect( $url, $msg = null, $type = 'message' )
"message" - для вывода информации
"warning" - для вывода предостережений или предупреждений
"error" - для вывода информации об ошибках
Вроде так...
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Непонятное поведение setRedirect

Автор b2z

Ответов: 5
Просмотров: 1588
Последний ответ 14.01.2010, 01:57:49
от b2z