我希望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的新手,所以如果可以的话,需要以基本的方式解释。
由于
答案 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">£' . $dataArr[0] . '</span>';
$special = ' £' . $dataArr[1];
}
else {
$price = '£' . $dataArr[0];
$special = '';
}
}
return $price . $special;
}
}
结果是,如果没有价格(分组产品),该条目为空白,如果没有特殊条目是RRP,如果有特殊条目,则 RRP 特价< / p>
我确信代码可以改进,但它可以正常工作