Редирект и генерация системных сообщений

Сообщения бывают 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;
}
?>