Magento加入心愿单代码不起作用

时间:2014-01-16 20:49:45

标签: php magento

我正在使用此代码段将愿望清单添加到我的产品视图

<a onclick="setLocation('<?php echo $this->getAddToWishlistUrl($_product) ?>')"
 class="buttons-wish" title="<?php echo $this->__('Add to Wishlist') ?>"></a>
<a onclick="setLocation('<?php echo $this->getAddToCompareUrl($_product) ?>')"
 class="buttons-compare" title="<?php echo $this->__('Add to Compare') ?>"></a>

但由于某种原因,它无法正常工作。

我需要帮助才能解决问题

3 个答案:

答案 0 :(得分:4)

试试这个。

<a href="<?php echo $this->helper('wishlist')->getAddUrl($_product) ?>" class="link-wishlist"><?php echo $this->__('Add to Wishlist') ?></a>                                                    
<a href="<?php echo $this->helper('catalog/product_compare')->getAddUrl($_product) ?>"><?php echo $this->__('Add to Compare') ?></a>

答案 1 :(得分:0)

检入后端System->Configuration->Advanced->Advanced->Disable Modules Output Mage_Wishlist已启用或未启用。

答案 2 :(得分:0)

我在Magento 1.8中发现的愿望清单中遇到的一个问题是使用新的form_key参数,也许这就是导致问题的原因。

Magento 1.8引入了表单键(它们可能以某种形式存在于1.8之前,但现在它们无处不在)。如果您希望任何表单执行任何操作,则必须使用它们。想加入购物车/心愿单/比较清单?需要表格密钥。想提交联系表格吗?需要表格密钥。想登录?表格密钥。等

所有必要的核心模板都已更新,将此密钥作为隐藏的输入元素包含在内 - 根据我的经验,您只需将此行从十几个不同的地方复制并粘贴到您拥有的任何自定义模板中(在此处的某个位置)形式元素)他们也会没事的。

一切都很好 - 进一步增强安全性/防垃圾邮件功能,并且很容易适应。

问题在于$this->helper('wishlist')->getAddUrl($_product)生成的网址包含此表单密钥,例如/wishlist/index/add/product/101/form_key/xyz这根本不起作用。在这种情况下,通过“不起作用”,我的意思是“添加到心愿单”按钮不会向您的愿望清单添加任何内容,尽管它仍然会将您带到您的愿望清单页面。

无论是偶然还是设计,我都不确定,但似乎form_key不像大多数Magento参数那样在URL中工作。它必须是标准的HTTP变量,例如表单字段中的输入或添加到URL中的查询字符串,如?form_key = xyz。

至少在产品视图上,我想在列表视图中,wishlist按钮实际上调用productAddToCartForm.submitLight(),这意味着URL根本不需要表单键,因为productAddToCartForm已经包含它

如何解决?与大多数事情一样,有很多方法。您可以停止使用$this->helper('wishlist')->getAddUrl($_product)并将其替换为类似$this->getStoreUrl('wishlist/index/add/product/'.$_product->getId())的内容(我没有测试过,所以请谨慎使用)或者您可以覆盖 Mage_Wishlist_Helper_Data :: getAddUrl 这是怎么回事我选择了这样做。这样会影响所有尝试使用“添加到心愿单”网址的模板等,这可能是件好事还是坏事。在这种情况下,我认为很好,但这取决于你。

将Mage / Wishlist / Helper / Data.php从app / code / core复制到app / code / local 并更改:

public function getAddUrl($item)
{
    return $this->getAddUrlWithParams($item);
}

为:

public function getAddUrl($item)
{
    $productId = null;
    if ($item instanceof Mage_Catalog_Model_Product) {
        $productId = $item->getEntityId();
    }
    if ($item instanceof Mage_Wishlist_Model_Item) {
        $productId = $item->getProductId();
    }

    if ($productId) {
        $params = array('product' => $productId);
        return $this->_getUrlStore($item)->getUrl('wishlist/index/add', $params);
    }

    return false;
}

...这只是getAddUrlWithParams函数的副本,其中“params”硬编码为产品ID。