Новости Joomla

0 Пользователей и 1 Гость просматривают эту тему.
  • 10 Ответов
  • 1286 Просмотров
*

tigra-uki

  • Давно я тут
  • 560
  • 11 / 0
  • Joom'лiстка
Всем привет!
Неоднократно использовала фреймворк 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, а не отображает ее содержимое по любому адресу, чего, я собственно пытаюсь добиться...
« Последнее редактирование: 13.07.2020, 19:46:20 от tigra-uki »
Слишком сконцентрированное внимание необходимо разбавлять действием.
*

tigra-uki

  • Давно я тут
  • 560
  • 11 / 0
  • Joom'лiстка
Продолжу свой монолог немного в новом ключе.
Использовала вот такой код для страницы ошибки

Код
<?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
defined( '_JEXEC' ) or die( 'Restricted access' );
if($this->error->getCode() == '404'){
    header("HTTP/1.1 404 Not Found");
    echo file_get_contents(JURI::root().'error-404');
    exit;
}
?>

поскольку, сайт у меня на двух языках, то я создала две страницы 404, обе с алиасом error-404,
создала пункты меню для них, но, все равно получаю все данные (модули и содержимое самой страницы 404) соответствующие первому установленному языку (без языкового префикса) какой бы язык я не выбрала...

делала так:

Код
<?php
defined( '_JEXEC' ) or die( 'Restricted access' );
if (($this->_error->getCode()) == '404') {
header("HTTP/1.0 404 Not Found");
header('Location: /index.php?option=com_content&view=article&id=42’);
exit;}

$pos = strpos($url, $lang);

if($pos){
$id = 46;
$lang = JFactory::getLanguage();
$lng=$lang->getTag();
if($lng=="ru-RU") $id=42;
}
if (($this->_error->getCode()) == '404') {
header("HTTP/1.0 404 Not Found");
header("Location: /index.php?option=com_content&view=article&id=$id");
exit;}
?>
не сработало

может у кого-то будут идеи? ;)
« Последнее редактирование: 22.07.2020, 20:44:48 от tigra-uki »
Слишком сконцентрированное внимание необходимо разбавлять действием.
*

NewUsers

  • Живу я здесь
  • 2307
  • 215 / 0
  • +375 (25) 627-16-99 (WhatsApp, Telegram)
Но вот, когда я написала: http://мойДомен/index.php?option=content&view=article&id=5
Имя компонента всегда начинается с префикса com_, а у вас его нет

может у кого-то будут идеи?
Я не буду вас отговаривать что это так не делается, но все же делайте хотя бы правильно.
Получайте содержимое материалов через класс таблицы или напрямую SQL запросом.
Переменная $this->language содержит префикс текущего языка, вот и используйте его что бы получить материал нужного языка....
Занимаюсь создание расширений для Joomla 3.10.x и 4.2.x | Доработка и настройка сайтов. Занимаюсь создание Интернет магазинов с нуля на собственном компоненте + оптимизация загрузки страницы (после предоставляю техподдержку).
Работа с DOM деревом на PHP
*

tigra-uki

  • Давно я тут
  • 560
  • 11 / 0
  • Joom'лiстка
Имя компонента всегда начинается с префикса com_, а у вас его нет
Я пребывала в уверенности (и даже все еще немного так думаю), что раз по этому адресу ничего нет, то оно должно было:
или кинуть на страницу ошибки 404 или перенаправить на ссылку ЧПУ. Иначе какой смысл, как мне кажется?

