2012-02-05 3 views
2

나는 prestashop에 대한 경험이 없습니다. 나는 속성의 일부 값과 일치하는 모든 제품을 얻으려고합니다.prestashop 필터링 된 제품을 해당 속성으로 가져 오는 방법

[편집]

는 지금은 Product::getProducts를 사용하여 모든 제품을 얻을. 그 후에 array_filter에 의해 결과 배열을 필터링합니다. 필터링 된 제품을 데이터베이스에서 직접 검색하는 방법에 대해 궁금합니다. 예 : 함수 또는 문자열 필터를 전달하십시오. Product::getProductsBy('product_id > 10')

+0

조금 막연하다. 예를 들어, "blue"값을 가진 "color"속성을 갖는 모든 제품을 사용 가능한 옵션으로 나열 하시겠습니까? –

+0

이제'Product :: getProducts'를 사용하여 모든 제품을 얻었습니다. 그 후에 결과 배열을'array_filter'로 필터링합니다. 필터링 된 제품을 데이터베이스에서 직접 검색하는 방법에 대해 궁금합니다. 예 : 함수 필터 또는 문자열 필터를 전달합니다. Product :: getProductsByFilter ('product_id> 10') – abuduba

+0

@PaulCampbell 안녕하세요. 이전 질문입니다.하지만 한 가지 문제가 있습니다. 답장 아래의 설명에 설명해주십시오. – siddhesh

답변

7

짧은 대답은이 작업을 수행 할 수 있다는 점에서 내장 아무것도 내가 제대로 이해하고있어 경우에, 당신은 제품의 목록을 원하는, 그러나이없는 어떤 것이 없다는 것을 제품 목록 테마 템플리트를 사용하여 출력하기에 적합한 형식의 특정 속성 값을 갖습니다.

그룹 내 속성 값의 드롭 다운 목록에서 시작한다고 가정하겠습니다. 따라서 속성 그룹을 완전히 무시할 수 있습니다. 예를 들어 "M"및 "L"값을 선택할 수있는 "Size"(id_attribute_group = 1) 속성 그룹이있을 수 있습니다.이 값은 XX_attribute 테이블의 항목에 해당합니다. 모든 제품을 사용할 얻을 - XX_attribute 테이블에서

당신은 당신이

id_attribute | id_lang   | name 
1   | 1     | M 
2   | 1     | L 

는 등의 카테고리를 신경 쓰지 않는 가정했을 XX_attribute_lang 테이블에서

id_attribute | id_attribute_group | color 
1   | 1     | #000000 
2   | 1     | #000000 

있을 것입니다 크기가 "L"이면 다음과 같은 간단한 쿼리를 사용할 수 있습니다.

SELECT pa.`id_product` FROM `XX_product_attribute` pa 
LEFT JOIN `XX_product_attribute_combination` pac ON pa.`id_product_attribute` = pac.`id_product_attribute` 
WHERE pac.`id_attribute` = '2' 

그러면 Prestashop이 내부적으로 사용하는 기능을 기본적으로 복제하여 위에서 얻은 product_ids의 배열에 대한 제품 세부 정보를 검색하여 제품 목록 템플리트에 전달해야합니다. 어쨌든 언어, 통화, 세금 등에 대한 제품 데이터를 후 처리해야하기 때문에이 단계에서 제품 ID 만 가져 오는 것이 가장 좋은 방법 일 수 있습니다.

에서 빌드 된 ID 배열에서 자세한 제품 데이터를 가져 오려면 위 또는 유사한 필터링 쿼리 (예 :배열에 저장된 당신이 그런 짓을 할 것) $product_ids라고 :

global $cookie; 
$id_lang = $cookie->id_lang; 
$product_list = array(); 

