Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...

Чтобы не было 404 на отключеный товар


 Поделиться

Рекомендованные сообщения

Страницы индексируются, но бывает товар мы выключаем, чтобы ошибки не росли да и человеку было приятней сделал такое решение:

catalogmodelcatalogproduct.php

переписываем функцию getProduct на

public function getProduct($product_id, $status = true) { //$status = true только включенные, $status - не учитывать статус
  if ($this->customer->isLogged()) {
   $customer_group_id = $this->customer->getCustomerGroupId();
  } else {
   $customer_group_id = $this->config->get('config_customer_group_id');
  }

		$r2_status = " AND r2.status = '1'";
		$r1_status = " AND r1.status = '1'";
		$p_status = " AND p.status = '1'";
		if (!$status) {
			$r2_status = '';
			$r1_status = '';
			$p_status = '';
		}
  
  $query = $this->db->query("SELECT DISTINCT *, pd.name AS name, p.image, m.name AS manufacturer,
  (SELECT price FROM " . DB_PREFIX . "product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '" . (int)$customer_group_id . "' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < NOW()) AND (pd2.date_end = '0000-00-00' OR pd2.date_end > NOW())) ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1) AS discount,
  (SELECT price FROM " . DB_PREFIX . "product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '" . (int)$customer_group_id . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special,
  (SELECT points FROM " . DB_PREFIX . "product_reward pr WHERE pr.product_id = p.product_id AND customer_group_id = '" . (int)$customer_group_id . "') AS reward,
  (SELECT ss.name FROM " . DB_PREFIX . "stock_status ss WHERE ss.stock_status_id = p.stock_status_id AND ss.language_id = '" . (int)$this->config->get('config_language_id') . "') AS stock_status,
  (SELECT wcd.unit FROM " . DB_PREFIX . "weight_class_description wcd WHERE p.weight_class_id = wcd.weight_class_id AND wcd.language_id = '" . (int)$this->config->get('config_language_id') . "') AS weight_class,
  (SELECT lcd.unit FROM " . DB_PREFIX . "length_class_description lcd WHERE p.length_class_id = lcd.length_class_id AND lcd.language_id = '" . (int)$this->config->get('config_language_id') . "') AS length_class,
  (SELECT AVG(rating) AS total FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = p.product_id $r1_status GROUP BY r1.product_id) AS rating,
  (SELECT GROUP_CONCAT( p2c2.category_id ) FROM `product_to_category` p2c2 WHERE p2c2.product_id = '".(int)$product_id."' GROUP BY p2c2.product_id) as cats,
  (SELECT COUNT(*) AS total FROM " . DB_PREFIX . "review r2 WHERE r2.product_id = p.product_id $r2_status GROUP BY r2.product_id) AS reviews,
  p.sort_order
  FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " . DB_PREFIX . "manufacturer m ON (p.manufacturer_id = m.manufacturer_id) WHERE p.product_id = '" . (int)$product_id . "' AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "' $p_status AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'");

  if ($query->num_rows) {
   $query->row['price'] = ($query->row['discount'] ? $query->row['discount'] : $query->row['price']);
   $query->row['rating'] = (int)$query->row['rating'];
			if ($query->row['cats']) {
				$query->row['cats'] = explode(',',$query->row['cats']);
			} else {
				$query->row['cats'] = array();
			}
   return $query->row;
  } else {
   return false;
  }
}

catalogcontrollerproductproduct.php

$product_info = $this->model_catalog_product->getProduct($product_id);

меняем на

$product_info = $this->model_catalog_product->getProduct($product_id,false);
$this->data['status'] = $product_info['status'];

ну и теперь правим шаблон как вам нужно

catalogviewthemedefaulttemplateproductproduct.tpl

все блоки вывода цены и купить я обернул в <?php if ($status) { ?> <?php } ?>

Ну и в одном else добавил

