Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

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


Recommended Posts

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

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 weeks later...

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

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

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

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

Надіслати
Поділитися на інших сайтах


  • 3 months later...

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

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

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

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

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

Надіслати
Поділитися на інших сайтах


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

Надіслати
Поділитися на інших сайтах


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

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

Надіслати
Поділитися на інших сайтах


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

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

Надіслати
Поділитися на інших сайтах

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

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

Надіслати
Поділитися на інших сайтах

  • 11 months later...

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

\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 months later...
  • 4 months later...

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

 

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

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

 

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

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.