Prestashop 从 id 中获取组合产品
Prestashop Get combination product from id's
我正在尝试在产品列表中显示数量、组合等。到目前为止,我已经可以很好地显示组合,因此我可以 select 分配给产品的每个组的属性。
现在,我如何将这些 "attribute id's" 组合成组合产品,以便我可以查看价格、将其添加到购物车等。
这是我获取组合的模块
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 ] );
从产品 ID 和属性 ID 数组中,您可以获取产品属性 ID。我想这就是你需要的?
$productId = 123;
$attributeIds = [123, 1234];
$combinationId = (int) \Product::getIdProductAttributesByIdAttributes(
$productId,
$attributeIds
);
更新
正如@PululuK 在 PrestaShop 1.7.3.1 中的评论中指出的那样,这已被弃用,我们应该改用 Product::getIdProductAttributeByIdAttributes()
,请参阅 https://github.com/PrestaShop/PrestaShop/blob/develop/classes/Product.php#L6511。
我这里用的是id_product21,我的前缀table是ps_(默认),lang id是1,数量取的是属性stock
这是我从 prestashop 代码中获取的查询,已翻译成单个查询,根据需要更改它,它将提供产品属性 ID、数量和用于组合的 prestashop 格式
SELECTpac.id_product_attribute,
(SELECT SUM(quantity) from ps_stock_available where id_product_attribute = pac.id_product_attribute) 作为数量,GROUP_CONCAT(agl.name
, '-' ,al.name
ORDER 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.id_attribute_group
= a.id_attribute_group
LEFT JOIN ps_attribute_lang
al ON (a.id_attribute
= al.id_attribute
AND al.id_lang
= 1) LEFT JOIN ps_attribute_group_lang
agl ON (ag.id_attribute_group
= agl.id_attribute_group
AND agl.id_lang
= 1) WHERE pac.id_product_attribute IN (SELECT pa.id_product_attribute FROM ps_product_attribute pa WHERE pa.id_product
= 21 GROUP BY pa.id_product_attribute
)分组 pac.id_product_attribute
我正在尝试在产品列表中显示数量、组合等。到目前为止,我已经可以很好地显示组合,因此我可以 select 分配给产品的每个组的属性。
现在,我如何将这些 "attribute id's" 组合成组合产品,以便我可以查看价格、将其添加到购物车等。
这是我获取组合的模块
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 ] );
从产品 ID 和属性 ID 数组中,您可以获取产品属性 ID。我想这就是你需要的?
$productId = 123;
$attributeIds = [123, 1234];
$combinationId = (int) \Product::getIdProductAttributesByIdAttributes(
$productId,
$attributeIds
);
更新
正如@PululuK 在 PrestaShop 1.7.3.1 中的评论中指出的那样,这已被弃用,我们应该改用 Product::getIdProductAttributeByIdAttributes()
,请参阅 https://github.com/PrestaShop/PrestaShop/blob/develop/classes/Product.php#L6511。
我这里用的是id_product21,我的前缀table是ps_(默认),lang id是1,数量取的是属性stock
这是我从 prestashop 代码中获取的查询,已翻译成单个查询,根据需要更改它,它将提供产品属性 ID、数量和用于组合的 prestashop 格式
SELECTpac.id_product_attribute,
(SELECT SUM(quantity) from ps_stock_available where id_product_attribute = pac.id_product_attribute) 作为数量,GROUP_CONCAT(agl.name
, '-' ,al.name
ORDER 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.id_attribute_group
= a.id_attribute_group
LEFT JOIN ps_attribute_lang
al ON (a.id_attribute
= al.id_attribute
AND al.id_lang
= 1) LEFT JOIN ps_attribute_group_lang
agl ON (ag.id_attribute_group
= agl.id_attribute_group
AND agl.id_lang
= 1) WHERE pac.id_product_attribute IN (SELECT pa.id_product_attribute FROM ps_product_attribute pa WHERE pa.id_product
= 21 GROUP BY pa.id_product_attribute
)分组 pac.id_product_attribute