Редирект и генерация системных сообщений
Сообщения бывают 4-х типов:
- 'warning' - yellow
- 'notice' - blue
- 'error' - red
- 'message' (or empty) - green
// Первый вариант: $application = JFactory::getApplication(); $application->enqueueMessage(JText::_('SOME_ERROR_OCCURRED'), 'error'); // Второй вариант: JFactory::getApplication()->enqueueMessage(JText::_('SOME_ERROR_OCCURRED'), 'error'); // Третий вариант (проверено в Joomla 3.x в контроллере nc):
if($me->guest){
global $app;
$app->enqueueMessage(JText::_('JGLOBAL_YOU_MUST_LOGIN_FIRST'), 'warning');
$app->redirect($loginLink);
}
// если несколько сообщений global $app; $app->enqueueMessage("mess 1", 'error'); $app->enqueueMessage("mess 2", 'error'); $app->enqueueMessage("mess 3", 'notice'); $this->setRedirect('/'); $this->redirect(); // если одно сообщение $this->setRedirect('/', "mess 1", 'error'); $this->redirect();
Более подробное описание здесь.
Редирект с сообщением:
$this->setRedirect(JRoute::_("index.php?option=com_users&view=login&Itemid=186"), "Необходимо залогиниться!",'error');
Для вывода сообщений в шаблоне необходимо прописать:
<jdoc:include type="message" />
Для изменения шаблона вывода сообщений можно сделать в файле /templates/активный_шаблон/html/message.php с содержимым:
<?php defined('_JEXEC') or die; function renderMessage($msgList) { // Build the return string $buffer = ''; $buffer .= "\n<div id=\"system-message-container\">"; // If messages exist render them if (is_array($msgList)) { $buffer .= "\n<div id=\"system-message\">"; foreach ($msgList as $type => $msgs) { $buffer .= "\n<div class=\"alert alert-" . $type . "\">"; // This requires JS so we should add it trough JS. Progressive enhancement and stuff. $buffer .= "<a class=\"close\" data-dismiss=\"alert\">×</a>"; if (count($msgs)) { $buffer .= "\n<h4 class=\"alert-heading\">" . JText::_($type). "</h4>"; $buffer .= "\n<div>"; foreach ($msgs as $msg) { $buffer .= "\n\t\t<p>" . $msg . "</p>"; } $buffer .= "\n</div>"; } $buffer .= "\n</div>"; } $buffer .= "\n</div>"; } $buffer .= "\n</div>"; return $buffer; } ?>