Цитировать
Я не буду вас отговаривать что это так не делается, но все же делайте хотя бы правильно
Ни в коем случае не спорю с Вами. Но я этот способ подсмотрела на одном очень известном сайте, где типа джумловодству учат, поэтому и подумать не могла, что это не правильно :(

Благодарю за ответ.

Слишком сконцентрированное внимание необходимо разбавлять действием.
*

NewUsers

  • Живу я здесь
  • 2307
  • 215 / 0
  • +375 (25) 627-16-99 (WhatsApp, Telegram)
что это неправильно
Это с моей точки зрения неправильно, но вы делаете так как вы считаете нужный (PHP все стерпит).

Я пребывала в уверенности (и даже все еще немного так думаю), что раз по этому адресу ничего нет, то оно должно было:
или кинуть на страницу ошибки 404 или перенаправить на ссылку ЧПУ. Иначе какой смысл, как мне кажется?
Сейчас если перейти по адресу будет ошибка (и какое содержимое будет выводиться)?
Занимаюсь создание расширений для Joomla 3.10.x и 4.2.x | Доработка и настройка сайтов. Занимаюсь создание Интернет магазинов с нуля на собственном компоненте + оптимизация загрузки страницы (после предоставляю техподдержку).
Работа с DOM деревом на PHP
*

tigra-uki

  • Давно я тут
  • 560
  • 11 / 0
  • Joom'лiстка
Это с моей точки зрения неправильно, но вы делаете так как вы считаете нужный (PHP все стерпит).
Да моя точка зрения, на самом деле, ничем не подкреплена, так что Ваша в данном случае я уверена - лучше.

Сейчас если перейти по адресу будет ошибка (и какое содержимое будет выводиться)?
Когда я начинала эту тему и писала что
Цитировать
то получила на белом экране:
"Error: Call to undefined method Joomla\CMS\Component\Exception\MissingComponentException::get(): Компонент не найден."
если вернуть старую страницу ошибки, то соотвественно выдает ее.

то я использовала указанный мной вариант изменений №1, теперь же я использовала конструкцию с 'error-404'
но проблема приобрела другой характер. Да, ссылка типа index.php?option=content&view=article&id=5 отдает мою страницу 404.
Но, как уже писала страница ошибки отображает весь сайт в русскоязычной версии, хотя ты используешь другой язык...

Извините, NewUsers, мне кажется, я создала дебри в своей же теме...:(
Слишком сконцентрированное внимание необходимо разбавлять действием.
*

NewUsers

  • Живу я здесь
  • 2307
  • 215 / 0
  • +375 (25) 627-16-99 (WhatsApp, Telegram)
Теперь с вообще смутно представляю что вы вообще хотите сделать!
Занимаюсь создание расширений для Joomla 3.10.x и 4.2.x | Доработка и настройка сайтов. Занимаюсь создание Интернет магазинов с нуля на собственном компоненте + оптимизация загрузки страницы (после предоставляю техподдержку).
Работа с DOM деревом на PHP
*

tigra-uki

  • Давно я тут
  • 560
  • 11 / 0
  • Joom'лiстка
Теперь с вообще смутно представляю что вы вообще хотите сделать!
я так и подозревала. Извините...
Итак, на данный момент я все еще использовала конструкцию:

Код
<?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
defined( '_JEXEC' ) or die( 'Restricted access' );
if($this->error->getCode() == '404'){
    header("HTTP/1.1 404 Not Found");
    echo file_get_contents(JURI::root().'error-404');
    exit;
}
?>
и она хоть как-то работала...

И теперь основные моменты такие:
1) если на сайте два языка, как получить две разные страницы ошибки на двух языках соотвественно?
p.s: смотрела тему здесь тема как раз - 2 разных страницы 404 для мультиязычного сайта, что-то сочинила по аналогии,
создала две страницы на двух языках, ссылки на них в служебном меню...
но не сработало...

2) скорее этот вопрос второстепенный уже и да я понимаю что это уже не про 404, но этот аспект проявился одновременно...
почему теперь при включенном ЧПУ и рабочей ссылке на материал, например, o-nas.html
он все равно доступен по ссылке, например index.php?option=com_content&view=article&id=2
разве он не должен перенаправляться на o-nas.html?


 
« Последнее редактирование: 23.07.2020, 13:03:45 от tigra-uki »
Слишком сконцентрированное внимание необходимо разбавлять действием.
*

NewUsers

  • Живу я здесь
  • 2307
  • 215 / 0
  • +375 (25) 627-16-99 (WhatsApp, Telegram)
