1

在带有网格的后端管理页面上,我需要更改行组的背景颜色。默认情况下不是逐行交替颜色,而是根据已知的列值对组进行着色。

我正在研究这个 SO 问题:在管理和其他类似页面中更改订单网格上的行颜色的方法。但无法重现我需要的内容,因为这个问题是指将重复的列中的值。

我需要为不同的组使用不同的颜色,或者至少使用这些组的替代颜色。

也许是这样的:

在此处输入图像描述

4

3 回答 3

9

对于任何寻求解决方案的人。我在 Incho 网站上使用了本教程:为 Magento 网格中的自定义列添加自定义渲染器。有一些 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>';
    }
}
?>

结果:

带有渲染列的网格屏幕截图

于 2012-12-12T10:19:01.317 回答
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.' >';
    }
于 2014-06-23T09:47:49.533 回答
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>';
}
于 2018-07-13T11:12:57.373 回答