404 страница для мультиязычного сайта Джумла 3.5.6

6 года 7 мес. назад #8291 от Liza
У кого получилась 404 страница для мультиязычной Джумлы? Поделитесь решением!
Проблема такая: есть двуязычный сайт рус/англ. Для каждого языка создана 404 страница и проделаны манипуляции, как и для одного языка (созданы два варианта страницы, два фиктивных пункта меню без модулей). Пробую два варианта в error.php (во вложении). Итог: для русской версии всё Ок, для англ - или белый экран с моим сообщением, или 404 страница выводится в "теле" Главной страницы, плюя на все настройки по привязке модулей.
Вариант 1
defined('_JEXEC') or die;
if (!isset($this->error))
{
	$this->error = JError::raiseWarning(404, JText::_('JERROR_ALERTNOAUTHOR'));
	$this->debug = false;
}
// Get language and direction
$doc             = JFactory::getDocument();
$app             = JFactory::getApplication();
$this->language  = $doc->language;
$this->direction = $doc->direction;
$lang = JFactory::getLanguage();
$lng=$lang->getTag();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $this->language; ?>" lang="<?php echo $this->language; ?>" dir="<?php echo $this->direction; ?>">
<head>
</head>
<body>
<?php
 
/*перенаправление*/
if (($this->_error->get('code') == '404') &($lng=="ru-RU")) {
header("HTTP/1.0 404 Not Found");
header('Location: index.php?option=com_content&view=article&id=50');
exit;}
if (($this->_error->get('code') == '404') &($lng=="en-GB")) {
    header("HTTP/1.0 404 Not Found");
	header('Location: index.php?option=com_content&view=article&id=63');
exit;}
 ?>
</body>
</html>

Вариант 2
defined('_JEXEC') or die;
if (!isset($this->error))
{
	$this->error = JError::raiseWarning(404, JText::_('JERROR_ALERTNOAUTHOR'));
	$this->debug = false;
}
// Get language and direction
$doc             = JFactory::getDocument();
$app             = JFactory::getApplication();
$this->language  = $doc->language;
$this->direction = $doc->direction;
$lang = JFactory::getLanguage();
$lng=$lang->getTag();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $this->language; ?>" lang="<?php echo $this->language; ?>" dir="<?php echo $this->direction; ?>">
<head>
</head>
<body>
<?php
 
/*читаем поток. нет 301 редиректа */
if(($this->error->getCode()=='404') &($lng=="ru-RU")) {
	header("HTTP/1.0 404 Not Found");
	$url=JURI::root()."index.php?option=com_content&view=article&id=50";
	$data = file_get_contents($url) or die("Cannot open URL");
    echo $data; }
if(($this->error->getCode()=='404') &($lng=="en-GB")) {
	header("HTTP/1.0 404 Not Found");
	$url=JURI::root()."index.php?option=com_content&view=article&id=63";
	$data = file_get_contents($url) or die("Cannot open URL");
    echo $data; }    
 ?>
</body>
</html>

Пожалуйста Войдите или Зарегистрируйтесь, чтобы присоединиться к беседе.

6 года 7 мес. назад #8292 от Wedal
Liza, а если вот так:
<?php defined('_JEXEC') or die;
if (!isset($this->error))
{
	$this->error = JError::raiseWarning(404, JText::_('JERROR_ALERTNOAUTHOR'));
	$this->debug = false;
}
// Get language
$lang = JFactory::getLanguage();
$lng=$lang->getTag();
 
/*перенаправление*/
if (($this->_error->get('code') == '404') &($lng=="ru-RU")) {
    header("HTTP/1.0 404 Not Found");
    header('Location: index.php?option=com_content&view=article&id=50');
}elseif(($this->_error->get('code') == '404') &($lng=="en-GB")) {
    header("HTTP/1.0 404 Not Found");
	header('Location: index.php?option=com_content&view=article&id=63');
}
?>
Спасибо сказали: Liza

Пожалуйста Войдите или Зарегистрируйтесь, чтобы присоединиться к беседе.

6 года 7 мес. назад #8293 от Liza
Wedal, спасибо что откликнулись! Почти работает. Если поставить Ваш код один-в-один, то на белом экране выводится скромное сообщение
Article not found для английской версии,
и
Материал не найден для русской.

Пожалуйста Войдите или Зарегистрируйтесь, чтобы присоединиться к беседе.

6 года 7 мес. назад #8298 от Wedal
Liza, в код нужно подставить ссылки на ваши страницы 404. Кроме того, я не уверен, что страницы будут отдавать корректные ошибки 404. Проверьте через webmaster.yandex.ru/tools/server-response/ , чтобы возвращался код 404.

Пожалуйста Войдите или Зарегистрируйтесь, чтобы присоединиться к беседе.