我正在 Prestashop 中处理产品详细信息。在产品页面上,我将所有属性定义到javascript数组中的系统中。
保存产品属性的PHP变量如下:
validate.sh
现在将“$ groups”变量分配给tpl文件中的javacript变量,如下所示:
$groups = array(
'34' => array( //Here key is attribute group id
'default_attribute_id' => '105', // default attribute id of this group
'attributes' => array( // all the attribute with attr id => attr vaue
'105' => 'Small',
'115' => 'X-Large',
'110' => 'Medium'
),
),
.......
);
现在当我控制“attributeGroups”的值时,它就失去了属性id的顺序,就像在“$ groups”变量中一样。控制台中的值如下:
{addJsDef attributeGroups = $groups}
我还尝试过使用foreach循环在“attributeGroups”变量中手动插入值,但结果是相同的。
我不想更改属性ID的顺序。谁可以帮我这个事?为什么在分配给javascript变量时,属性ID的顺序会发生变化。
答案 0 :(得分:0)
这样它应该创建简单的JS数组(具有固定的元素顺序):
$groups = array(
'34' => array( //Here key is attribute group id
'default_attribute_id' => '105', // default attribute id of this group
'attributes' => array( // all the attribute with attr id => attr vaue
['Small', '105'],
['X-Large', '115'],
['Medium', '110'],
),
),
.......
);
你只是不能使用PHP数组索引,因为它会创建关联数组,它转换为JS对象(因为JS没有关联数组)
结果JS应该是:
var attributeGroups = {
34: {
'default_attribute_id': "105",
'attributes': [
["Small", 105],
["X-Large", 115],
["Medium", 110]
]
}
}
或者您可以在属性数组中添加sort
键,并在需要时在JS中对其进行排序(通过Array.sort(callback)
):
$groups = array(
'34' => array( //Here key is attribute group id
'default_attribute_id' => '105', // default attribute id of this group
'attributes' => array( // all the attribute with attr id => attr vaue
'105' => ['Small', 1],
'115' => ['X-Large', 2],
'110' => ['Medium', 3],
),
),
.......
);
然后在需要时对其进行排序:
attributeGroups[34].attributes.sort(function (a, b) {
return a[1] - a[2];
})