我打算建立一个像购物车,价格规则或目录价格规则的扩展.
我已经尝试从现有的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)
问题是:
提前致谢.
更新,看看我的截图
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 模块中进行更深入的读取和应用。
| 归档时间: |
|
| 查看次数: |
1687 次 |
| 最近记录: |