Prestashop获取id的组合产品

时间:2015-10-23 09:56:43

标签: php smarty e-commerce prestashop prestashop-1.6

我试图在产品清单上显示数量,组合等。到目前为止,我已经可以很好地显示组合,这样我就可以从分配给产品的每个组中选择一个属性。

现在,我如何结合这些"属性ID"组合产品,以便我可以看到价格,将其添加到购物车等。

这是我获取组合的模块

function hookdisplayProductOnList($params){
    $product=new Product($params['id_product']);
    $combinations=$product->getAttributeCombinations($this->context->language->id);

    $combArray = [];
    $combArrayIds = [];

    foreach( $combinations as $k => $v )
    {   
        if( !in_array($v["id_attribute"], $combArrayIds))
        {
            $combArrayIds[] = $v["id_attribute"];
            $combArray[ $v["group_name"] ][] = $v;
        }
    }

    $this->smarty->assign('combinations',$combArray);
    return $this->display(__FILE__, 'combinations.tpl');
}

这是我输出组的方式

{foreach $combinations as $k=>$comb}

            <ul class="attribute-select" data-group="{$k}">
            {foreach from=$comb item=attr}
                <li data-combId="{$attr.id_attribute}" title="{l s='+'} {convertPrice price=$attr.unit_price_impact}">{$attr.attribute_name}</li>
            {/foreach}
            </ul><br />


{/foreach}

是否有任何辅助功能或类似的东西。像:

::GetByAttributes($product_id, [ attr_id1, attr_id2, attr_id3 ] );

1 个答案:

答案 0 :(得分:0)

我在这里使用id_product 21,我的前缀表是ps_(默认值),lang id是1,并且数量用于属性库存

这是我从prestashop代码中获取的查询,转换为单个查询即可根据需要进行更改,它将提供产品属性id,数量和用于组合的prestashop格式

选择pac.id_product_attribute, (从ps_stock_available中选择求和(数量),其中id_product_attribute = pac.id_product_attribute)作为数量,GROUP_CONCAT(agl。name,'-',al。name OR BY BY agl。id_attribute_group SEPARATOR' -')as attribute_designation FROM ps_product_attribute_combination pac LEFT JOIN ps_attribute a on a。id_attribute = pac。id_attribute LEFT JOIN ps_attribute_group ag on ag。{{1 }} = a。id_attribute_group左联接id_attribute_group al开启(a。ps_attribute_lang = al。id_attribute AND al。id_attribute = 1)左联接{{ 1}} agl ON(ag。id_lang = agl。ps_attribute_group_lang和agl。id_attribute_group = 1)WHERE pac.id_product_attribute IN(从ps_product_attribute pa中选择pa.id_product_attribute PA。{{ 1}} = 21 GROUP BY PA。id_attribute_group)GROUP BY pac.id_product_attribute