Magento在订单概览中显示和编辑跟踪编号字段

时间:2012-02-04 13:43:18

标签: magento

是否有人知道如何以编程方式显示并使该字段可编辑以便在订单概览中跟踪数字字段?

我在想这个。

第1步。首先启用在Grid.php中显示跟踪字段,以便扩展...有没有人有一个如何添加列的示例? (就此而言,隐藏现有专栏)

在事件下将其添加到/etc/config.xml,以便Magento知道要调用的内容

<core_block_abstract_prepare_layout_before>
    <observers>
    <SNH_ShipMailInvoice_Observer_addTrackingColumnToGrid>
        <type>model</type>
        <class>SNH_ShipMailInvoice_Model_Observer</class>
        <method>addTrackingColumnToGrid</method>
    </SNH_ShipMailInvoice_Observer_addTrackingColumnToGrid>
    </observers>
</core_block_abstract_prepare_layout_before>

步骤2.a 然后使用跟踪代码填充网格(如果适用)

首先在/Model/Observer.php中添加一个字段(回答第1步)

public function addTrackingColumnToGrid($observer)
{
// this will return the block name for every block triggered by the observer
$block = $observer->getEvent()->getBlock();

// filter - we only want the block for the sales order grid
if ($block instanceof Mage_Adminhtml_Block_Sales_Order_grid){
    // well, that was easy!
    $block->addColumn('tracking_number', array(
        'header' => Mage::helper('sales')->__('Tracking number'),
        'index' => 'tracking_number',
        'type' => 'input',
        'width' => '120px',
        'renderer' => 'SNH_ShipMailInvoice_Block_Adminhtml_Renderer_addTrackingColumnToGrid'
    ));

}
}

步骤2.b 然后我们需要使用可用的跟踪信息填充该字段

  

'渲染器'=&gt;   'SNH_ShipMailInvoice_Block_Adminhtml_Renderer_addTrackingColumnToGrid'

应调用/Block/Adminhtml/Renderer/addTrackingColumnToGrid.php中的addTrackingColumnToGrid.php

*当前问题:错误 * * 这是我的白页无法解答的地方

步骤2.c 查找每个订单的跟踪编号。目前未经测试/未经证实

// HOW DO I POPULATE VAR $order for each line? 
$shipmentCollection = Mage::getResourceModel('sales/order_shipment_collection')->setOrderFilter($order)->load();

foreach ($shipmentCollection as $shipment){     
    // This will give me the shipment IncrementId, but not the actual tracking information.
    foreach($shipment->getAllTracks() as $tracknum) {
        $tracknums[]=$tracknum->getNumber(); }  
        // How to show the tracking information     
        // CODE HERE 
    }
}

第3步然后,当我点击下拉选项Masssaction(已编程)后,后端应仅处理所选项目并将跟踪ID存储到货件(不久之后创建)

(之后继续发票和发货)

提前致谢

1 个答案:

答案 0 :(得分:3)

如果我可以提出更简单的建议:

  1. 添加一个显示跟踪编号的列。
  2. 如果不存在跟踪号,则会显示“添加跟踪”的链接。
  3. 存在跟踪号码,将跟踪号码显示为超链接。在其下方还有一个“添加跟踪”链接,每个订单都有多个跟踪号。
  4. 点击“添加跟踪”链接会将链接转换为文本字段。单击跟踪编号(如果存在),将跟踪编号转换为预填充跟踪编号值的文本字段(用于编辑)。
  5. 点击后,保存后将文本字段转换回文本链接。我建议在保存过程中“加载”视觉提示。
  6. 如何将列添加到“销售订单”网格

    设置事件观察者。 (您可以在config.xml文件中使用重写,但这可能会导致与其他模块冲突。)

    <adminhtml>
        <events>
            <core_block_abstract_prepare_layout_before>
                <observers>
                    <Namespace_Module_Observer_addTrackingColumnToGrid>
                        <type>model</type>
                        <class>Namespace_Module_Observer</class>
                        <method>addTrackingColumnToGrid</method>
                    </Namespace_Module_Observer_addTrackingColumnToGrid>
                </observers>
            </core_block_abstract_prepare_layout_before>
        </events>
    </adminhtml>
    

    ./app/code/local/Namespace/Module/Model/Observer.php中创建您的观察者。看起来应该是这样的。

    <?php
    class Namespace_Module_Model_Observer
    {
        public function addTrackingColumnToGrid($observer)
        {
            // this will return the block name for every block triggered by the observer
            $block = $observer->getEvent()->getBlock();
    
            // filter - we only want the block for the sales order grid
            if ($block instanceof Mage_Adminhtml_Block_Sales_Order_grid){
    
                // well, that was easy!
                $block->addColumn('tracking_number', array(
                    'header' => Mage::helper('sales')->__('Tracking number')
                ));
    
            }
        }
    }
    

    尝试查看Mage_Adminhtml_Block_Widget_Grid,了解有关如何使用addColumn方法的线索。对于所有Magento管理网格而言,它几乎是通用的,这很好。但是,如果您希望添加自定义功能(除了检索数据),您很可能需要弄清楚如何应用“渲染器”。

    一旦你找到了这个部分,你只需要设置一个Ajax控制器并输入一些JavaScript来将更新信息传输给你的控制器。

    这是一个非常广泛的问题,所以我不能完全为你做这一切(没有写一个扩展名),但我会尽力帮助你。

    对于它的价值,您可以在Creativemgroup.com上查看Tracking Import模块。街道上的Word是该模块即将推出的版本,包括您正在寻找的就地编辑功能。