COVID2019 и это вот все. Друзья, вся эта история начинает плохо пахнет. Мойте руки, не ходите в люди. Отложите все плановые покупки и положите в носок заначку. Заприте ваших родителей, бабушек-дедушек на даче. Лучше перебдеть чем недобдеть. Берегите себя!

Как скрыть товары которых Нет в наличии, но чтобы были доступны по ссылке?


Recommended Posts

Интересует следующее, как скрыть товары во всех модулях и везде, которых нет в наличии, т.е. у которых кол-во стоит 0. 

Но чтобы товар открывался по своей полной ссылке, чтобы не вылетел из индекса поисковика. 

 

Например товар закончился, и он везде скрывался на сайте, но если на него зайти по по ссылке, то открывалось и показывалось что нет в наличии. 

 

Сейчас же, показываются все товары которые в наличии и которых нет в наличии. Так же товары которых нет в наличии, учавствуют в модулях, например модуль Акции, Рекомендуемые, Наиболее просматриваемые и тд тп.

 

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

Например, в категориях, подключается модель (запрос в БД) так:
$results = $this->model_catalog_product->getProducts($filter_data);

Смотрим запрос этот:

В нём находим условие отвечающее за показ товара, когда статус включён:

Скрытый текст

AND p.status = '1'


Заменяем на наш код с условием при котором он не показывается, в нашем случае выводить, когда статус "включён" и не ровняется статусу "нет в наличии".

Скрытый текст

AND p.status = '1' AND p.stock_status_id != '5'

 

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

21 час назад, BuslikDrev сказал:

Например, в категориях, подключается модель (запрос в БД) так:
$results = $this->model_catalog_product->getProducts($filter_data);

Смотрим запрос этот:

В нём находим условие отвечающее за показ товара, когда статус включён:

  Скрыть содержимое

AND p.status = '1'


Заменяем на наш код с условием при котором он не показывается, в нашем случае выводить, когда статус "включён" и не ровняется статусу "нет в наличии".

  Скрыть содержимое

AND p.status = '1' AND p.stock_status_id != '5'

 

 

А где именно смотреть это? 

В каком файле?

 

Сделал поиск по файлам, и нашёл данный параметр в 17 файлах. Специально их пронумеровал. 

Если кое где делать замену, то да, как раз товары перестают показывать и всё как надо работает. 

 

НО вот надо ли во всех файлах делать замену? Просто может какие то файлы отвечают за отображение товаров в админке или ещё где, и они перестанут показываться там где надо.

 

Не могли бы подсказать, в каких именно файлах сделать замену, я для удобства их пронумеровал.

Скрытый текст

1 - catalog\model\blog\article.php

2 - catalog\model\blog\review.php

3 - catalog\model\catalog\aridiusprreview.php

4 - catalog\model\catalog\aridiusreviewnews.php

5 - catalog\model\catalog\cms.php

6 - catalog\model\catalog\pro.php

7 - catalog\model\catalog\product.php

8 - catalog\model\catalog\review.php

9 - catalog\model\extension\feed\sitemap_pro.php

10 - catalog\model\extension\feed\yandex_market.php

11 - catalog\model\extension\module\bestsellerpercategory.php

12 - system\aridius_review_pr.ocmod.xml

13 - system\livesearch.ocmod.xml

14 - system\library\cart\cart.php

15 - system\storage\logs\ocmod.log

16 - system\storage\modification\catalog\model\catalog\product.php

17 - system\storage\modification\catalog\model\catalog\review.php

 

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

3 часа назад, BuslikDrev сказал:

Товар и (или) новости в блоге

1 - catalog\model\blog\article.php

2 - catalog\model\blog\review.php

 

Весь товар

catalog\model\catalog\product.php

 

Товар одного модуля

catalog\model\extension\module\bestsellerpercategory.php

 

Заработало. Огромное Вам спасибо. На форуме как будто только вы отвечаете. 

 

На самом деле, теперь всё работает.

 

Немного поспешил. Да, товары скрылись, но теперь если перейти на товар, написано что данный товар не найден, а должна показаться страница товара, и что просто его нет в наличии. https://yadi.sk/i/mdDjTkZ13Nu5YA

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

