Php Magento管理网格列格式-渲染器?
我希望sales_order_create网格在同一列中同时显示价格和特价,为此我添加了:Php Magento管理网格列格式-渲染器?,php,magento,Php,Magento,我希望sales_order_create网格在同一列中同时显示价格和特价,为此我添加了: ->addAttributeToSelect('special_price') 添加到_prepareCollection()函数,然后添加: $this->addColumn('special_price', array( 'header' => Mage::helper('sales')->__('Special Price'),
->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的新手,所以如果可以的话,我需要用一种基本的方式来解释它
谢谢我已经设法让它工作起来了,我的代码很糟糕,但它可能会帮助将来偶然发现它的任何人 我看了价格栏,发现:
'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
然后,我将此渲染器添加到我的特殊价格栏:
'renderer' => 'adminhtml/sales_order_create_search_grid_renderer_special',
我的Special.php代码如下所示(警告:此代码非常糟糕,但它可以正常工作,所以我很高兴):
class Mage\u Adminhtml\u Block\u Widget\u Grid\u Column\u Renderer\u Special
扩展Mage\u Adminhtml\u Block\u Widget\u Grid\u Column\u Renderer\u Abstract
{
/**
*渲染网格列
*
*@param Varien_对象$row
*@返回字符串
*/
公共函数渲染(Varien_对象$row)
{
$dataArr=array();
foreach($this->getColumn()->getIndex()作为$index){
如果($data=$row->getData($index)){
//$dataArr[]=$data;
$dataArr[]=数字_格式((浮点)$data,2,'.','';
}
}
$data=join($this->getColumn()->getSeparator(),$dataArr);
//TODO运行列类型渲染器
$price='';
$special='';
if(strlen($dataArr[0])>0){
如果(strlen($dataArr[1])>0){
$price='£;'.$dataArr[0].';
$special='£;'.$dataArr[1];
}
否则{
$price='£;'.$dataArr[0];
$special='';
}
}
返回$price.$special;
}
}
结果是,如果没有价格(分组产品),则条目为空,如果没有特殊条目,则条目为RRP,如果有特殊条目,则条目为RRP特殊价格
我确信代码是可以改进的,但它是有效的通常您通过设置
“type”=>“price”
来获得价格格式,不知道您是否可以设置两种类型,或者是否可以放弃concat类型。否则,我认为编写自己的渲染器会有用。。。不过,我现在手头没有教程。
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;
}
}