Magento管理网格列格式化 - 渲染器?

时间:2014-10-10 11:44:43

标签: php magento

我希望sales_order_create网格在同一列中显示价格和特价,我这样做是通过添加:

    ->addAttributeToSelect('special_price')

到_prepareCollection()函数,然后添加:

    $this->addColumn('special_price', array(
        'header'    => Mage::helper('sales')->__('Special Price'),
        'sortable'     => false,
        'index'        => array('price', 'special_price'),
        'type'         => 'concat',
        'separator'    => ' -- ',
        'width'        => '140px',
    ));

到_prepareColumns()函数。

这个有效!结果是一个新列,作为示例,显示:

79.9800 - 34.9900

如何格式化,以便采用货币格式? £XX.XX

此外,它可以设计风格吗?所以它看起来像这样:£79.98(£34.99)

如果无法设置样式,只需使用货币格式就可以了。

我认为这与渲染器有关,但我是Magento的新手,所以如果可以的话,需要以基本的方式解释。

由于

1 个答案:

答案 0 :(得分:1)

我已经成功实现了这项工作,我的代码非常糟糕,但它可能有助于将来偶然发现这一点。

我查看了价格列并看到:

'renderer'  => 'adminhtml/sales_order_create_search_grid_renderer_price',

导航到app / code / core / Mage / Adminhtml / Block / Widget / Grid / Column / Renderer后,我注意到了一个concat渲染器。

我从这个目录复制了Concat.php并创建了一个本地版本,我把它命名为Special.php以避免任何冲突:

/app/code/local/Mage/Adminhtml/Block/Widget/Grid/Column/Renderer/Special.php

然后我将此渲染器添加到我的special_price列:

'renderer'  => 'adminhtml/sales_order_create_search_grid_renderer_special',

我的Special.php代码如下(警告:这段代码非常可怕,但它确实有效,所以我很高兴):

class Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Special
extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
{
/**
 * Renders grid column
 *
 * @param   Varien_Object $row
 * @return  string
 */
public function render(Varien_Object $row)
{
    $dataArr = array();

    foreach ($this->getColumn()->getIndex() as $index) {
        if ($data = $row->getData($index)) {
            //$dataArr[] = $data;
                            $dataArr[] = number_format((float)$data, 2, '.', '');
        }
    }
    $data = join($this->getColumn()->getSeparator(), $dataArr);
    // TODO run column type renderer

            $price = '';
            $special = '';

            if (strlen($dataArr[0]) > 0) {

            if (strlen($dataArr[1]) > 0) {
              $price = '<span style="text-decoration:line-through">&pound;' . $dataArr[0] . '</span>';
              $special = ' &pound;' . $dataArr[1];
            }
            else {
              $price = '&pound;' . $dataArr[0];
              $special = '';
            }

            }

            return $price . $special;
}
}

结果是,如果没有价格(分组产品),该条目为空白,如果没有特殊条目是RRP,如果有特殊条目,则 RRP 特价< / p>

我确信代码可以改进,但它可以正常工作