2013-04-17 2 views
2

을 카테고리 페이지에서 베스트 셀러 제품별로 정렬하려고합니다. 는이를 위해 나는 catalog/controller/product/category.php 컨트롤러에 아래의 코드를 추가 :Opencart 베스트셀러 제품별로 정렬

$this->data['sorts'][] = array(
    'text' => 'Bestsellers', 
    'value' => 'bestsellers', 
    'href' => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=bestsellers&order=DESC' . $url) 
); 

을이를 추가 한 후 내가 목록을 정렬에 베스트 셀러 옵션을 볼 수 있습니다. 이제이 정렬을 완료하기 위해 데이터베이스 쿼리를 수행하려고합니다. 과 같은 기존 정렬을 복제하려고했습니다. 이름 (A-z)으로 정렬하지만 opencart를 처음 사용하기 때문에이 작업을 수행 할 수 없습니다.

아이디어를 공유하는 방법을 알려주세요. 방법 getProducts($data) -

답변

2

난 그냥 당신을 안내 할 것입니다, 쿼리 부분은 ... 당신에게 또한 catalog/model/catalog/product.php

편집 업입니다. 이 부분 확인 :

$sort_data = array(
    'pd.name', 
    'p.model', 
    'p.quantity', 
    'p.price', 
    'rating', 
    'p.sort_order', 
    'p.date_added' 
); 

그리고 새 정렬을 추가하십시오. bestsellers, 그래서 당신은이 배열 될 겁니다 : 올바른 쿼리를 추가 한 후

if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { 
    if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') { 
     $sql .= " ORDER BY LCASE(" . $data['sort'] . ")"; 
    } elseif ($data['sort'] == 'p.price') { 
     $sql .= " ORDER BY (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)"; 
    } elseif ($data['sort'] == 'bestsellers') { // <-- YOUR NEW SORTING 
     $sql .= " ORDER BY <ADD YOUR SORTING QUERY HERE>"; 
    } else { 
     $sql .= " ORDER BY " . $data['sort']; 
    } 
} else { 
    $sql .= " ORDER BY p.sort_order"; 
} 

:

$sort_data = array(
    'pd.name', 
    'p.model', 
    'p.quantity', 
    'p.price', 
    'rating', 
    'p.sort_order', 
    'p.date_added', 
    'bestsellers', 
); 

지금 당신은 if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {로 시작하는 다음 부분을 수정해야 할 것이다 그래서 당신은 끝낼한다 <ADD YOUR SORTING QUERY HERE> 대신에 완료해야합니다.

나는이 변화를 만들어 잘 작동하는 코드를 테스트 한
+0

회신 해 주셔서 감사합니다 shadyyx ... 아래 쿼리를 추가 한 후 오류가 발생합니다. SELECT DISTINCT product_id FROM oc_order_product https://www.dropbox.com/s/t2cb5goyjw8qkhj/error.txt에서 오류를 확인할 수 있습니다. –

+0

@Vin_fugen 'ORDER BY'키워드가 누락되었습니다. 이전에 'space'를 남기지 않았습니다. 귀하의 질의 ...'$ sql. = "행 대신에 추가 한 코드를 보여주십시오. <당신의 질의를 추가하십시오>",'. – shadyyx

+0

$ sql. = "SELECT DISTINCT product_id FROM oc_order_product"를 (를) 추가했습니다. $ sql 대신. = "귀하의 주문을 여기에 추가하십시오."; –

1

:

$sort_data = array(
     'pd.name', 
     'p.model', 
     'p.quantity', 
     'p.price', 
     'rating', 
     'p.sort_order', 
     'p.date_added', 
     'bestsellers' 
    ); 

    if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { 
     if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') { 
      $sql .= " ORDER BY LCASE(" . $data['sort'] . ")"; 
     } else if ($data['sort'] == 'p.price') { 
      $sql .= " ORDER BY (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)"; 
     } else if ($data['sort'] == 'bestsellers') { // Sorting as suggested by shadyyx 
      $sql .= " ORDER BY (SELECT sum(quantity) FROM " . DB_PREFIX . "order_product op where op.product_id=p.product_id GROUP BY p.product_id) "; 
     } else { 
      $sql .= " ORDER BY " . $data['sort']; 
     } 
    } else { 
     $sql .= " ORDER BY p.sort_order"; 
    } 

과 코드 : 여기

1) remove the (,) in 'bestsellers', 
2) updated the sql code to read: 
    $sql .= " ORDER BY (SELECT sum(quantity) FROM " . DB_PREFIX . "order_product op where op.product_id=p.product_id GROUP BY p.product_id) "; 

카탈로그/모델/카탈로그/product.php에 대한 코드입니다 카탈로그 \ 컨트롤러 \ 제품 \ product.php :

$data = array(
     'filter_category_id' => $categories_info['category_id'], 
     'sort'     => 'bestsellers', 
     'order'    => 'DESC' 
     ); 
    $results = $this->model_catalog_product->getProducts($data); 
관련 문제