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

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

VirtueMart 2 не выдаёт ошибку 404 при переходе на ссылку удалённого товара

 (Прочитано 394 раз)
0 Пользователей и 1 Гость смотрят эту тему.
igordyak67
Новичок
*

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

Сообщений: 3


« : 04.12.2015, 01:38:58 »

Уважаемые господа!

Перерыл ВСЁ! Требуется помощь, так как в интернете полного решения вопроса нет.

Суть в том, что в VM2 в связке с Joomla 2.5 изначально не выдавалась ошибка 404 при вводе некоректных URL типа: site.ru/asfasff, а перенаправляло на главную. С категориями товаров и главной страницей, вроде задачу решил путём вставки:

в /components/com_virtuemart/virtuemart.php, на строке 111, вместо

Код:
$mainframe->redirect(JRoute::_ ('index.php?option=com_virtuemart&view=virtuemart', FALSE));

Данный код:

Код:
JError::raise(E_ERROR,'404','Not found');
      $mainframe->close();

Но возник главный вопрос:

ЕСЛИ ТОВАР БЫЛ УДАЛЁН, ТО ПРИ ПЕРЕХОДЕ ПО ЕГО URL ССЫЛКА ПРЕОБРАЗУЕТСЯ В
site.ru/название_категории?error=404


Всё бы ничего, но мало того, что не выдаётся страница ошибки 404, поисковик получает неправильный сигнал 303. Начал смотреть решения в интернете, но таковых не оказалось, только поверхностно разбирались темы.

Вопрос с выдачей страницы error 404 решил, но сигнал всё равно передаётся неправильный.
Сделал следующее:

В templates\шаблон\html\com_virtuemart\category\default.php
Добавил после строки defined ('_JEXEC') or die('Restricted access'):

Код:
$input = JFactory::getApplication()->input;
if($input->getInt('error', 0) === 404)
{
JError::raise(E_ERROR,'404','Not found');
    $mainframe->close();
}

Так как программирование знаю поверхностно, даже это далось с большим трудом. Моя задача всё-таки заставить выдавать сигнал поисковику error 404, при переходе на удалённый товар.

ПРИЛАГАЮ ИЗОБРАЖЕНИЕ С ТАКОЙ ЖЕ ПРОБЛЕМОЙ. На нём видно, что по ссылке /женская_одежда/штаны?error=404 находился товар, который ранее располагался по адресу /женская_одежда/штаны/товар

Форумчане, возможно кто-то сталкивался с таким вопросом, я уже потерял надежду решить его.

Записан
robert
Профи
********

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

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


« Ответ #1 : 04.12.2015, 02:12:38 »

А так, в лоб,
Код
ob_end_clean();
header("HTTP/1.0 404 Not Found");
include '404.php';
exit();
 
не катит?
Записан
igordyak67
Новичок
*

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

Сообщений: 3


« Ответ #2 : 04.12.2015, 10:27:05 »

Протестировал, предложенный вариант, выводит белый экран, категории перестают работать.
В варианте, который я описал страница 404 выдаётся, но выдаётся сигнал 303 на странице site.ru/категория/удалённый_товар и перенаправляет на site.ru/категория?error=404 при этом уже выдаётся ошибка 404. Интересно как сделать, чтобы на странице site.ru/категория/удалённый_товар сразу выдавалась 404.

Код:
В templates\шаблон\html\com_virtuemart\category\default.php
Добавил после строки defined ('_JEXEC') or die('Restricted access'):

Код:

$input = JFactory::getApplication()->input;
if($input->getInt('error', 0) === 404)
{
JError::raise(E_ERROR,'404','Not found');
    $mainframe->close();
}
Записан
robert
Профи
********

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

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


« Ответ #3 : 04.12.2015, 12:12:50 »

Протестировал, предложенный вариант, выводит белый экран
А 404.php существует?
Записан
igordyak67
Новичок
*

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

Сообщений: 3


« Ответ #4 : 04.12.2015, 12:21:02 »

Файл error.php существует стандартный, в папке с шаблоном. Возможно стоит в моём случае прописать такой код:
Код:
ob_end_clean();
header("HTTP/1.0 404 Not Found");
include 'error.php';
exit();

Я так понял его нужно поместить вместо

Код:
$input = JFactory::getApplication()->input;
if($input->getInt('error', 0) === 404)
{
JError::raise(E_ERROR,'404','Not found');
    $mainframe->close();
}

или заменить в /components/com_virtuemart/virtuemart.php, на строке 111?

вместо
Код:
JError::raise(E_ERROR,'404','Not found');
      $mainframe->close();

Ваш код говорит
Если заголовок HTTP/1.0 404 Not Found, то выдавай error.php. Правильно?

Если нет, нужно ли что-то добавлять к данному коду типа if($input->getInt('error', 0) === 404)

Благодарю за проявление интереса к моему вопросу.
« Последнее редактирование: 04.12.2015, 12:32:55 от igordyak67 » Записан
robert
Профи
********

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

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


« Ответ #5 : 04.12.2015, 12:39:39 »

Ваш код говорит
Если заголовок HTTP/1.0 404 Not Found, то выдавай error.php. Правильно?
Нет, он просто отправляет код 404 и заодно показывает error.php, без каких-либо условий.
Записан
Страниц: [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