Opencart - Как Не Показывать Какой-либо Товар В Списке На Странице Производителей?

Тема в разделе "Общие вопросы", создана пользователем admin, 3 июл 2016.

  1. TopicStarter Overlay
    Offline

    admin Команда форума Администратор

    Сообщения:
    2.328
    Симпатии:
    77.309
    Репутация:
    170
    Работая с одним нашим клиентом пришли к необходимости скрыть часть дополнительных товаров какого-либо производителя на странице производителей. Такое разумно, если эти товары могут отвлекать и сбивать покупателя, например, если это аксессуары к основному товару, которые в принципе и не интересуют человека, пока он не определился с основным товаром.

    Реализация в Opencart следующая: добавим в админке на форму редактирования товара на вкладку "Связи" радиокнопки "Показывать ли товар на странице производителя?"

    hide-product-from-manufacturer-page.jpg

    Это делаем в представлении product_form.tpl:

    Код:
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i>Показывать ли товар на странице производителя?</i>&nbsp;
    <?php if ($status_showornot) { ?>
                   <input type="radio" name="status_showornot" value="1" checked="checked" />
                   <?php echo $text_yes; ?>
                   <input type="radio" name="status_showornot" value="0" />
                   <?php echo $text_no; ?>
                   <?php } else { ?>
                   <input type="radio" name="status_showornot" value="1" />
                   <?php echo $text_yes; ?>
                   <input type="radio" name="status_showornot" value="0" checked="checked" />
                   <?php echo $text_no; ?>
    <?php } ?>
    Заводим в БД в таблице product поле status_showornot (tyniint(1) по умолчанию выставим значение 1, что соответствует показу товара на странице производителя). Потом для ненужных товаров выберем в админке "Нет".

    Далее в admin/model/product допишем его передачу и сохранение в функции editProduct

    Код:
    public function editProduct($product_id, $data) {
    
    $this->db->query("UPDATE " . DB_PREFIX . "product SET model = '" . $this->db->escape($data['model']) . "', sku = '" . $this->db->escape($data['sku']) . "', upc = '" . $this->db->escape($data['upc']) . "', location = '" . $this->db->escape($data['location']) . "', quantity = '" . (int)$data['quantity'] . "', minimum = '" . (int)$data['minimum'] . "', subtract = '" . (int)$data['subtract'] . "', stock_status_id = '" . (int)$data['stock_status_id'] . "', date_available = '" . $this->db->escape($data['date_available']) . "', manufacturer_id = '" . (int)$data['manufacturer_id'] . "', shipping = '" . (int)$data['shipping'] . "', price = '" . (float)$data['price'] . "', points = '" . (int)$data['points'] . "', weight = '" . (float)$data['weight'] . "', weight_class_id = '" . (int)$data['weight_class_id'] . "', length = '" . (float)$data['length'] . "', width = '" . (float)$data['width'] . "', height = '" . (float)$data['height'] . "', length_class_id = '" . (int)$data['length_class_id'] . "', status = '" . (int)$data['status'] . "', tax_class_id = '" . $this->db->escape($data['tax_class_id']) . "', sort_order = '" . (int)$data['sort_order'] . "', date_modified = NOW(), status_showornot = '" . (int)$data['status_showornot'] . "' WHERE product_id = '" . (int)$product_id . "'");
    В admin/controller/catalog/product аналогично как сделано для поля status, добавим
    'status_showornot'     => ($result['status_showornot'] ? $this->language->get('text_enabled') : $this->language->get('text_disabled')),
    и
        if (isset($this->request->post['status_showornot'])) {
          $this->data['status_showornot'] = $this->request->post['status_showornot'];
        } elseif (!empty($product_info)) {
    $this->data['status_showornot'] = $product_info['status_showornot'];
    } else {
          $this->data['status_showornot'] = 1;
        }
    Потом в catalog/model/product к status = '1' добавим и наше новое условие в getProducts и пожалуй в getAllProducts
    ... AND p.status = '1' AND p.status_showornot = '1' ...
    ещё тонкий момент, проверьте ваши расширения и vqmod, там тоже надо дописать это условие, если какие-то из изменений кода vqmod или файлов расширений затрагивают и подменяют те куски в коде, которые выше мы дополняли.

    У меня это было filterpro, популярный фильтр, который подвешивается и на страницу производителей.

    Всем удачи в дорабатывании кода!