Magento:使用附加属性创建自己的送货方式

时间:2012-11-27 09:57:58

标签: php magento magento-1.4

我创建了一个模块,为magento实现了一种新的送货方式。目前该模块运作良好。

送货方式显示在一页结帐中。

class Tigerbytes_Barverkauf_Model_Carrier_Selbstabholung extends Mage_Shipping_Model_Carrier_Abstract

现在我想扩展功能。新的运输模块不再在前端可见。因此我在模块中添加了一个新属性。 (show_frontend)

config.xml

<default>
        <carriers>
            <selbstabholung>
                <active>1</active>
                <allowed_methods>selbstabholung</allowed_methods>
                <methods>selbstabholung</methods>
                <sallowspecific>0</sallowspecific>
                <model>Tigerbytes_Barverkauf_Model_Carrier_Selbstabholung</model>
                <name>Selbstabholung</name>
                <title>Selbstabholung</title>
                <specificerrmsg>Zur Zeit ist die Versandmethode nicht verfuegbar</specificerrmsg>
                <handling>0</handling>
                <handling_type>F</handling_type>
                <show_frontend>0</show_frontend>
            </selbstabholung>
        </carriers>

    system.xml
<show_frontend translate="label">
                            <label>zeige im Frontend?</label>
                            <frontend_type>select</frontend_type>
                            <source_model>adminhtml/system_config_source_yesno</source_model>
                            <sort_order>1</sort_order>
                            <show_in_default>1</show_in_default>
                            <show_in_website>1</show_in_website>
                            <show_in_store>1</show_in_store>
                        </show_frontend>

属性show_frontend显示在后端,也保存在core_config_data表中。

现在最大的问题是,在为用户选择获取onepage checkout的送货方式时,对象中没有show_frontend属性。

我认为用于装运方法列表的对象是

Mage_Sales_Model_Quote_Address_Rate

那么我需要扩展一下,rate对象知道show_frontend属性吗?

2 个答案:

答案 0 :(得分:1)

你正在做所有的模块吗?

就这样做:

在您的collectRates()方法中输入以下代码:

if(!Mage::getStoreConfig('carrier/selbstabholung/show_frontend'))
    return false;

这段代码应该可以胜任。

美好的一天。

答案 1 :(得分:0)

附件:

我只想允许在前端显示送货方式。在后端订单的后端我想要显示它。

所以在collectRates()方法中我实现了以下条件。

if(Mage::getDesign()->getArea() === Mage_Core_Model_App_Area::AREA_FRONTEND &&
        !Mage::getStoreConfig('carriers/'.$this->_code.'/show_frontend')){

        return false;
    }

现在它的工作完美!