영카트 list 함수 질문드립니다.
본문
상품리스트에서 특정 분류를 출력하지 않기 위한 작업중입니다.
$list->set_query($sql);
위 코드로 쿼리를 직접 바꿔줄 수 있는 부분 확인했습니다.
그런데 바꾸기 전 쿼리를 몰라서 where절만 추가하려면 어떻게 처리할지 고민입니다.
아시는분 답변 주시면 감사하겠습니다ㅜㅜ
+전체 상품을 출력하기 위해
$list->set_category($ca['ca_id'], 1);
$list->set_category($ca['ca_id'], 2);
$list->set_category($ca['ca_id'], 3);
이 부분을 주석처리했는데
나온 전체상품에서 한 분류를 제외해야하는 상황입니다.
답변 3
function run() { ... }
보시면
set_category 로 세팅된 조건들이
ca_id like ... ca_id2 like ... ca_id3 ...
like 검색이 되는것 같은데 이부분은 성능이 떨어지는 부분이라
분류를 제외하는 not like 같은 검색을 할바엔
필요한 분류만 모두 조건에 추가하는게 오히려 낫습니다.
!-->!-->
쿼리를 직접 바꿔줄 수 있는 부분 확인했습니다
<---쿼리를 직접 넣어서 하는 것은 리스트를 몇개 또는 전체를
한꺼번에 불러오는 것 밖에 못합니다(페이징을 할 수 없기 때문입니다)
한 분류를 제외해야하는 상황입니다<----- 이 말은 대단히 애매모호 합니다
10 이라는 분류가 있어서 제외하는 코드를 만들때 10 제외/ 1010 제외 / 101020 제외 중
어떻게 제외하겠다는 것인지 실제적으로 질문을 해야 추측이 아닌 실제적인 답변이 가능 합니다
-- 제외하는 분류가 1010이면 1010만 제외할 것인지 101010, 101020등도 제외할 것인지??
-- 제외하는 분류를 ca_id, ca_id2, ca_id3 1차, 2차 3차 특정할 것인지 모두 할 것인지??
1010분류 제외하는 방법 ==분류설정하는 것과 동일하게 흉내내면 됩니다
1. shop.lib.php 에서 클래스에 다음 함수 추가
function not_category($ca_id , $level=1){
if ($level == 2) $this->not_ca2 = $ca_id;
else if ($level == 3) $this->not_ca3 = $ca_id;
else $this->not_ca = $ca_id;
}
2. function run() { 함수에서 $sql_where = " where " . implode(" and ", $where); 윗줄에 추가
$where2 =array();
if ($this->not_ca) $where2[] = " ca_id not like '{$this->not_ca}%' ";
if ($this->not_ca2) $where2[] = "ca_id2 not like '{$this->not_ca}%' ";
if ($this->not_ca3) $where2[] = "ca_id3 not like '{$this->not_ca}%' ";
if( $where2[0]) $where[] = " ( " . implode(" or ", $where2) . " ) ";
3. 호출하는 곳에서 $list->set_category($ca['ca_id'], 3); 다음에 추가
$list->not_category('1010'); <--1차분류(ca_id)에서 제외
$list->not_category('1010', 2); <--2치분류(ca_id2)에서 제외
위와 같이 제외할 분류 설정