【问题标题】:Variables from PHP script affecting Magento checkout影响 Magento 结帐的 PHP 脚本中的变量
【发布时间】:2014-07-02 11:12:53
【问题描述】:

当具有特定属性的产品在购物车中时,我使用下面的脚本设置标志。 我的问题是,因为我在结帐时使用它,所以我相信它与结帐中的其他变量/数组冲突,并且总数是应有的两倍。

我的问题是如何在不影响其余结帐的所有其他变量的情况下将标志从该脚本中传递出去。我试过 unset($cart);认为这会有所帮助,但没有成功!

(此代码位于我的 checkout.phtml 文件的顶部)

<?php

$collection = Mage::getModel('catalog/product')->getCollection();

$collection->addFieldToFilter(
    array(
       array('attribute'=> 'WWHAM','eq' => '1')
    )
);

$exemptProducts = array();
$exemptProductFound = false;

foreach ($collection as $product) {
$exemptProducts[] = $product->getId();
}

// now let's check if any are in the basket
$cart = new Mage_Checkout_Model_Cart();
$cart->init();

foreach ($cart->getItems() as $item) {
    if(in_array($item->getProductId(), $exemptProducts)) {
        // to make it simple, just set a flag
        $exemptProductFound = true;
    }
}
unset($cart);
?>

【问题讨论】:

    标签: php magento


    【解决方案1】:

    我对购物车不是很熟悉,但不是

    $cart = new Mage_Checkout_Model_Cart();
    $cart->init();
    

    试试

    Mage::getSingleton('checkout/cart')
    

    首先:您几乎不应该使用“新”。没有真正的理由不使用Mage::getBlah

    其次,问题可能在于您使用Mage::getModel(),我认为您需要使用Mage::getSingleton()

    不同之处在于getModel 将始终为您提供该模型的新对象,而getSingleton 将检查是否已经存在并返回该对象。这意味着您正在获取现有购物车对象的属性,我认为这是问题所在。试试看,我们将从那里开始。

    编辑:This answer 深入研究 Magento 内部结构,向您展示两者之间的区别。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-12
      • 2020-01-19
      相关资源
      最近更新 更多