Только что, Григорий сказал:

 

Немного поспешил. Да, товары скрылись, но теперь если перейти на товар, написано что данный товар не найден, а должна показаться страница товара, и что просто его нет в наличии. https://yadi.sk/i/mdDjTkZ13Nu5YA

заменять кроме запроса в     public function getProduct($product_id) {
catalog\model\catalog\product.php

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

Я знаете как сделал, я сделал всё автозаменой, и заменил все значения AND p.status = '1' на AND p.status = '1' AND p.stock_status_id != '5' , в этих файлах:

Товар и (или) новости в блоге

1 - catalog\model\blog\article.php

2 - catalog\model\blog\review.php

 

Весь товар

catalog\model\catalog\product.php

 

Товар одного модуля

catalog\model\extension\module\bestsellerpercategory.php

 

Может надо сделать замену только в определённых местах.

 

2 часа назад, BuslikDrev сказал:

заменять кроме запроса в     public function getProduct($product_id) {
catalog\model\catalog\product.php

 

Вот теперь всё заработало.  И товары не показываются которых нет в наличии, и доступны по ссылке прямой! Огромное Вам спасибо!!!

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

В 19.10.2017 at 18:31, AWARO сказал:

hyper_status.ocmod.xml

давно валяется

hyper_status.ocmod.xml

Ну я вот лично не видел, ищу смотрю читаю, и вот мне помог способ который выше. 

Данный файл который вы скинули, каким образом его устанавливать. 

У меня версия opencart_pro_2_3_0_2_3 , способ который выше работает для этой версии. 

То что вы скинули он для каких версий подходит?

Не знаю что случилось, последнее что сделал это замену как написал выше. 

И теперь сайт упал: 500 ошибка.

В логах:

Скрытый текст

[Thu Oct 19 18:49:27.428972 2017] [:error] [pid 18604] [client 188.187.196.41:36308] PHP Fatal error:  Uncaught exception 'Exception' with message 'Error: Unknown column 'p.stock_status_id' in 'where clause'<br />Error No: 1054<br />SELECT COUNT(DISTINCT p.article_id) AS total FROM oc_article p LEFT JOIN oc_article_description pd ON (p.article_id = pd.article_id) LEFT JOIN oc_article_to_store p2s ON (p.article_id = p2s.article_id) LEFT JOIN oc_article_to_blog_category p2c ON (p.article_id = p2c.article_id) WHERE pd.language_id = '1' AND p.status = '1' AND p.stock_status_id != '5' AND p.date_available <= NOW() AND p2s.store_id = '0' AND p2c.blog_category_id = '71'' in /var/www/griga9999/data/www/hna-tatu.ru/system/library/db/mysqli.php:45\nStack trace:\n#0 /var/www/griga9999/data/www/hna-tatu.ru/system/library/db.php(21): DB\\MySQLi->query('SELECT COUNT(DI...', Array)\n#1 /var/www/griga9999/data/www/hna-tatu.ru/catalog/model/blog/article.php(425): DB->query('SELECT COUNT(DI...')\n#2 [internal function]: ModelBlogArticle->getTotalArticles(Array)\n#3 /var/www/griga9999/data/www/hna-tatu.ru/system/storage/modification/s in /var/www/griga9999/data/www/hna-tatu.ru/system/library/db/mysqli.php on line 45, referer: http://hna-tatu.ru/

Связанно ли это как то с этими изменениями? 

Я вообще ничего не делал, всё работало и теперь такая ошибка. 

 

Нашёл, это из за изменений в файле - catalog\model\blog\article.php

Теперь вопрос, надо ли в этом файле что либо менять?

Скрытый текст

<?php
// *	@copyright	OPENCART.PRO 2011 - 2017.
// *	@forum	http://forum.opencart.pro
// *	@source		See SOURCE.txt for source and other copyright.
// *	@license	GNU General Public License version 3; see LICENSE.txt

class ModelBlogArticle extends Model {
	public function updateViewed($article_id) {
		$this->db->query("UPDATE " . DB_PREFIX . "article SET viewed = (viewed + 1) WHERE article_id = '" . (int)$article_id . "'");
	}
	
	public function getArticle($article_id) {
		if ($this->customer->isLogged()) {
			$customer_group_id = $this->customer->getGroupId();
		} else {
			$customer_group_id = $this->config->get('config_customer_group_id');
		}	
				
		$query = $this->db->query("SELECT DISTINCT *, pd.name AS name, p.image, (SELECT AVG(rating) AS total FROM " . DB_PREFIX . "review_article r1 WHERE r1.article_id = p.article_id AND r1.status = '1' GROUP BY r1.article_id) AS rating, (SELECT COUNT(*) AS total FROM " . DB_PREFIX . "review_article r2 WHERE r2.article_id = p.article_id AND r2.status = '1' GROUP BY r2.article_id) AS reviews, p.sort_order FROM " . DB_PREFIX . "article p LEFT JOIN " . DB_PREFIX . "article_description pd ON (p.article_id = pd.article_id) LEFT JOIN " . DB_PREFIX . "article_to_store p2s ON (p.article_id = p2s.article_id)  WHERE p.article_id = '" . (int)$article_id . "' AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'");
		
		if ($query->num_rows) {
			return array(
				'meta_title'       => $query->row['meta_title'],
				'noindex'          => $query->row['noindex'],
				'meta_h1'          => $query->row['meta_h1'],
				'article_id'       => $query->row['article_id'],
				'name'             => $query->row['name'],
				'description'      => $query->row['description'],
				'meta_description' => $query->row['meta_description'],
				'meta_keyword'     => $query->row['meta_keyword'],
				'image'            => $query->row['image'],
				'rating'           => round($query->row['rating']),
				'reviews'          => $query->row['reviews'],
				'sort_order'       => $query->row['sort_order'],
				'article_review'   => $query->row['article_review'],
				'status'           => $query->row['status'],
				'gstatus'           => $query->row['gstatus'],
				'date_added'       => $query->row['date_added'],
				'date_modified'    => $query->row['date_modified'],
				'viewed'           => $query->row['viewed']
			);
		} else {
			return false;
		}
	}

	public function getArticles($data = array()) {
		if ($this->customer->isLogged()) {
			$customer_group_id = $this->customer->getGroupId();
		} else {
			$customer_group_id = $this->config->get('config_customer_group_id');
		}	
		
		$cache = md5(http_build_query($data));
		
		$article_data = $this->cache->get('article.' . (int)$this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id') . '.' . (int)$customer_group_id . '.' . $cache);
		
		if (!$article_data) {
			$sql = "SELECT p.article_id, (SELECT AVG(rating) AS total FROM " . DB_PREFIX . "review_article r1 WHERE r1.article_id = p.article_id AND r1.status = '1' GROUP BY r1.article_id) AS rating FROM " . DB_PREFIX . "article p LEFT JOIN " . DB_PREFIX . "article_description pd ON (p.article_id = pd.article_id) LEFT JOIN " . DB_PREFIX . "article_to_store p2s ON (p.article_id = p2s.article_id)"; 
						
			if (!empty($data['filter_category_id'])) {
				$sql .= " LEFT JOIN " . DB_PREFIX . "article_to_blog_category p2c ON (p.article_id = p2c.article_id)";			
			}
			
			$sql .= " WHERE pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'"; 
			
			if (!empty($data['filter_name']) || !empty($data['filter_tag'])) {
				$sql .= " AND (";
				
				if (!empty($data['filter_name'])) {					
					if (!empty($data['filter_description'])) {
						$sql .= "LCASE(pd.name) LIKE '%" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "%' OR MATCH(pd.description) AGAINST('" . $this->db->escape(utf8_strtolower

 

Нашёл, это из за изменений в файле - catalog\model\blog\article.php

Теперь вопрос, надо ли в этом файле что либо менять?

Скрытый текст

<?php
// *	@copyright	OPENCART.PRO 2011 - 2017.
// *	@forum	http://forum.opencart.pro
// *	@source		See SOURCE.txt for source and other copyright.
// *	@license	GNU General Public License version 3; see LICENSE.txt

class ModelBlogArticle extends Model {
	public function updateViewed($article_id) {
		$this->db->query("UPDATE " . DB_PREFIX . "article SET viewed = (viewed + 1) WHERE article_id = '" . (int)$article_id . "'");
	}
	
	public function getArticle($article_id) {
		if ($this->customer->isLogged()) {
			$customer_group_id = $this->customer->getGroupId();
		} else {
			$customer_group_id = $this->config->get('config_customer_group_id');
		}	
				
		$query = $this->db->query("SELECT DISTINCT *, pd.name AS name, p.image, (SELECT AVG(rating) AS total FROM " . DB_PREFIX . "review_article r1 WHERE r1.article_id = p.article_id AND r1.status = '1' GROUP BY r1.article_id) AS rating, (SELECT COUNT(*) AS total FROM " . DB_PREFIX . "review_article r2 WHERE r2.article_id = p.article_id AND r2.status = '1' GROUP BY r2.article_id) AS reviews, p.sort_order FROM " . DB_PREFIX . "article p LEFT JOIN " . DB_PREFIX . "article_description pd ON (p.article_id = pd.article_id) LEFT JOIN " . DB_PREFIX . "article_to_store p2s ON (p.article_id = p2s.article_id)  WHERE p.article_id = '" . (int)$article_id . "' AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'");
		
		if ($query->num_rows) {
			return array(
				'meta_title'       => $query->row['meta_title'],
				'noindex'          => $query->row['noindex'],
				'meta_h1'          => $query->row['meta_h1'],
				'article_id'       => $query->row['article_id'],
				'name'             => $query->row['name'],
				'description'      => $query->row['description'],
				'meta_description' => $query->row['meta_description'],
				'meta_keyword'     => $query->row['meta_keyword'],
				'image'            => $query->row['image'],
				'rating'           => round($query->row['rating']),
				'reviews'          => $query->row['reviews'],
				'sort_order'       => $query->row['sort_order'],
				'article_review'   => $query->row['article_review'],
				'status'           => $query->row['status'],
				'gstatus'           => $query->row['gstatus'],
				'date_added'       => $query->row['date_added'],
				'date_modified'    => $query->row['date_modified'],
				'viewed'           => $query->row['viewed']
			);
		} else {
			return false;
		}
	}

	public function getArticles($data = array()) {
		if ($this->customer->isLogged()) {
			$customer_group_id = $this->customer->getGroupId();
		} else {
			$customer_group_id = $this->config->get('config_customer_group_id');
		}	
		
		$cache = md5(http_build_query($data));
		
		$article_data = $this->cache->get('article.' . (int)$this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id') . '.' . (int)$customer_group_id . '.' . $cache);
		
		if (!$article_data) {
			$sql = "SELECT p.article_id, (SELECT AVG(rating) AS total FROM " . DB_PREFIX . "review_article r1 WHERE r1.article_id = p.article_id AND r1.status = '1' GROUP BY r1.article_id) AS rating FROM " . DB_PREFIX . "article p LEFT JOIN " . DB_PREFIX . "article_description pd ON (p.article_id = pd.article_id) LEFT JOIN " . DB_PREFIX . "article_to_store p2s ON (p.article_id = p2s.article_id)"; 
						
			if (!empty($data['filter_category_id'])) {
				$sql .= " LEFT JOIN " . DB_PREFIX . "article_to_blog_category p2c ON (p.article_id = p2c.article_id)";			
			}
			
			$sql .= " WHERE pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'"; 
			
			if (!empty($data['filter_name']) || !empty($data['filter_tag'])) {
				$sql .= " AND (";
				
				if (!empty($data['filter_name'])) {					
					if (!empty($data['filter_description'])) {
						$sql .= "LCASE(pd.name) LIKE '%" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "%' OR MATCH(pd.description) AGAINST('" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "')";
					} else {
						$sql .= "LCASE(pd.name) LIKE '%" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "%'";
					}
				}
				
				if (!empty($data['filter_name']) && !empty($data['filter_tag'])) {
					$sql .= " OR ";
				}
				
				if (!empty($data['filter_tag'])) {
					$sql .= "MATCH(pd.tag) AGAINST('" . $this->db->escape(utf8_strtolower($data['filter_tag'])) . "')";
				}
			
				$sql .= ")";
				
				if (!empty($data['filter_name'])) {
					$sql .= " OR LCASE(p.model) = '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "'";
				}
				
				if (!empty($data['filter_name'])) {
					$sql .= " OR LCASE(p.sku) = '" . $this->db->

 

 

Картинки, логи и код убирайте под спойлер!

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

В 19.10.2017 at 18:35, Григорий сказал:

Ну я вот лично не видел, ищу смотрю читаю, и вот мне помог способ который выше. 

Данный файл который вы скинули, каким образом его устанавливать. 

У меня версия opencart_pro_2_3_0_2_3 , способ который выше работает для этой версии. 

То что вы скинули он для каких версий подходит?

Ну естественно не видели, он у меня ж валяется) себе делал.
устанавливать через установку дополнений
если не зарабботает всегда можно вырубить

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

В 19.10.2017 at 18:31, AWARO сказал:

 

давно валяется

но по статусу  с id9 меняете на свой и кайф

hyper_status.ocmod.xml

 

Объясните пожалуйста, как этим пользоваться, к примеру Статус есть в налчии у меня - 7, а статус Нет в наличии у меня - 5, что мне надо заменить в этом файле? 

 

Правильно ли я понял, что этот файл нужен чтобы скрыть товары которых нет в наличии? И что они не будут использоваться в модулях? 

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

В 01.11.2017 at 12:31, Григорий сказал:

 

Объясните пожалуйста, как этим пользоваться, к примеру Статус есть в налчии у меня - 7, а статус Нет в наличии у меня - 5, что мне надо заменить в этом файле? 

 

Правильно ли я понял, что этот файл нужен чтобы скрыть товары которых нет в наличии? И что они не будут использоваться в модулях? 

при создании доп статуса например: Снят с производства - 9 и если = 0
 

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

а можно еще пару вопросов для непонятливых))

  1. менять статус нужно в файле до установки?
  2. Товары скрываются и в категориях? хотелось бы скрыть только в модулях рекомендуемое, новинки, хиты продаж.....
Ссылка на комментарий
Поделиться на других сайтах

В 14.11.2017 at 10:53, mmmtrade сказал:

а можно еще пару вопросов для непонятливых))

  1. менять статус нужно в файле до установки?
  2. Товары скрываются и в категориях? хотелось бы скрыть только в модулях рекомендуемое, новинки, хиты продаж.....

В рекомендуемых и в модулях в которых выводятся товары подобным образом не скрыть.
Статус естественно id = статусу вашего id.
если устанавливаете через встроенную установку то id нужно сменить на ваш
если просто заливаете в папку system то там править легче вообще любые модификаторы

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

  • 3 years later...
В 19.10.2017 at 18:21, BuslikDrev сказал:

заменять кроме запроса в     public function getProduct($product_id) {
catalog\model\catalog\product.php

Здравствуйте, появилась аналогичная задача. Пробую сделать по вашей инструкции:

 

в файлах

1 - catalog\model\blog\article.php

2 - catalog\model\blog\review.php

заменил AND p.status = '1' на AND p.status = '1' AND p.stock_status_id != '5'

 

в файле 

3 - catalog\model\catalog\product.php

заменил AND p.status = '1' на AND p.status = '1' AND p.stock_status_id != '5' кроме public function getProduct($product_id)

 

Но после внесения изменений ВСЕ карточки товаров (и в наличии и нет в наличии) перестают открываться - 500 ошибка (скрин в прил).

А на странице категории - всё нормально, отображаются товары которые есть в наличии, а которых нет в наличии не отображаются.

 

Версия ocStore 3.0.2.0

Просьба помочь в решении задачи.

 

Скрытый текст

1802-1.png

 

 

Скрытый текст

1802-2.png

 

product.php article.php review.php

 

Картинки, логи и код прячем под спойлер!

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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

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

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