gpt4 book ai didi

magento - Magento如果客户购买某些产品,则具有条款和条件

转载 作者:行者123 更新时间:2023-12-02 12:44:39 24 4
gpt4 key购买 nike

仅当客户购买某些产品时,我才想显示条款和条件(agreements.phtml)。例如,我们的某些产品需要处方。如果客户购买其中之一,我们希望这些条款出现。

我在后端创建了一个属性:prescription_required

伪代码如下:

Loop through products in the basket
if prescription_required == yes
set flag to yes
end if
end loop


如果flag设置为yes,请遍历Agreement.phtml中的代码

我认为我遇到的主要问题是在Agreements.phmtl中获取产品信息并遍历整个购物篮。

我努力了

<?php 
$_product = Mage::getModel('catalog/product')->load($this->getData('product_id'));
echo $_product->getName();
?>


但是什么也没返回。

最佳答案

编辑:

我做了一个扩展,它完全可以完成您想要达到的目标,并通过Magento Connect发布了它。这是链接:http://www.magentocommerce.com/magento-connect/catalog/product/view/id/14603。您可以下载它,或按照以下步骤操作。链接到扩展源代码位于答案的底部。

编辑结束

这些是您必须执行的步骤:


创建负责显示(或不显示)的新产品属性
条款和条件
重写负责显示这些条款和条件的块
在结帐页面上
重写负责检查是否所有必需的助手
用户单击“条款和条件”复选框


假设和目标:

我假设您不想创建比实际需要复杂的东西。我将向您解释如何扩展,如果购物车中至少有一种产品需要条款/条件,或者没有一项-如果购物车中没有产品,那么将显示所有启用的条款和条件会需要这个。

我还假设我们想做正确的事,不要理会核心文件。当然,修改核心功能可能会更容易,但是这种方法将来确实会引起麻烦。这就是为什么我们要制作一个新模块。

接下来,我假设所有商店中都需要此功能(如果有多个商店)。

最后一件事-我在Magento Community Edition 1.7上测试了我的方法。它不能保证可以在其他版本上使用,但是我认为它应该可以在1.6和1.5上使用。如果您使用这些版本之一,则可以尝试。我不确定它是否可以在旧版本上使用。

创建新属性:

这超出了问题的范围,但最好是:


该属性是“是/否”选项,因为我们不需要任何其他信息
该属性是系统属性,因此我们不必将其添加到每个属性组


当然,根据您的需要,您可以通过其他方式创建属性。

在我的情况下,product属性的代码为conditional_agreements。以下代码段中使用了此代码。

重写块

我们必须重写的块是Mage_Checkout_Block_Agreements。它只有一个功能-getAgreements()

第一件事是进行重写。我的程序包称为bartoszgorski,我的模块为conditionalagreements,所以我在config.xml中的代码为:

<config>
<!-- other code -->
<global>
<!-- other code -->
<blocks>
<checkout>
<rewrite>
<agreements>Bartoszgorski_Conditionalagreements_Block_Agreements</agreements>
</rewrite>
</checkout>
</blocks>
<!-- other code -->
</global>
</config>


在文件本身中,我只是使用一个助手(稍后说明)来检查是否要显示任何条款和条件。我的代码如下所示:

public function getAgreements() {
if(Mage::helper('conditionalagreements')->checkIfQuoteRequiresAgreements() == true) {
return parent::getAgreements();
} else {
return array();
}
}


因此,如果有要显示的内容,我们可以显示它。否则, function返回一个空的 array协议。

重写助手:

我们必须重写的 helperMage_Checkout_Helper_Data。如果不重写 helper,Magento将不显示任何条款/条件,但仍将要求用户选中其复选框-这当然是不可能的。因此,我在config.xml中的代码是:

<config>
<!-- other code -->
<global>
<!-- other code -->
<helpers>
<conditionalagreements>
<class>Bartoszgorski_Conditionalagreements_Helper</class>
</conditionalagreements>
<checkout>
<rewrite>
<data>Bartoszgorski_Conditionalagreements_Helper_Data</data>
</rewrite>
</checkout>
</helpers>
<!-- other code -->
</global>
</config>


helper中,有一个函数 getRequiredAgreementIds()负责获取必须同意的所有条款和条件。我们希望做的完全一样,但前提是购物车中至少有一种产品需要此产品。这就是为什么我建议创建另一个帮助程序功能(在本例中为 checkIfQuoteRequiresAgreements()),以检查此类产品并在 getRequiredAgreementIds()(以及 block中使用它,如先前所示)中。因此,重写 helper应该具有以下功能:

public function getRequiredAgreementIds()
{
if($this->checkIfQuoteRequiresAgreements() == true) {
if (is_null($this->_agreements)) {
if (!Mage::getStoreConfigFlag('checkout/options/enable_agreements')) {
$this->_agreements = array();
} else {
$this->_agreements = Mage::getModel('checkout/agreement')->getCollection()
->addStoreFilter(Mage::app()->getStore()->getId())
->addFieldToFilter('is_active', 1)
->getAllIds();
}
}
return $this->_agreements;
} else {
return array();
}
}

public function checkIfQuoteRequiresAgreements() {
$showAgreements = false;
$quote = Mage::getSingleton('checkout/session')->getQuote();
foreach ($quote->getAllVisibleItems() as $quoteItem) {
$product = Mage::getModel('catalog/product')->load($quoteItem->getProductId());
if($product->getConditionalAgreements() == 1) {
$showAgreements = true;
break;
}
}
return $showAgreements;
}


就是这样。完成此操作后,您应该拥有想要的东西。请记住,如果您在条款和条件中有一项以上,则只能显示全部或全部不显示。当然,您可以根据我的代码片段开发更多内容-由您决定。

这是我的全部模块:

https://github.com/bgorski/conditionalagreements

您可以预览我在这里所做的事情,也可以下载并在您的网站上使用。

希望能有所帮助。任何反馈将不胜感激。

关于magento - Magento如果客户购买某些产品,则具有条款和条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12567937/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com