Григорий Опубликовано: октября 18, 2017 Жалоба Поделиться Опубликовано: октября 18, 2017 Интересует следующее, как скрыть товары во всех модулях и везде, которых нет в наличии, т.е. у которых кол-во стоит 0. Но чтобы товар открывался по своей полной ссылке, чтобы не вылетел из индекса поисковика. Например товар закончился, и он везде скрывался на сайте, но если на него зайти по по ссылке, то открывалось и показывалось что нет в наличии. Сейчас же, показываются все товары которые в наличии и которых нет в наличии. Так же товары которых нет в наличии, учавствуют в модулях, например модуль Акции, Рекомендуемые, Наиболее просматриваемые и тд тп. Цитата Ссылка на комментарий Поделиться на других сайтах Больше вариантов поделиться...
BuslikDrev Опубликовано: октября 18, 2017 Жалоба Поделиться Опубликовано: октября 18, 2017 Например, в категориях, подключается модель (запрос в БД) так: $results = $this->model_catalog_product->getProducts($filter_data); Смотрим запрос этот: В нём находим условие отвечающее за показ товара, когда статус включён: Скрытый текст AND p.status = '1' Заменяем на наш код с условием при котором он не показывается, в нашем случае выводить, когда статус "включён" и не ровняется статусу "нет в наличии". Скрытый текст AND p.status = '1' AND p.stock_status_id != '5' Цитата Ссылка на комментарий Поделиться на других сайтах Больше вариантов поделиться...
Григорий Опубликовано: октября 19, 2017 Автор Жалоба Поделиться Опубликовано: октября 19, 2017 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 Цитата Ссылка на комментарий Поделиться на других сайтах Больше вариантов поделиться...
Это популярное сообщение. BuslikDrev Опубликовано: октября 19, 2017 Это популярное сообщение. Жалоба Поделиться Опубликовано: октября 19, 2017 Товар и (или) новости в блоге 1 - catalog\model\blog\article.php 2 - catalog\model\blog\review.php Весь товар catalog\model\catalog\product.php Товар одного модуля catalog\model\extension\module\bestsellerpercategory.php Григорий и Nameless 2 Цитата Ссылка на комментарий Поделиться на других сайтах Больше вариантов поделиться...
Григорий Опубликовано: октября 19, 2017 Автор Жалоба Поделиться Опубликовано: октября 19, 2017 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 Цитата Ссылка на комментарий Поделиться на других сайтах Больше вариантов поделиться...
BuslikDrev Опубликовано: октября 19, 2017 Жалоба Поделиться Опубликовано: октября 19, 2017 Только что, Григорий сказал: Немного поспешил. Да, товары скрылись, но теперь если перейти на товар, написано что данный товар не найден, а должна показаться страница товара, и что просто его нет в наличии. https://yadi.sk/i/mdDjTkZ13Nu5YA заменять кроме запроса в public function getProduct($product_id) {catalog\model\catalog\product.php Цитата Ссылка на комментарий Поделиться на других сайтах Больше вариантов поделиться...
Григорий Опубликовано: октября 19, 2017 Автор Жалоба Поделиться Опубликовано: октября 19, 2017 Я знаете как сделал, я сделал всё автозаменой, и заменил все значения 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 Вот теперь всё заработало. И товары не показываются которых нет в наличии, и доступны по ссылке прямой! Огромное Вам спасибо!!! Цитата Ссылка на комментарий Поделиться на других сайтах Больше вариантов поделиться...
Это популярное сообщение. AWARO Опубликовано: октября 19, 2017 Это популярное сообщение. Жалоба Поделиться Опубликовано: октября 19, 2017 Только что, Григорий сказал: Вот теперь всё заработало. И товары не показываются которых нет в наличии, и доступны по ссылке прямой! Огромное Вам спасибо!!! давно валяется но по статусу с id9 меняете на свой и кайф hyper_status.ocmod.xml Crowmy, Dimasscus и mmmtrade 2 1 Цитата Ссылка на комментарий Поделиться на других сайтах Больше вариантов поделиться...
Григорий Опубликовано: октября 19, 2017 Автор Жалоба Поделиться Опубликовано: октября 19, 2017 В 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-> Картинки, логи и код убирайте под спойлер! Цитата Ссылка на комментарий Поделиться на других сайтах Больше вариантов поделиться...
AWARO Опубликовано: октября 26, 2017 Жалоба Поделиться Опубликовано: октября 26, 2017 В 19.10.2017 at 18:35, Григорий сказал: Ну я вот лично не видел, ищу смотрю читаю, и вот мне помог способ который выше. Данный файл который вы скинули, каким образом его устанавливать. У меня версия opencart_pro_2_3_0_2_3 , способ который выше работает для этой версии. То что вы скинули он для каких версий подходит? Ну естественно не видели, он у меня ж валяется) себе делал. устанавливать через установку дополнений если не зарабботает всегда можно вырубить Цитата Ссылка на комментарий Поделиться на других сайтах Больше вариантов поделиться...
Григорий Опубликовано: ноября 1, 2017 Автор Жалоба Поделиться Опубликовано: ноября 1, 2017 В 19.10.2017 at 18:31, AWARO сказал: давно валяется но по статусу с id9 меняете на свой и кайф hyper_status.ocmod.xml Объясните пожалуйста, как этим пользоваться, к примеру Статус есть в налчии у меня - 7, а статус Нет в наличии у меня - 5, что мне надо заменить в этом файле? Правильно ли я понял, что этот файл нужен чтобы скрыть товары которых нет в наличии? И что они не будут использоваться в модулях? Цитата Ссылка на комментарий Поделиться на других сайтах Больше вариантов поделиться...
AWARO Опубликовано: ноября 8, 2017 Жалоба Поделиться Опубликовано: ноября 8, 2017 В 01.11.2017 at 12:31, Григорий сказал: Объясните пожалуйста, как этим пользоваться, к примеру Статус есть в налчии у меня - 7, а статус Нет в наличии у меня - 5, что мне надо заменить в этом файле? Правильно ли я понял, что этот файл нужен чтобы скрыть товары которых нет в наличии? И что они не будут использоваться в модулях? при создании доп статуса например: Снят с производства - 9 и если = 0 Цитата Ссылка на комментарий Поделиться на других сайтах Больше вариантов поделиться...
mmmtrade Опубликовано: ноября 14, 2017 Жалоба Поделиться Опубликовано: ноября 14, 2017 а можно еще пару вопросов для непонятливых)) менять статус нужно в файле до установки? Товары скрываются и в категориях? хотелось бы скрыть только в модулях рекомендуемое, новинки, хиты продаж..... Цитата Ссылка на комментарий Поделиться на других сайтах Больше вариантов поделиться...
AWARO Опубликовано: ноября 20, 2017 Жалоба Поделиться Опубликовано: ноября 20, 2017 В 14.11.2017 at 10:53, mmmtrade сказал: а можно еще пару вопросов для непонятливых)) менять статус нужно в файле до установки? Товары скрываются и в категориях? хотелось бы скрыть только в модулях рекомендуемое, новинки, хиты продаж..... В рекомендуемых и в модулях в которых выводятся товары подобным образом не скрыть. Статус естественно id = статусу вашего id. если устанавливаете через встроенную установку то id нужно сменить на ваш если просто заливаете в папку system то там править легче вообще любые модификаторы Цитата Ссылка на комментарий Поделиться на других сайтах Больше вариантов поделиться...
Germango Опубликовано: февраля 18, 2021 Жалоба Поделиться Опубликовано: февраля 18, 2021 (изменено) В 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 Просьба помочь в решении задачи. Скрытый текст Скрытый текст product.php article.php review.php Картинки, логи и код прячем под спойлер! Изменено февраля 18, 2021 пользователем WarStyle Цитата Ссылка на комментарий Поделиться на других сайтах Больше вариантов поделиться...
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете опубликовать сейчас и зарегистрироваться позже. Если у вас есть учётная запись, войдите, чтобы публиковать под своей учётной записью.