在带有网格的后端管理页面上,我需要更改行组的背景颜色。默认情况下不是逐行替换颜色,而是根据已知列值着色组。
我正在研究这个问题:Approach on changing row color on orders grid in admin和其他类似的页面。但是无法重现我需要的东西,因为这个问题指的是一个将重复的列中的值。
我需要为不同的组使用不同的颜色,或者至少使用这些组的替代颜色。
也许是这样的:
答案 0 :(得分:9)
对于任何寻找解决方案的人。我在Inchoo网站上使用了本教程:Add custom renderer for a custom column in Magento grid。有一些SO问题也有助于理解解决方案。
我没有设法改变最初想要的整行背景颜色,我只是修改单元格背景。但最后,足以指出用户这一行有些不同。我所做的是添加一个新的自定义列。在renderer
属性上,我引用了一个新类。
$this->addColumn('collision_type', array(
'header' => $helper->__('Collision'),
'align' => 'center',
'index' => 'collision_type',
'type' => 'action',
'renderer'=> new Dts_Banners_Block_Adminhtml_Collisions_Grid_Renderer_Collisiontype(),
));
我将所需的类放在一个新的子树中:
Grid
└─ Renderer
└─ Collisiontype.php
这是应该呈现列的新类。要使用不同的颜色,只需要评估$value
变量并为相应的值应用不同的颜色样式,这就是我现在正在做的事情。
<?php
class Dts_Banners_Block_Adminhtml_Collisions_Grid_Renderer_Collisiontype 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:100%">'.$value.'</div>';
}
}
?>
结果:
答案 1 :(得分:1)
就我而言,我使用了上面的代码片段。我需要在网格中为类别创建自定义无线电列。所以我把所有条件都放在这个。
public function render(Varien_Object $row) {
$category = Mage::registry('current_category');
$screenId = $category->getCategoryAttachedID();
if($row->getId()==$screenId)$checked='checked="checked"';
else $checked='';
return '<input type="radio" name="screen_id" value="'.$row->getId().'" '.$checked.' >';
}
答案 2 :(得分:1)
上面的答案很好,但是有时您想要做同样的事情而不创建新文件。
这是获得网格文件中剩余相同结果的另一种方法。
$this->addColumn('collision_type', array(
'header' => $helper->__('Collision'),
'align' => 'center',
'index' => 'collision_type',
'type' => 'action',
'frame_callback' => [$this, '_formatCell']
));
然后在同一文件中
public function _formatCell($value, Varien_Object $row, Mage_Adminhtml_Block_Widget_Grid_Column $column)
{
$value = $row->getData($column->getIndex());
return '<div style="color:#FFF;font-weight:bold;background:#F55804;border-radius:8px;width:100%">'.$value.'</div>';
}