2013-05-09 5 views
1

Можно ли отображать специальные продукты в каждой категории, показывая только продукты, относящиеся к этой категории? Например, если категория «Nokia», покажите специальные предложения, которые относятся только к Nokia, и не отображаются другие специальные функции.Показать специальные продукты в каждой категории, показывая только продукты, относящиеся к этой категории

То же самое для предлагаемых товаров.

Возможно ли это? Если возможно, можете ли вы объяснить, как это сделать, чтобы новичок мог это понять? Я использую OpenCart 1.5.3.1.

+0

Можно, конечно. Я не уверен, что это новичок, задача. В 'catalog/controller/module/special.php' вам нужно будет проверить, является ли текущая страница страницей категории, затем получить ее идентификатор категории, а затем запустить цикл для проверки продуктов и фильтрации только связанных продуктов. –

ответ

1

Хорошо, вот вам-то, чтобы вы начали. Я использую Opencart 1.5.5.1. В catalog/controller/module/special.php найти эту линию к концу:

if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/module/special.tpl')) { 

Прежде, добавьте этот код (я надеюсь, что мои комментарии сделать это достаточно ясно):

// filter specials by current category code - - - - - - - 

/* check wether current page is a category page (i.e. has 'path' var) */ 
if (isset($this->request->get['path'])) { 

    /* get category ID from path (last number) */ 
    $parts = explode('_', (string)$this->request->get['path']); 
    $category_id = (int)array_pop($parts); 

    /* loop through products */ 
    foreach ($this->data['products'] as $k => $item){ 
     /* check whether this product is assigned to current category */ 
     $sql = "SELECT * FROM " . DB_PREFIX ."product_to_category WHERE product_id = ". $item['product_id']. " AND category_id = ".$category_id; 

     $query = $this->db->query($sql); 

     /* if no match found, remove this item */ 
     if (count($query->rows) == 0){ 
      unset ($this->data['products'][$k]); 
     } 

    } 
} 

// end of filter specials by current category code - - - - 
+0

Thankyou B-and-P, вы даете потрясающий код yar thankyou thankyou so much – user2365268

+0

Thankyou B-and-P, его отлично работает, и можно разделить то же самое, что и выше в признанных продуктах ?????? пожалуйста, предложите мне, я новичок в opencart.Thankyou inadvance – user2365268

+0

Если я решил вашу проблему, пожалуйста, примите мой ответ, отметив галочку слева. Вместо того, чтобы выполнять всю работу за вас, я предлагаю вам попробовать и адаптировать мой пример к избранному модулю самостоятельно. Это единственный способ узнать. Затем вернитесь сюда и напишите свой код, если у вас возникнут проблемы. –

0

Просто нужно это сам, вот мое решение, вам необходимо изменить catalog/model/catalog/product.php и catalog/controller/module/special.php. Я рекомендую VQMod сделать это:

в product.php заменить

$sql = "SELECT DISTINCT ps.product_id, (SELECT AVG(rating) FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = ps.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM " . DB_PREFIX . "product_special ps LEFT JOIN " . DB_PREFIX . "product p ON (ps.product_id = p.product_id) 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) WHERE p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_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())) GROUP BY ps.product_id"; 

с:

$sql = "SELECT DISTINCT ps.product_id, (SELECT AVG(rating) FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = ps.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating".(isset($data['category_id']) ? ", (SELECT category_id FROM oc_product_to_category WHERE product_id = ps.product_id AND category_id = '".$data['category_id']."' GROUP BY category_id) as category" : "")." FROM " . DB_PREFIX . "product_special ps LEFT JOIN " . DB_PREFIX . "product p ON (ps.product_id = p.product_id) 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) WHERE p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_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())) GROUP BY ps.product_id".(isset($data['category_id']) ? ",category HAVING category='".$data['category_id']."'" : ""); 

и в special.php: добавить

if (isset($this->request->get['path'])) { 
    $parts = explode('_', (string)$this->request->get['path']); 
    $data['category_id'] = (int)array_pop($parts); 
} 

перед тем

$results = $this->model_catalog_product->getProductSpecials($data); 
Смежные вопросы