если на сайте два языка, как получить две разные страницы ошибки на двух языках соотвественно?
Код: php
/**
 * @package     Joomla.Site
 * @subpackage  Templates.protostar
 *
 * [member=126442]copyright[/member]   Copyright (C) 2005 - 2020 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

defined('_JEXEC') or die();

use \Joomla\CMS\Factory;

$sef = substr($this->language, 0, 2);
$db = Factory::getDbo();

$query = $db->getQuery(true)
    ->select('introtext')->from('#__content as c')
    ->where('c.language = l.lang_code');

$query->innerJoin('#__languages as l ON l.sef = ' . $db->q($sef));

$db->setQuery($query);
echo $db->loadResult();
Это полный код файла error.php. Скопируйте код с 12 строки и до конца и вставьте в нужное место своего файла.
Да и еще, пункты меню для страниц 404 создавать не надо
Занимаюсь создание расширений для Joomla 3.10.x и 4.2.x | Доработка и настройка сайтов. Занимаюсь создание Интернет магазинов с нуля на собственном компоненте + оптимизация загрузки страницы (после предоставляю техподдержку).
Работа с DOM деревом на PHP
*

tigra-uki

  • Давно я тут
  • 560
  • 11 / 0
  • Joom'лiстка
если на сайте два языка, как получить две разные страницы ошибки на двух языках соотвественно?
Код: php
/**
 * @package     Joomla.Site
 * @subpackage  Templates.protostar
 *
 * @copyright   Copyright (C) 2005 - 2020 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

defined('_JEXEC') or die();

use \Joomla\CMS\Factory;

$sef = substr($this->language, 0, 2);
$db = Factory::getDbo();

$query = $db->getQuery(true)
    ->select('introtext')->from('#__content as c')
    ->where('c.language = l.lang_code');

$query->innerJoin('#__languages as l ON l.sef = ' . $db->q($sef));

$db->setQuery($query);
echo $db->loadResult();
Спасибо, NewUsers! Буду пробывать
Слишком сконцентрированное внимание необходимо разбавлять действием.
*

tigra-uki

  • Давно я тут
  • 560
  • 11 / 0
  • Joom'лiстка
К сожалению, предложеный код у меня не сработал. И скорее, что дело не в коде, а в каких-то моих ошибках.
Но, как говорится, есть и хорошие новости - в итоге я сделала страницу ошибки, отдающую код 404 и работающую на двух языках.
1) Пункты меню для страниц ошибки я по совету NewUsers отключила.
(может этот момент не важен, но мне попадались решения, где публикацию как раз советовали..)
2) Создала одну страницу 404 для обоих языков.
3) Разместила в ней вместо текста через loadposition модуль в позиции и создала два таких модуля с тектами на двух языках и публикацией для языка соотвественно.
4) Использовала родную конструкцию страницы ошибки из шаблона Helix3, добавила свои стили и все заработало.

Еще раз благодарю NewUsers за поддержку и время для решения моей проблемы.
Надеюсь, этот опыт со слегка запутанными объяснениями кому-то да пригодится :)

код своей рабочей страницы ошибки прилагаю
Код
<?php
/**
 * @package Helix3 Framework
 * Template Name - Shaper Helix - iii
 * @author JoomShaper http://www.joomshaper.com
 * 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.svg';
    $path = JPATH_ROOT . '/templates/' . $this->template . '/images/presets/preset1/logo.svg';
    $ratlogo = $this->baseurl . '/templates/' . $this->template . '/images/presets/preset1/logo@2x.svg';
}

//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">
<a  href="<?php echo $this->baseurl; ?>/">
<img class="error-logo" alt="logo" src="<?php echo $logo; ?>" />
</a>
</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>

<?php echo $doc->getBuffer('modules', '404', array('style' => 'sp_xhtml')); ?>
</div>
</div>
</div>
</body>
</html>


« Последнее редактирование: 23.07.2020, 13:11:57 от tigra-uki »
Слишком сконцентрированное внимание необходимо разбавлять действием.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Вопрос по настройке Helix3

Автор AleksS

Ответов: 644
Просмотров: 94511
Последний ответ 16.03.2023, 21:36:56
от SolopoV
Helix3 сделать несколько рядов не столбцов!

Автор Bowa

Ответов: 6
Просмотров: 2015
Последний ответ 04.03.2023, 20:33:40
от Petrovich
При обновлении плагина helix3 слетает сендвич в мобильном шаблоне

Автор gorbi_U

Ответов: 0
Просмотров: 1055
Последний ответ 25.01.2023, 10:55:44
от gorbi_U
Не сворачивается Offcanvas Menu Helix3, якорная ссылка. Landing Page - РЕШЕНО

Автор alekshavan

Ответов: 21
Просмотров: 3400
Последний ответ 15.10.2022, 10:18:46
от forsight
Helix3 - на смартфонах Offcanvas меню при клике остается

Автор nick71

Ответов: 9
Просмотров: 1466
Последний ответ 11.02.2022, 15:08:37
от nick71