Всем привет!
Неоднократно использовала фреймворк Helix3 и базовые бесплатные версии шаблонов от WarpTheme...
и вот, неожиданно (для себя) нашла такую ошибку.
В стандартных бесплатных шаблонах есть своя страница ошибки error.php, чаще всего она содержала логотип и кнопку "на главную".
Я создавала в материалах страницу 404, наполняла ее необходимым содержимым и заменяла error.php
на свою вот такую конструкцию:
вариант изменений №1<?php
defined ('_JEXEC') or die ('resticted aceess');
?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $this->language; ?>" lang="<?php echo $this->language; ?>" dir="<?php echo $this->direction; ?>">
<?php
if ($this->_error->get('code') == '404') {
header("HTTP/1.0 404 Not Found");
echo file_get_contents(JURI::root().'index.php?option=com_content&view=article&id=ТУТнеобходимыйID');
exit;} ?>
когда я писала http://мойДомен/тутКакиеУгодноБуквы/, то получала содержимое своей 404 страницы и, казалось, все хорошо.
Но вот, когда я написала: http://мойДомен/index.php?option=content&view=article&id=5
то получила на белом экране:
"
Error: Call to undefined method Joomla\CMS\Component\Exception\MissingComponentException::get(): Компонент не найден."
если вернуть старую страницу ошибки, то соотвественно выдает ее.
Посоветуйте, пожалуйста, в чем, по Вашему мнению может быть проблема?
Есть даже подозрение, что дело то и не в Helix3
на всякий случай содержимое "родного" error прилагаю.
<?php
/**
* @package Helix3 Framework
* Template Name - Shaper Helix - iii
* @author JoomShaper http://www.joomshaper.com
* [member=126442]copyright[/member] Copyright (c) 2010 - 2015 JoomShaper
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPLv2 or later
*/
//no direct accees
defined ('_JEXEC') or die ('resticted aceess');
$doc = JFactory::getDocument();
$params = JFactory::getApplication()->getTemplate('true')->params;
//Error Logo
if ($logo_image = $params->get('error_logo')) {
$logo = JURI::root(). '/' . $logo_image;
$path = JPATH_ROOT . '/' . $logo_image;
} else {
$logo = $this->baseurl . '/templates/' . $this->template . '/images/presets/preset1/logo.png';
$path = JPATH_ROOT . '/templates/' . $this->template . '/images/presets/preset1/logo.png';
$ratlogo = $this->baseurl . '/templates/' . $this->template . '/images/presets/preset1/logo@2x.png';
}
//Favicon
if($favicon = $params->get('favicon')) {
$doc->addFavicon( JURI::base(true). '/' . $favicon);
} else {
$doc->addFavicon( $this->baseurl . '/templates/' . $this->template . '/images/favicon.ico' );
}
//Stylesheets
$custom_css_path = JPATH_ROOT . '/templates/' . $this->template . '/css/custom.css';
if (file_exists($custom_css_path)) {
$doc->addStylesheet( $this->baseurl . '/templates/' . $this->template . '/css/custom.css' );
}
$doc->addStylesheet( $this->baseurl . '/templates/' . $this->template . '/css/bootstrap.min.css' );
$doc->addStylesheet( $this->baseurl . '/templates/' . $this->template . '/css/font-awesome.min.css' );
$doc->addStylesheet( $this->baseurl . '/templates/' . $this->template . '/css/template.css' );
$doc->setTitle($this->error->getCode(). ' - '.$this->title);
$header_contents = '';
if(!class_exists('JDocumentRendererHead')) {
$head = JPATH_LIBRARIES . '/joomla/document/html/renderer/head.php';
if(file_exists($head)) {
require_once($head);
}
}
$header_renderer = new JDocumentRendererHead($doc);
$header_contents = $header_renderer->render(null);
//background image
$error_bg = '';
$hascs_bg = '';
if ($err_bg = $params->get('error_bg')) {
$error_bg = JURI::root(). $err_bg;
$hascs_bg = 'has-background';
}
?>
<!DOCTYPE html>
<html class="error-page" xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $this->language; ?>" lang="<?php echo $this->language; ?>" dir="<?php echo $this->direction; ?>">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1">
<?php echo $header_contents; ?>
</head>
<body>
<div class="error-page-inner <?php echo $hascs_bg; ?>" style="background-image: url(<?php echo $error_bg; ?>);">
<div>
<div class="container">
<?php if(isset($logo) && $logo ) { ?>
<div class="error-logo-wrap">
<img class="error-logo" alt="logo" src="<?php echo $logo; ?>" />
</div>
<?php } else { ?>
<p><i class="fa fa-exclamation-triangle"></i></p>
<?php } ?>
<h1 class="error-code"><?php echo $this->error->getCode(); ?></h1>
<p class="error-message"><?php echo $this->error->getMessage(); ?></p>
<a class="thm-btn bg-cl-1" href="<?php echo $this->baseurl; ?>/" title="<?php echo JText::_('HOME'); ?>"><i class="fa fa-chevron-left"></i> <?php echo JText::_('HELIX_GO_BACK'); ?></a>
<?php echo $doc->getBuffer('modules', '404', array('style' => 'sp_xhtml')); ?>
</div>
</div>
</div>
</body>
</html>
p.s.: да в шаблонах не с Helix3 такая же ситуациявариант изменений №2И если пойти по другому пути - скопировать error.php из /templates/system и заменить
if (!isset($this->error))
{
$this->error = JError::raiseWarning(404, JText::_('JERROR_ALERTNOAUTHOR'));
$this->debug = false;
}
на
if (($this->error->getCode()) == '404')
{
header('Location: index.php?option=com_content&view=article&id=ТУТнеобходимыйID');
exit;
}
то проблемы нет, но, как я понимаю это не лучшая страница ошибки и в этом случае он просто отправляет пользователя на страницу 404, а не отображает ее содержимое по любому адресу, чего, я собственно пытаюсь добиться...