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

Скрыть производителя в списке брендов, в котором нет товаров


Recommended Posts

Нужно не выводить производителей в списке производителей (/manufacturers/ , manufacturer_list), у которых нету товаров.

Т.е товар этого производителя есть в админке, но он со статусом Отключен, но данный производитель в списке все равно выводится.

Если включенный товар есть у данного производителя - тогда выводим.

 

Нужно где-то проверку подправить.

 

Подскажите, как это реализовать?

 

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


Сделать "отключение производителя"

Т.е. немного переделать модель и табличку добавить статус - 500р

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

А зачем статусы для производителя добавлять? надо будет руками включать/выключать? По админке все ок (ничего добавлять не надо). Нельзя в контроллер/ tpl или еще куда-то проверить если в этом производителе товары, включены ли они? если да - то выводим данного производителя.

 

P.S - версия движка ocstore 1.5.5.1.2

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


А чтобы автоматом было - может в админке тогда сделать: если товар у производителя отключен (нет ни одного включенного) - то статус Отключен ставить, как только товар включили,  в производителе автоматом статус Включен ставим. Получается базу не грузим, верно?

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


Верно

 

Т.е. при сохранении товара - делать проверку на статус, количество товаров у производителя

 

Условно, это будет один редкий запрос, который не сыграет роли в нагрузке.

 

Но тем не менее это не снимает необходимости в доп поле.

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

Но тут ... а если старница производителя уже проиндексирована? что должно быть..

 

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

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

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

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


В таблицу oc_manufacturer добавляем поле statuses, как писал chukcha
В админке, в модели товара для методов add, edit, delete добавляем код

$res = $this->db->query("SELECT count(*) AS cnt FROM oc_product p WHERE p.status=1 AND p.manufacturer_id=" . (int)$data['manufacturer_id]);
$this->db->query("UPDATE oc_manufacturer m SET m.statuses = '" . (int)$res->row['cnt'] . "' WHERE m.manufacturer_id=" . (int)$data['manufacturer_id]);

В фронтенде, в модели производителя, метод getManufacturers добавляем условие AND m.stautses > 0

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


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

$res = $this->db->query("SELECT count(*) AS cnt FROM " . DB_PREFIX . "product p WHERE p.status=1 AND p.manufacturer_id= '" . (int)$data['manufacturer_id'] . "'");
$this->db->query("UPDATE " . DB_PREFIX . "manufacturer m SET m.statuses = '" . (int)$res->row['cnt'] . "' WHERE m.manufacturer_id = '" . (int)$data['manufacturer_id'] . "'");

В модели:

$sql = "SELECT * FROM " . DB_PREFIX . "manufacturer m LEFT JOIN " . DB_PREFIX . "manufacturer_description md ON (m.manufacturer_id = md.manufacturer_id) LEFT JOIN " . DB_PREFIX . "manufacturer_to_store m2s ON (m.manufacturer_id = m2s.manufacturer_id) WHERE m2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND md.language_id = '" . (int)$this->config->get('config_language_id') . "' AND m.statuses > 0";
Змінено користувачем cokol
Надіслати
Поділитися на інших сайтах


Вот, например, подкатегории. Они выводятся, если в них товары есть.

 

А если нет?

Если не выводятся - то как?

$res = $this->db->query("SELECT count(*) AS cnt FROM oc_product p WHERE p.status=1 AND p.manufacturer_id=" . (int)$data['manufacturer_id]);
$this->db->query("UPDATE oc_manufacturer m SET m.statuses = '" . (int)$res->row['cnt'] . "' WHERE m.manufacturer_id=" . (int)$data['manufacturer_id]);

Не совсем так

$res = $this->db->query("SELECT count(*), manufacturer_id AS cnt FROM oc_product p WHERE p.status=1 GROUP BY manufacurer_id HAVING count(*)> 0) ;
forech ($res->tows  as $row) {
$this->db->query("UPDATE oc_manufacturer m SET m.statuses = '0' WHERE m.manufacturer_id=" . (int)$row['manufacturer_id]);
}


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

 

А если нет?

Если не выводятся - то как?

 

Если товары есть в подкатегории - подкатегория отображается.  Если товаров нет в подкатегории - подкатегория не отображается. По крайней мере у меня так (на фронте).

Змінено користувачем cokol
Надіслати
Поділитися на інших сайтах


Значит у вас какая-то доработка..
И вы считаете количество товаров в категории, которые создают немалую нагрузку

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

Да нет, стоит ocstore 1.5.5.1.2, ничего не допиливали для этого.

 

В category.tpl вот это стоит:

<?php foreach ($categories as $category) { ?>
   <a href="<?php echo $category['href']; ?>" class="catname"><?php echo $category['name']; ?></a>
<?php } ?>

В контроллере category.php:

там где

$product_total = $this->model_catalog_product->getTotalProducts($data);	
					
$this->data['categories'][] = array(
  'name'  => $result['name'] . ($this->config->get('config_product_count') ? ' (' . $product_total . ')' : ''),
  'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '_' . $result['category_id'] . $url),
  'thumb' => $this->model_tool_image->resize(($result['image']=='' ? 'no_image.jpg' : $result['image']), $this->config->get('config_image_category_width'), $this->config->get('config_image_category_height'))
);

проверка стоит:

$product_total = $this->model_catalog_product->getTotalProducts($data);				
				
if($product_total>0){
					
$this->data['categories'][] = array(
  'name'  => $result['name'] . ($this->config->get('config_product_count') ? ' (' . $product_total . ')' : ''),
  'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '_' . $result['category_id'] . $url),
  'thumb' => $this->model_tool_image->resize(($result['image']=='' ? 'no_image.jpg' : $result['image']), $this->config->get('config_image_category_width'), $this->config->get('config_image_category_height'))
);

}

По идее это в стоковом опенкарте добавлено, просто проверку добавили видимо, поэтому значит и на стоковом нагрузка идет.

Змінено користувачем cokol
Надіслати
Поділитися на інших сайтах


Допил, но нагрузки от него же больше нету? У нас все равно по умолчанию в опенкарте берется кол-во $product_total = $this->model_catalog_product->getTotalProducts($data);    

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


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

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

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

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

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

Вхід

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

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

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

Important Information

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