<div style="text-align:center;color:red;"><b>Нет в наличие</b>, по вопросам приобретения свяжитесь с нами любым способом из раздела <a href="/contact">контакты </a></div>

Пример:

Товар включен: http://menspro.ru/av...omobilnii-nabor

Товар отключен: http://menspro.ru/pr...na-s-nakleikami

Ссылка на комментарий
Поделиться на других сайтах

  • 2 недели спустя...

вопрос мой близок к заглавию темы:

почему после отключения (и даже удаления товаров) в мастерских Яндекса и Гугла эти страницы продолжают "висеть", и поисковики постоянно указывают мне на ошибки 404.

sitemap регулярно обновляю и подгружаю, я думал на его основании будет воссоздаваться картина всего сайта, а не на считанных роботами данных, которым более 3-6 месяцев.

это проблема opencart, или такая ситуация является естественной?

Ссылка на комментарий
Поделиться на других сайтах


  • 3 месяца спустя...

вопрос мой близок к заглавию темы:

почему после отключения (и даже удаления товаров) в мастерских Яндекса и Гугла эти страницы продолжают "висеть", и поисковики постоянно указывают мне на ошибки 404.

sitemap регулярно обновляю и подгружаю, я думал на его основании будет воссоздаваться картина всего сайта, а не на считанных роботами данных, которым более 3-6 месяцев.

это проблема opencart, или такая ситуация является естественной?

Бывает висит 6-8 месяцев, исчезнет надо ждать.

Ссылка на комментарий
Поделиться на других сайтах


Хороший костыль.

Может перелинковку на морду будет лучше?

Определённо!

Подскажите, пожалуйста, как сделать перелинковку на морду? благодарю :-)

Ссылка на комментарий
Поделиться на других сайтах


Чёт не совсем понял, а куда перебрасывыает эта доработка? Была карточка авто набора, а перебрасывает в очки для сна с наклейками. Поясните в чем смысл такого редиректа?

Ссылка на комментарий
Поделиться на других сайтах


А зачем товар отключать, если можно ему влепить статус Нет в наличии?

Можно но если товар снят с производства, клиенты продавца частенько достают, по поводу когда появится и тд.

Ссылка на комментарий
Поделиться на других сайтах


Можно но если товар снят с производства, клиенты продавца частенько достают, по поводу когда появится и тд.

Какие проблемы создать статус товара "Нет и не будет в наличии" или производное что-то

Ссылка на комментарий
Поделиться на других сайтах

Какие проблемы создать статус товара "Нет и не будет в наличии" или производное что-то

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

Ссылка на комментарий
Поделиться на других сайтах

  • 11 месяцев спустя...

Страницы индексируются, но бывает товар мы выключаем, чтобы ошибки не росли да и человеку было приятней сделал такое решение:

\catalog\model\catalog\product.php

переписываем функцию getProduct на

Пример:

Товар включен: http://menspro.ru/av...omobilnii-nabor

Товар отключен: http://menspro.ru/pr...na-s-nakleikami

 

Спасибо прекрасный способ! Все работает на 1.5.4.1

то что нужно!

Ссылка на комментарий
Поделиться на других сайтах


вообще-то по правилам status=0 это и есть 404.

если хотите что бы пользователь видел, что товара нет указывайте ему кол-во = 0, а в шаблоне "нет в наличии" вместо кнопки "купить"

Ссылка на комментарий
Поделиться на других сайтах

  • 2 месяца спустя...
  • 4 месяца спустя...

Спасибо, все работает.

 

Единственное я не смог вставить код 

<div style="text-align:center;color:red;"><b>Нет в наличие</b>, по вопросам приобретения свяжитесь с нами любым способом из раздела <a href="/contact">контакты </a></div>

 

Подскажите куда его вставлять!

Ссылка на комментарий
Поделиться на других сайтах


Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
 Поделиться

  • Сейчас на странице   0 пользователей

    • Нет пользователей, просматривающих эту страницу.
×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.