如何将自定义信息部分动态注入magento销售订单视图页面(无需修改模板)?

时间:2016-01-23 21:33:52

标签: php magento

我正在开发一个在销售订单上创建自定义订单属性的模块。我已经实现了这样的目标:

<?php

// Init installer
$installer = new Mage_Sales_Model_Mysql4_Setup;

// Attribute Template
$attribute  = array
(
    'type'            => 'varchar',
    'backend_type'    => 'varchar',
    'frontend_input'  => 'varchar',
    'is_user_defined' => true,
    'label'           => '',
    'visible'         => true,
    'required'        => false,
    'user_defined'    => false,
    'searchable'      => false,
    'filterable'      => false,
    'comparable'      => false,
    'default'         => ''
);

// Sales Rep Attribute
$sales_rep_attribute = $attribute;
$sales_rep_attribute['label'] = 'Sales Rep';
$installer->addAttribute('order', 'sales_rep', $sales_rep_attribute);

// Delivery Date Attribute
$delivery_date_attribute = $attribute;
$delivery_date_attribute['label'] = 'Delivery Date';
$installer->addAttribute('order', 'delivery_date', $delivery_date_attribute);

// PPH Payment Type Attribute
$pph_payment_type_attribute = $attribute;
$pph_payment_type_attribute['label'] = 'PPH Payment Type';
$installer->addAttribute('order', 'pph_payment_type', $pph_payment_type_attribute);

// PPH Invoice Id Attribute
$pph_invoice_id_attribute = $attribute;
$pph_invoice_id_attribute['label'] = 'PPH Invoice Id';
$installer->addAttribute('order', 'pph_invoice_id', $pph_invoice_id_attribute);

// PPH Tx Id Attribute
$pph_tx_id_attribute = $attribute;
$pph_tx_id_attribute['label'] = 'PPH Tx Id';
$installer->addAttribute('order', 'pph_tx_id', $pph_tx_id_attribute);

// Finish installer
$installer->endSetup();

创建这些属性后,我尝试将delivery date设置为例如它可以避免订单,我可以检索它。

我想在magento后端的订单视图页面中显示这些自定义订单属性。我知道您可以通过编辑此文件来完成此操作:app/design/adminhtml/default/default/template/sales/order/view/info.phtml并添加以下内容:

<?php if($_order->getDeliveryDate()): ?>
<tr>
    <td class=”label”><label><?php echo Mage::helper(‘sales’)->__(‘Delivery Date’) ?></label></td>
    <td class=”value”><strong><?php echo $_order->getDeliveryDate(); ?></strong></td>
</tr>
<?php endif; ?>

但这是体力劳动。订单视图模板也可能被另一个模块覆盖。

是否可以让我的模块只是将其他订单查看部分注入页面而无需任何手动编辑?我应该怎么做呢?

1 个答案:

答案 0 :(得分:0)

您需要创建自己的一个小扩展,这将能够将您的信息添加到sales_order_view布局。

这样可以避免与其他扩展冲突。

布局文件(/app/design/adminhtml/default/default/layout/your_module_name.xml)的内容应该是这样的:

<layout>    
    <adminhtml_sales_order_view>
        <reference name="content">
            <block type="your_module_name/adminhtml_sales_order_view_additional" template="your/module/name/additional_info.phtml" />
        </reference>
    </adminhtml_sales_order_view>
</layout> 

在模板中添加所需的数据。此外,您可以添加将您的块放在sales_order_view页面上的任何位置的java脚本。