【问题标题】:How to create custom extension use conditional rule functions如何创建自定义扩展使用条件规则函数
【发布时间】:2014-02-28 05:49:17
【问题描述】:

我正计划构建一个扩展,例如购物车、价格规则或目录价格规则。

我已经尝试从现有的 Magento 代码中学习一些东西,您可以在以下位置看到:

app/code/core/Mage/Adminhtml/Block/Promo/Quote/Edit/Tab/Conditions.php

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

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

问题是:

  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();

        }
}

我错过了什么吗?

【问题讨论】:

  • 嘿帕特里克感谢更新:)
  • 这里的问题:您是在寻找“我的正常输入字段未在表单中呈现”还是“如何创建自己的渲染器并应用它”?通过谷歌驱动器(或替代)链接共享您的自定义扩展代码对您来说会是一个问题吗?

标签: php magento


【解决方案1】:

1.条件字段

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

Magento 1.8 在_initRule()editAction() 中注册了current_promo_quote_rule Mage_Adminhtml_Promo_QuoteController (app/code/core/Mage/Adminhtml/controllers/Promo/QuoteController.php)。


2。前端

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    相关资源
    最近更新 更多