我正在使用magento,我正在尝试自定义购物车。基本上我有一个表,我正在尝试更改表行的内部html。我目前通过" item-options"选择了所有的类名。然后改变内部html。然而,我得到的问题是它们都变成了相同的价值而没有产品价值。
完整代码。
<?php foreach($this->getItems() as $_item): ?>
<?php echo $this->getItemHtml($_item) ?>
<?php $_product= Mage::getSingleton('catalog/product')->load($_item->getProductId()) ?>
<script>
var elements = document.getElementsByClassName('item-options');
for (var i = 0; i < elements.length; i++) {
elements[i].innerHTML = "No Of Devices: <?php echo $_product->getResource()->getAttribute('number_of_devices')->getFrontend()->getValue($_product); ?> || License Period: <?php echo $_product->getResource()->getAttribute('licence_period')->getFrontend()->getValue($_product)." !"; ?> ";
}
</script>
<?php endforeach ?>
再次声明我正在使用classname item-options更改元素的内部html。然而我遇到的问题是他们都将改变为产品的最后一个值。例如,假设我们有三个产品1,2和3.如果我使用脚本,所有三个值应该更改为1,2和3但是它们都是3到3.我试图弄清楚为什么这很开心。以及我如何解决它。
答案 0 :(得分:2)
你正在做的事情是: 你解析php中的所有项目,对于找到的每个项目,你逐个强制ERASE ALL元素item-options设置为在php中找到的值。 这样,您将更改n次(对于n项)选项,并且您将只显示所有选项的最后一项。
你要做的事情是将你的for中的item-option与你在php中的产品相匹配(例如你在DOM中添加的product_id),如果它是好的,你就是只在这一个上使用你的InnerHTML。 请注意,如果您通过product_id直接识别出item-option,则不再需要js中的循环。
答案 1 :(得分:2)
您的脚本会更新所有'item-options'
个元素中的值,尝试不使用循环(并仅更新最后一个值):
var elements = document.getElementsByClassName('item-options'),
last = elements.lenght - 1;
elements[last].innerHTML = "No Of Devices: <?php echo $_product->getResource()->getAttribute('number_of_devices')->getFrontend()->getValue($_product); ?> || License Period: <?php echo $_product->getResource()->getAttribute('licence_period')->getFrontend()->getValue($_product)." !"; ?> ";
P.S。我不确定你的innerHTML是否正确。
此外,这种设置HTML的方法(php
代码中包含JS
) - 不是一个好主意。