LiveInternetMail.ru
Форум русской поддержки Joomla!® CMS
27.05.2012, 22:25:53 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 1.7 FAQ Joomla 1.5 FAQ Joomla 1.0 FAQ Правила форума Новости Joomla Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор Тема: setRedirect  (Прочитано 3175 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Worker
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 7


« : 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
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 7


« Ответ #1 : 27.10.2008, 11:12:04 »

С проблемой я разобрался:) Так как я новичок то не знал что в шаблоне надо указывать место отображения сообщений <jdoc:include type="message" /> по этому у меня сообщения и не отображались.
Записан
Worker
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 7


« Ответ #2 : 15.01.2009, 17: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
Осваиваюсь на форуме
***

Репутация: +10/-0
Offline Offline

Сообщений: 29


« Ответ #3 : 20.01.2009, 18: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
Захожу иногда
**

Репутация: +1/-0
Offline Offline

Сообщений: 23


« Ответ #4 : 28.09.2011, 22:07:16 »

Цитировать
к сожалению не могу вспомнить какие значения, кроме "message" может принимать третий параметр setRedirect( $url, $msg = null, $type = 'message' )
"message" - для вывода информации
"warning" - для вывода предостережений или предупреждений
"error" - для вывода информации об ошибках
Вроде так...
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Рейтинг@Mail.ru Rambler Top100 Powered by SMF 1.1.16 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet