Форум русской поддержки Joomla!® CMS
03.12.2016, 04:26:02 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

Ошибка 404

 (Прочитано 238 раз)
0 Пользователей и 1 Гость смотрят эту тему.
john.deff
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Пол: Мужской
Сообщений: 112



« : 16.10.2016, 20:08:07 »

Как сделать страницу с 404 ошибкой много чего написано, но что если главной страницей сделан самописный компонент?
Как тогда быть, как сделать вывод 404, есть у кого опыт?
Записан
dmitry_stas
Профи
********

Репутация: +794/-4
Offline Offline

Сообщений: 7732



« Ответ #1 : 17.10.2016, 00:02:19 »

а какая разница что есть главной страницей?
Записан
AlekVolsk
Профи
********

Репутация: +316/-3
Offline Offline

Пол: Мужской
Сообщений: 6452



« Ответ #2 : 17.10.2016, 01:52:52 »

в папке с шаблоном есть (должен быть) файл error.php - это и есть ваша страница 404, как хотите так и заверстывайте
Записан
Aleks.Denezh
Практически профи
*******

Репутация: +372/-4
Offline Offline

Пол: Мужской
Сообщений: 2762



« Ответ #3 : 17.10.2016, 02:32:30 »

В дефолтном контроллере у меня так:
Код
public function display( $cachable = false, $urlparams = [] ){
$menu = JMenu::getInstance( 'site' )->getActive();
$view = isset( $menu->query['view'] )? $menu->query['view'] : '';
if ( $view === 'home' ) {
if ( JLanguageMultilang::isEnabled() ) {
$language = JFactory::getLanguage();
$languages = JLanguageHelper::getLanguages( 'lang_code' );
$params = JComponentHelper::getParams( 'com_languages' );
$isHomePage = $language->getTag() === $params->get( 'site' )? JUri::base() === JUri::current() : JUri::base(). $languages[$language->getTag()]->sef === rtrim( JUri::current(), '/' );
if ( !$isHomePage ) throw new Exception( JText::_( 'COM_WSSCONTENT_404' ), 404 );
}
else {
if ( JUri::base()!== JUri::current() ) throw new Exception('Страница не найдена!', 404 );
}
}
return parent::display( $cachable, $urlparams );
}

Код рассчитан как на мультиязычную так и обычную версии сайта!
Обратите внимание на строку  $view === 'home'  вместо 'home' укажите вид который у вас завязан на главную страницу!
Записан
john.deff
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Пол: Мужской
Сообщений: 112



« Ответ #4 : 28.10.2016, 20:13:53 »

В дефолтном контроллере у меня так:
Код
public function display( $cachable = false, $urlparams = [] ){
$menu = JMenu::getInstance( 'site' )->getActive();
$view = isset( $menu->query['view'] )? $menu->query['view'] : '';
if ( $view === 'home' ) {
if ( JLanguageMultilang::isEnabled() ) {
$language = JFactory::getLanguage();
$languages = JLanguageHelper::getLanguages( 'lang_code' );
$params = JComponentHelper::getParams( 'com_languages' );
$isHomePage = $language->getTag() === $params->get( 'site' )? JUri::base() === JUri::current() : JUri::base(). $languages[$language->getTag()]->sef === rtrim( JUri::current(), '/' );
if ( !$isHomePage ) throw new Exception( JText::_( 'COM_WSSCONTENT_404' ), 404 );
}
else {
if ( JUri::base()!== JUri::current() ) throw new Exception('Страница не найдена!', 404 );
}
}
return parent::display( $cachable, $urlparams );
}

Код рассчитан как на мультиязычную так и обычную версии сайта!
Обратите внимание на строку  $view === 'home'  вместо 'home' укажите вид который у вас завязан на главную страницу!

мой код получается такой:
Код
public function display( $cachable = false, $urlparams = array() ){
       $menu = JMenu::getInstance( 'site' )->getActive();
       $view = isset( $menu->query['view'] )? $menu->query['view'] : '';
       if ( $view === 'object_list' ) {
           if ( JLanguageMultilang::isEnabled() ) {
               $language = JFactory::getLanguage();
               $languages = JLanguageHelper::getLanguages( 'lang_code' );
               $params = JComponentHelper::getParams( 'com_languages' );
               $isHomePage = $language->getTag() === $params->get( 'site' )? JUri::base() === JUri::current() : JUri::base(). $languages[$language->getTag()]->sef === rtrim( JUri::current(), '/' );
               if ( !$isHomePage ) throw new Exception( JText::_( 'COM_WSSCONTENT_404' ), 404 );
           }
           else {
               if ( JUri::base()!== JUri::current() ) throw new Exception('Страница не найдена!', 404 );
           }
       }
       return parent::display( $cachable, $urlparams );
   }
 

но после его установки, при переходе на любую страницу моего компонента, идёт переадресация на страницу 404
Записан
Septdir
Живу я здесь
******

Репутация: +31/-3
Offline Offline

Пол: Мужской
Сообщений: 811


Skype: septdir


« Ответ #5 : 28.10.2016, 20:24:17 »

но после его установки, при переходе на любую страницу моего компонента, идёт переадресация на страницу 404
Ну дык условие то какое.
Если страница не главная throw new Exception( JText::_( 'COM_WSSCONTENT_404' ), 404 ); А я так понял вам на оборот надо или что. Если наоборт тогда так. (код целиком не читал)
Код
if ( $isHomePage ) throw new Exception( JText::_( 'COM_WSSCONTENT_404' ), 404 );
Код
if ( JUri::base() == JUri::current() ) throw new Exception('Страница не найдена!', 404 );
Записан
Aleks.Denezh
Практически профи
*******

Репутация: +372/-4
Offline Offline

Пол: Мужской
Сообщений: 2762



« Ответ #6 : 29.10.2016, 11:49:56 »

но после его установки, при переходе на любую страницу моего компонента, идёт переадресация на страницу 404
Потому что код для завязки на главную страницу без каких либо переходов! Если у вас есть переходы он вам не подойдет, и вам тогда нужно будет все разбирать в роутере и делать кучу некрасивых в нем запросов )
Записан
john.deff
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Пол: Мужской
Сообщений: 112



« Ответ #7 : 29.10.2016, 12:18:01 »

Потому что код для завязки на главную страницу без каких либо переходов! Если у вас есть переходы он вам не подойдет, и вам тогда нужно будет все разбирать в роутере и делать кучу некрасивых в нем запросов )

почему же так много боли?
почему стандартный контент отрабатывает чётко, а самописное получается никак не запустить работать с обработкой страницы 404?
« Последнее редактирование: 29.10.2016, 13:41:14 от john.deff » Записан
vipiusss
Профи
********

Репутация: +260/-8
Offline Offline

Пол: Мужской
Сообщений: 4570


Skype: renor_


« Ответ #8 : 29.10.2016, 12:19:53 »

А в хтасесе не получается перенаправление сделать?

Типа такого?

ErrorDocument 401 http://www.сайт.ru/401.html
ErrorDocument 403 http://www.сайт.ru/403.html
ErrorDocument 404 http://www.сайт.ru/404.html
ErrorDocument 500 http://www.сайт.ru/500.html

// Или в таком виде ErrorDocument 404 /404.php
« Последнее редактирование: 29.10.2016, 12:27:30 от vipiusss » Записан
john.deff
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Пол: Мужской
Сообщений: 112



« Ответ #9 : 29.10.2016, 13:43:26 »

А в хтасесе не получается перенаправление сделать?

Типа такого?

ErrorDocument 401 http://www.сайт.ru/401.html
ErrorDocument 403 http://www.сайт.ru/403.html
ErrorDocument 404 http://www.сайт.ru/404.html
ErrorDocument 500 http://www.сайт.ru/500.html

// Или в таком виде ErrorDocument 404 /404.php

404 прекрасно отрабатывает со стандартным содержимым Joomla, а вот если свой компонент сделать главной страницей, то всё перестаёт работать как надо!
Ваш пример не даёт понимания CMS что делать в случае если пользователь вызвал не существующую страницу в вашем самописном компоненте
Записан
vipiusss
Профи
********

Репутация: +260/-8
Offline Offline

Пол: Мужской
Сообщений: 4570


Skype: renor_


« Ответ #10 : 29.10.2016, 13:49:51 »

А вы его не делайте главной.
Или у вас условие именно для главной?
Записан
john.deff
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Пол: Мужской
Сообщений: 112



« Ответ #11 : 29.10.2016, 13:51:17 »

А вы его не делайте главной.
Или у вас условие именно для главной?
мне нечего сказать на данное сообщение..
Записан
vipiusss
Профи
********

Репутация: +260/-8
Offline Offline

Пол: Мужской
Сообщений: 4570


Skype: renor_


« Ответ #12 : 29.10.2016, 14:00:19 »

А вы его не делайте главной.
Или у вас условие именно для главной?

Ну я просто подумал, может условие сделать для вашего компонента?

<?php if (JURI::current() == JURI::base()) : ?>
Я на главной
<?php endif; ?>

Или не на главной, я же не читал ваш код и цель кода и компонента.

Или уточнить материал ошибки по id <?php if($_GET['Itemid']==***)
Записан
john.deff
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Пол: Мужской
Сообщений: 112



« Ответ #13 : 31.10.2016, 19:14:01 »

Хорошо, решения нет..
а как вообще сделать обработку ошибки 404 ? пусть даже если самописный компонент установлен не главной страницей
Записан
dmitry_stas
Профи
********

Репутация: +794/-4
Offline Offline

Сообщений: 7732



« Ответ #14 : 31.10.2016, 19:59:24 »

расскажите что вы именно хотите сделать. задумку, а не попытки решения
Записан
Aleks.Denezh
Практически профи
*******

Репутация: +372/-4
Offline Offline

Пол: Мужской
Сообщений: 2762



« Ответ #15 : 31.10.2016, 20:42:12 »

почему стандартный контент отрабатывает чётко, а самописное получается никак не запустить работать с обработкой страницы 404?
Это вы сейчас пошутили про стандартный контент?)
Записан
john.deff
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Пол: Мужской
Сообщений: 112



« Ответ #16 : 31.10.2016, 20:58:19 »

расскажите что вы именно хотите сделать. задумку, а не попытки решения
Мне надо сделать ошибку 404 если пользователь пытается запросить страницу, которой нет в моём самописном компоненте
Записан
john.deff
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Пол: Мужской
Сообщений: 112



« Ответ #17 : 31.10.2016, 21:00:35 »

Это вы сейчас пошутили про стандартный контент?)

Ну... Эмм.. эээ нет)) дело в том, что стандартный функционал работает как надо, выдаёт 404.
 я не говорю об окне с красной рамкой, имею ввиду нормальную страницу 404 при наличии файла error.php в шаблоне о котором достаточно информации как реализовать
Записан
dmitry_stas
Профи
********

Репутация: +794/-4
Offline Offline

Сообщений: 7732



« Ответ #18 : 31.10.2016, 21:33:14 »

Мне надо сделать ошибку 404 если пользователь пытается запросить страницу, которой нет в моём самописном компоненте
чтобы отдать 404 достаточно сделать
Код:
throw new Exception( '', 404 );

задумка в чем? кто и как именно решает что этой страницы нет в вашем компоненте?
Записан
john.deff
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Пол: Мужской
Сообщений: 112



« Ответ #19 : 02.11.2016, 11:53:22 »

чтобы отдать 404 достаточно сделать
Код:
throw new Exception( '', 404 );

задумка в чем? кто и как именно решает что этой страницы нет в вашем компоненте?
например пользователь набрал не существующую категорию или материал
надо как-то определить, что выходит ошибка и делать переадресацию на 404
Записан
dmitry_stas
Профи
********

Репутация: +794/-4
Offline Offline

Сообщений: 7732



« Ответ #20 : 02.11.2016, 12:01:41 »

ну так у вас вопрос в чем? Azn в
Цитировать
надо как-то определить
? я и спрашиваю - кто и как у вас решает, что эта категория или материал не существует? роутер? контроллер? точка входа в компонент? кто?
Записан
john.deff
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Пол: Мужской
Сообщений: 112



« Ответ #21 : 02.11.2016, 12:15:20 »

ну так у вас вопрос в чем? Azn в? я и спрашиваю - кто и как у вас решает, что эта категория или материал не существует? роутер? контроллер? точка входа в компонент? кто?
нет ничего что бы определяло это, я не могу сообразить как это сделать
Записан
dmitry_stas
Профи
********

Репутация: +794/-4
Offline Offline

Сообщений: 7732



« Ответ #22 : 02.11.2016, 12:23:23 »

понятно. ну тогда давайте пойдем от обратного, и попытаемся ответить на вопрос, кто и как определяет, что такая страница (категория, материал) есть?
Записан
Aleks.Denezh
Практически профи
*******

Репутация: +372/-4
Offline Offline

Пол: Мужской
Сообщений: 2762



« Ответ #23 : 02.11.2016, 13:48:13 »

нет ничего что бы определяло это, я не могу сообразить как это сделать
То есть в компоненте как то определяется что у вас какая то категория или материал и потом выводится, а если запрос вернет null у вас ступор начинается?
Записан
Septdir
Живу я здесь
******

Репутация: +31/-3
Offline Offline

Пол: Мужской
Сообщений: 811


Skype: septdir


« Ответ #24 : 02.11.2016, 13:52:37 »

Ну коль уж начали разбираться, я тоже вклинюсь с позволения. Я бы хотел начать вообще с начала.
Что у вас за компонент, что выводим и как выводим?
Записан
dmitry_stas
Профи
********

Репутация: +794/-4
Offline Offline

Сообщений: 7732



« Ответ #25 : 02.11.2016, 14:59:48 »

если запрос вернет null у вас ступор начинается?
или что хуже - паника Azn ТС, ну собственно Aleks.Denezh уже даже сказал вам решение, к которому я вас подталкивал. определитесь, где получаете категорию/материл/etc, и если этого не смогли получить - значит вполне очевидно что это страницы нет

я еще бывает в точке входа в компонент делаю кой какие проверки, но это от структуры зависит, может вам и не нужно
« Последнее редактирование: 02.11.2016, 15:03:06 от dmitry_stas » Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet