【问题标题】:Magento - How to add a custom render to a custom column in the orders grid?Magento - 如何将自定义渲染添加到订单网格中的自定义列?
【发布时间】:2015-09-10 06:55:52
【问题描述】:

对于 Magento 网站,我想在后台的订单网格中显示自定义选项。

目前,我已经在this guidethis guide 的帮助下成功地将自定义列添加到网格中,使用模块避免重写核心类。

现在,我有一个长字符串出现在一个列中,我想对其进行序列化以获得自定义选项,但我无法使用自定义渲染器。

/app/code/local/Atwix/ExtendedGrid/Helper/Data.php:

public function getProductOptionsColumnParams()
{
    return array(
        'header' => 'Products Options',
        'index' => 'product_options',
        'type' => 'text',
        'renderer' => array('Atwix_ExtendedGrid_Model_Observer', 'render'),
    );
}

我添加了一个链接到模型观察者的渲染器(/app/code/local/Atwix/ExtendedGrid/Model/Observer.php),但这不起作用,它只显示一个白页而不是表...

我在哪里做错了? “渲染”功能不能在观察者中?我试图在 /app/code/local/Mage/Adminhtml/Block/Sales/Order (靠近 Grid.php)中创建一个扩展 Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract 的类,但它也不起作用。

更新 1:

它不起作用,我用代码创建了文件/app/code/local/Atwix/ExtendedGrid/Block/Adminhtml/ExtendedGrid/Renderer/Renderer.php

class Atwix_ExtendedGrid_Block_Product extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
{
    public function render(Varien_Object $row) {
        $value =  $row->getData($this->getColumn()->getIndex());
        return '<span style="color:red;">'.$value.'</span>';
    }
}

在 /app/code/local/Atwix/ExtendedGrid/Helper/Data.php 我有这个代码:

class Atwix_ExtendedGrid_Helper_Data extends Mage_Core_Helper_Abstract
{
    /**
     * parameters for addColumnAfter method
     * @return array
     */
    public function getSkusColumnParams()
    {
        return array(
            'header' => 'SKUs',
            'index' => 'skus',
            'type' => 'text',
            'filter_condition_callback' => array('Atwix_ExtendedGrid_Model_Observer', 'filterSkus'),
        );
    }
    /**
     * parameters for addColumnAfter method
     * @return array
     */
    public function getProductOptionsColumnParams()
    {
        return array(
            'header' => 'Products Options',
            'index' => 'product_options',
            'type' => 'text',
            'renderer' => array('Atwix_ExtendedGrid_Block_Product', 'render'),
        );
    }
}

【问题讨论】:

  • 渲染器在做什么?有什么解释吗?

标签: magento render adminhtml


【解决方案1】:

我使用了一种更简单的方法来处理颜色。 首先,我覆盖本地文件夹上的核心网格:

app/code/local/Mage/Adminhtml/Block/Sales/Order/Grid.php

然后我添加了我的自定义列并向其中添加了渲染器属性。

       $this->addColumn('fee_amount', array(
        'header' => Mage::helper('sales')->__('Amount to be Paid Later'),
        'index' => 'fee_amount',
        'filter_index'=>'fee_amount',
        'type'  => 'currency',
        'currency' => 'base_currency_code',
        'width' => '80px',
        'renderer'  => 'Mage_Adminhtml_Block_Sales_Order_Renderer_Red',

    ));

然后在

下创建Red.php
app/code/local/Mage/Adminhtml/Block/Sales/Order/Renderer/Red.php

在 red.php 上我添加了以下内容:

class Mage_Adminhtml_Block_Sales_Order_Renderer_Red extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
{
      public function render(Varien_Object $row)
      {
          $value =  $row->getData($this->getColumn()->getIndex());

               return '<div style="color:#FFF;font-weight:bold;background:#F55804;border-radius:8px;width: 40%;margin-left: 40px;">$'.number_format( $value , 2).'</div>';


      }
}

【讨论】:

    【解决方案2】:

    renderer试试这个

    public function getProductOptionsColumnParams()
        {
            return array(
                'header' => 'Products Options',
                'index' => 'product_options',
                'type' => 'text',
                'renderer' => 'Atwix_ExtendedGrid_Block_Product',
            );
        }
    

    【讨论】:

    • 我还有一张空白表。奇怪的是我没有出现错误!但是我已经激活了错误显示...
    • 只想补充一点:magento 类命名约定可以而且应该像往常一样在这里使用。对于块,它可能是 'renderer' => 'atwix_extendedgrid/product'
    【解决方案3】:

    你必须在Package_Name/Module_Name/Block/Adminhtml/Module_Name/Renderer/Renderer.php创建你的自定义渲染文件

    【讨论】:

    • 感谢您的回答,但它不起作用,我已更新我的问题以向您展示我所做的事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-13
    相关资源
    最近更新 更多