首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Magento 1.7:添加自定义促销

Magento 1.7:添加自定义促销
EN

Stack Overflow用户
提问于 2013-09-13 14:18:26
回答 1查看 1.6K关注 0票数 1

我想在Magento 1.7中添加一个定制的促销条件。应该可以根据客户的发货地址中的自定义属性应用促销。它实际上是相当基本的:如果填充了属性,则应该应用升级,而不是更多。

它应该显示为“船运邮政编码”或“航运区域”之类的购物车属性的独立条件点。

什么也会有帮助:如何实现标准的Cart促销条件,或者在哪里查找有关此主题的更多信息。我在网上搜索了很长一段时间,我真的被困住了。非常感谢您的帮助!

Thx很多

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-08 10:05:55

好的,我在这里找到了一个或多或少的工作解决方案,以防其他人需要这样的解决方案:

我创建了一个模块,那就是在晋升中引入一个新的条件。为实现这一目标而失去的和平是通过一名观察员来实现的。

首先是配置<path to module>\etc\config.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<config>
    <modules>
        <HauteNature_FamilienkarteHessen>
            <version>1.0.0</version>
        </HauteNature_FamilienkarteHessen>
    </modules>
    <admin>
        <fieldsets>
            <customer_dataflow>
                <building>
                    <billing>1</billing>
                    <shipping>1</shipping>
                </building>
            </customer_dataflow>
        </fieldsets>
    </admin>

    <global>

        <models>
            <familienkartehessen>
                <class>HauteNature_FamilienkarteHessen_Model</class>
            </familienkartehessen>
        </models>
        <helpers>
            <familienkartehessen>
                <class>HauteNature_FamilienkarteHessen_Helper</class>
            </familienkartehessen>
        </helpers>
        <events>
         <salesrule_rule_condition_combine>
            <observers>
                <add_condition_to_sales_rule>
                    <class>familienkartehessen/observer</class>
                    <method>addConditionToSalesRule</method>
                </add_condition_to_sales_rule>
            </observers>
         </salesrule_rule_condition_combine>
        </events>

        <resources>
            <familienkartehessen_setup>
                <setup>
                    <module>HauteNature_FamilienkarteHessen</module>
                    <class>Mage_Eav_Model_Entity_Setup</class>
                </setup>
                <connection>
                    <use>core_setup</use>
                </connection>
           </familienkartehessen_setup>
        </resources>

        <fieldsets>
            <sales_copy_order_billing_address>
                <familiycarthessen><to_order>*</to_order></familiycarthessen>
            </sales_copy_order_billing_address>
            <sales_copy_order_shipping_address>
                <familiycarthessen><to_order>*</to_order></familiycarthessen>
            </sales_copy_order_shipping_address>
            <sales_convert_quote_address>
                <familiycarthessen><to_order_address>*</to_order_address><to_customer_address>*</to_customer_address></familiycarthessen>
            </sales_convert_quote_address>
            <sales_convert_order_address>
                <familiycarthessen><to_quote_address>*</to_quote_address></familiycarthessen>
            </sales_convert_order_address>
            <customer_address>
                 <familiycarthessen><to_quote_address>*</to_quote_address></familiycarthessen>
            </customer_address>
            <checkout_onepage_billing>
                <familiycarthessen><to_customer>*</to_customer></familiycarthessen>
            </checkout_onepage_billing>
        </fieldsets>
    </global>
</config>

我认为这部分是将它与magento接口相结合:

代码语言:javascript
复制
<salesrule_rule_condition_combine>
    <observers>
        <add_condition_to_sales_rule>
        <class>familienkartehessen/observer</class>
            <method>addConditionToSalesRule</method>
        </add_condition_to_sales_rule>
    </observers>
 </salesrule_rule_condition_combine>

第二,观察者,非常简单,只需将菜单指向UI并将其链接到条件:<path to module>\Model\Observer.php

代码语言:javascript
复制
class HauteNature_FamilienkarteHessen_Model_Observer extends Mage_Core_Model_Abstract {

    /**
     * Event: salesrule_rule_condition_combine
     *
     * @param $observer
     */
    public function addConditionToSalesRule($observer) {

        $additional = $observer->getAdditional();
        $conditions = (array) $additional->getConditions();

        $conditions = array_merge_recursive($conditions, array(
            array('label'=>Mage::helper('familienkartehessen')->__('Familienkarte Hessen'), 'value'=>'familienkartehessen/condition_familienkarte'),
        ));

        $additional->setConditions($conditions);
        $observer->setAdditional($additional);

        return $observer;
    }
}

最后,实际执行工作的自定义条件类( <path to module>\Model\Condition/Familienkarte.php )

代码语言:javascript
复制
class HauteNature_FamilienkarteHessen_Model_Condition_Familienkarte extends Mage_Rule_Model_Condition_Abstract {

    /**
     * @TODO for whatever this it, check it and afterwards document it!
     *
     * @return Hackathon_DiscountForATweet_Model_Condition_Tweet
     */
    public function loadAttributeOptions() {
        $attributes = array(
            'fkhContent' => Mage::helper('familienkartehessen')->__('Familienkarte Hessen')
        );

        $this->setAttributeOption($attributes);

        return $this;
    }

    /**
     * @TODO for whatever this it, check it and afterwards document it!
     *
     * @return mixed
     */
    public function getAttributeElement() {
        $element = parent::getAttributeElement();
        $element->setShowAsText(true);
        return $element;
    }

    /**
     * @TODO for whatever this it, check it and afterwards document it!
     *
     * @return string
     */
    public function getInputType() {

        switch ($this->getAttribute()) {
            case 'fkhContent':
                return 'boolean';
        }
        return 'string';
    }

    /**
     * @TODO for whatever this it, check it and afterwards document it!
     * @return string
     */
    public function getValueElementType() {
        return 'text';
    }

    /**
     * Validate FamiliencarteHessen Rule Condition
     *
     * @param Varien_Object $object
     *
     * @return bool
     */
    public function validate(Varien_Object $object) {

        /* here should be something meaningful */
        $address = $object;
        if (!$address instanceof Mage_Sales_Model_Quote_Address) {
            if ($object->getQuote()->isVirtual()) {
                $address = $object->getQuote()->getBillingAddress();
            }
            else {
                $address = $object->getQuote()->getShippingAddress();
            }
        }

        return $this->validateAttribute(trim($address->getFamiliycarthessen()));
    }

}

如果你们中的任何人对这段代码有评论的话,我会很高兴听到的。

谨致问候

安德烈亚斯

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18788619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档