if (count($product_ids)) 
{ 
    $sql = ' 
    SELECT p.*, pa.`id_product_attribute`, pl.`description`, pl.`description_short`, pl.`available_now`, pl.`available_later`, pl.`link_rewrite`, pl.`meta_description`, pl.`meta_keywords`, pl.`meta_title`, pl.`name`, i.`id_image`, il.`legend`, m.`name` AS manufacturer_name, tl.`name` AS tax_name, t.`rate`, cl.`name` AS category_default, DATEDIFF(p.`date_add`, DATE_SUB(NOW(), INTERVAL '.(Validate::isUnsignedInt(Configuration::get('PS_NB_DAYS_NEW_PRODUCT')) ? Configuration::get('PS_NB_DAYS_NEW_PRODUCT') : 20).' DAY)) > 0 AS new, 
    (p.`price` * IF(t.`rate`,((100 + (t.`rate`))/100),1)) AS orderprice 
    FROM `'._DB_PREFIX_.'category_product` cp 
    LEFT JOIN `'._DB_PREFIX_.'product` p ON p.`id_product` = cp.`id_product` 
    LEFT JOIN `'._DB_PREFIX_.'product_attribute` pa ON (p.`id_product` = pa.`id_product` AND default_on = 1) 
    LEFT JOIN `'._DB_PREFIX_.'category_lang` cl ON (p.`id_category_default` = cl.`id_category` AND cl.`id_lang` = '.(int)($id_lang).') 
    LEFT JOIN `'._DB_PREFIX_.'product_lang` pl ON (p.`id_product` = pl.`id_product` AND pl.`id_lang` = '.(int)($id_lang).') 
    LEFT JOIN `'._DB_PREFIX_.'image` i ON (i.`id_product` = p.`id_product` AND i.`cover` = 1) 
    LEFT JOIN `'._DB_PREFIX_.'image_lang` il ON (i.`id_image` = il.`id_image` AND il.`id_lang` = '.(int)($id_lang).') 
    LEFT JOIN `'._DB_PREFIX_.'tax_rule` tr ON (p.`id_tax_rules_group` = tr.`id_tax_rules_group` 
              AND tr.`id_country` = '.(int)Country::getDefaultCountryId().' 
               AND tr.`id_state` = 0) 
    LEFT JOIN `'._DB_PREFIX_.'tax` t ON (t.`id_tax` = tr.`id_tax`) 
    LEFT JOIN `'._DB_PREFIX_.'tax_lang` tl ON (t.`id_tax` = tl.`id_tax` AND tl.`id_lang` = '.(int)($id_lang).') 
    LEFT JOIN `'._DB_PREFIX_.'manufacturer` m ON m.`id_manufacturer` = p.`id_manufacturer` 
    WHERE p.`active` = 1' : '').' 
     '.($id_supplier ? 'AND p.id_supplier = '.(int)($id_supplier) : '').' 
    AND p.`id_product` IN(' . implode(',', $product_ids) . ')'; 

    $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS($sql); 


    /* Modify SQL result */ 
    $product_list = Product::getProductsProperties($id_lang, $result); 
} 
분명히

나는 많은 제품을 얻을 것입니다 우리의 제품 세트에 결과를 필터링하는()에도 사용했습니다 까다 롭긴하지만 일반적 아이디어를 제공합니다! 또 다른 문제는 위의 쿼리가 Prestashop의 다른 곳에서 비슷한 기능을 수행하지 않는다는 것입니다. (사과하면 어디서든 잘못 편집했습니다.) 업그레이드시 중단 될 수 있습니다.

+0

그리고 우리가 원하는 경우 크기 L 색상 녹색 (4) 그러면 어떻게해야합니까. 기본적으로 우리가 사용하는 필터 및 그룹 또는 그룹 값에서 '색상 (빨간색 = 색상 또는 녹색 = 녹색) 및 (크기 = L 또는 크기 = M)'을 의미합니다. 색상 및 크기를 저장할 때 완벽하게 작동합니다. 하나의 행을하지만 어떻게 그것이 presta에서 가능합니다. @PaulCampbell 제가이 일을하고 싶다고 도와주세요. – siddhesh

0

위의 Paul이 언급했듯이 질문은 매우 모호하며 추가 정보없이 올바르게 대답하기가 어려울 수 있습니다. 그러나 몇 가지 해결책을 제시하려고합니다 :

색상 및 크기 옵션이있는 iPod과 같은 특정 제품을 구입하려는 경우 속성 & 그룹 탭을 사용하여이를 수행 할 수 있습니다. 카탈로그의 조합 생성기.

가격, 기능, 색상 등과 같은 매개 변수를 기반으로 제품 목록을 좁히려면 (예 : Amazon.com에서 쇼핑하는 방법을 생각해보십시오.) 내장 된 계층 형 탐색 모듈.

위와 같은 방법으로도 문제가 해결되지 않으면 추가 정보를 게시하여 요청하는 내용을 더 잘 이해할 수 있도록하십시오.

자료 : I는 PrestaShop 버전의 커뮤니티 관리자입니다

관련 문제