如何创建自定义扩展使用条件规则函数

Ans*_*ori 7 php magento

我打算建立一个像购物车,价格规则或目录价格规则的扩展.

我已经尝试从现有的Magento代码中学到一些东西,你可以看到:

app/code/core/Mage/Adminhtml/Block/Promo/Quote/Edit/Tab/Conditions.php
Run Code Online (Sandbox Code Playgroud)

为了显示条件规则字段,我尝试添加此脚本,但它无法正常工作

$fieldset->addField('conditions', 'text', array(
        'name' => 'conditions',
        'label' => Mage::helper('salesrule')->__('Conditions'),
        'title' => Mage::helper('salesrule')->__('Conditions'),
    ))->setRule($model)->setRenderer(Mage::getBlockSingleton('rule/conditions'));
Run Code Online (Sandbox Code Playgroud)

问题是:

  1. 如何在我的自定义字段上正确显示条件字段?
  2. 如何在前端应用规则条件?

提前致谢.

更新,看看我的截图

https://docs.google.com/file/d/0BwLN4KpQhoGbU181R0ZKanJSdVE/edit?usp=drivesdk

这是我的form.php:

<?php
class KS_Kscoba_Block_Adminhtml_Tcoba_Edit_Tab_Form 
extends Mage_Adminhtml_Block_Widget_Form

/*
extends Mage_Adminhtml_Block_Widget_Form
    implements Mage_Adminhtml_Block_Widget_Tab_Interface
*/
{
        protected function _prepareForm()
        {

                $model = Mage::registry('current_promo_quote_rule');
                $form = new Varien_Data_Form();
                $this->setForm($form);
                $fieldset = $form->addFieldset("kscoba_form", array("legend"=>Mage::helper("kscoba")->__("Item information")));


                        $fieldset->addField("kolom1", "text", array(
                        "label" => Mage::helper("kscoba")->__("Kolom 1"),
                        "name" => "kolom1",
                        ));

                         $fieldset->addField('kolom2', 'select', array(
                        'label'     => Mage::helper('kscoba')->__('Kolom 2'),
                        'values'   => KS_Kscoba_Block_Adminhtml_Tcoba_Grid::getValueArray1(),
                        'name' => 'kolom2',
                        ));

                /*
                problem start here
                */      

                $renderer = Mage::getBlockSingleton('adminhtml/widget_form_renderer_fieldset')
                    ->setTemplate('promo/fieldset.phtml')
                    ->setNewChildUrl($this->getUrl('*/promo_quote/newConditionHtml/form/rule_conditions_fieldset'));

                $fieldset = $form->addFieldset('conditions_fieldset', array(
                    'legend'=>Mage::helper('salesrule')->__('Apply the rule only if the following conditions are met (leave blank for all products)')
                ))->setRenderer($renderer);

                $fieldset->addField('conditions', 'text', array(
                    'name' => 'conditions',
                    'label' => Mage::helper('salesrule')->__('Conditions'),
                    'title' => Mage::helper('salesrule')->__('Conditions'),
                ))->setRule($model)->setRenderer(Mage::getBlockSingleton('rule/conditions'));




                if (Mage::getSingleton("adminhtml/session")->getTcobaData())
                {
                    $form->setValues(Mage::getSingleton("adminhtml/session")->getTcobaData());
                    Mage::getSingleton("adminhtml/session")->setTcobaData(null);
                } 
                elseif(Mage::registry("tcoba_data")) {
                    $form->setValues(Mage::registry("tcoba_data")->getData());
                }
                return parent::_prepareForm();

        }
}
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?

小智 0

1. 条件字段

我可能忽略了另一个问题,但是当我测试你的时form.php,条件字段丢失,因为Mage::registry('current_promo_quote_rule')未定义。$model我填充对象后,条件字段出现在页面上Mage_SalesRule_Model_Rule

Magento 1.8 注册( )中的current_promo_quote_rulein_initRule()和( ) 。editAction()Mage_Adminhtml_Promo_QuoteControllerapp/code/core/Mage/Adminhtml/controllers/Promo/QuoteController.php


2. 前端

以购物车价格规则为例,折扣价格通过结帐模块应用在前端。

Mage/Checkout/controllers/CartController.php有一个couponPostAction()函数,当用户从购物车或结账页面提交优惠券代码时调用。此函数获取购物车的对象,在该对象上设置优惠券代码,并使用 的函数Mage_Sales_Model_Quote刷新每个项目的总计。collectTotals()Mage_Sales_Model_Quote

报价对象collectTotals()获取相关Mage_Sales_Model_Quote_Address对象并调用它们的collectTotals()函数。这些函数获取与地址关联的每个收集器对象并调用其collect()方法。

这些收集器对象之一是 a Mage_SalesRule_Model_Quote_Discount,其collect()方法获取Mage_Sales_Model_Quote_Item与该地址关联的每个对象,然后使用 a 计算并存储其折扣Mage_SalesRule_Model_Validator

条件中的具体逻辑在 SalesRule 模块中进行更深入的读取和应用。