Редирект и генерация системных сообщений
Сообщения бывают 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;
}
?>
