Основной курс по Joomla
0 Пользователей и 1 Гость просматривают эту тему.
  • 5 Ответов
  • 723 Просмотров
*

igordyak67

  • Новичок
  • *
  • 3
  • 0
Уважаемые господа!

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

Суть в том, что в 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

  • Профи
  • ********
  • 4009
  • 371
А так, в лоб,
Код: php-brief
ob_end_clean();
header("HTTP/1.0 404 Not Found");
include '404.php';
exit();
не катит?
  • Не будь паразитом, сделай что-нибудь самостоятельно!
  • В личке и по Skype не даю советов.
*

igordyak67

  • Новичок
  • *
  • 3
  • 0
Протестировал, предложенный вариант, выводит белый экран, категории перестают работать.
В варианте, который я описал страница 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

  • Профи
  • ********
  • 4009
  • 371
Протестировал, предложенный вариант, выводит белый экран
А 404.php существует?
  • Не будь паразитом, сделай что-нибудь самостоятельно!
  • В личке и по Skype не даю советов.
*

igordyak67

  • Новичок
  • *
  • 3
  • 0
Файл 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, 13:32:55 от igordyak67 »
*

robert

  • Профи
  • ********
  • 4009
  • 371
Ваш код говорит
Если заголовок HTTP/1.0 404 Not Found, то выдавай error.php. Правильно?
Нет, он просто отправляет код 404 и заодно показывает error.php, без каких-либо условий.
  • Не будь паразитом, сделай что-нибудь самостоятельно!
  • В личке и по Skype не даю советов.