Magento, другой цвет фона для группы строк на внутренней сетке

На бэкэнд-странице администратора с сеткой мне нужно изменить цвет фона для групп строк. Не чередовать цвет построчно, как по умолчанию, а раскрашивать группы в соответствии с известным значением столбца.

Я изучал этот вопрос SO: Подход к изменению цвета строки в сетке заказов в admin и других подобных страницах. Но не могу воспроизвести то, что мне нужно, так как этот вопрос относится к значению в столбце, которое будет повторяться.

Мне нужно либо использовать разные цвета для разных групп, либо, по крайней мере, использовать альтернативные цвета этих групп.

Может быть, что-то вроде этого:

введите здесь описание изображения


person Yaroslav    schedule 07.12.2012    source источник
comment
Вы хотите изменить цвет ячейки или всей строки?   -  person ceckoslab    schedule 08.12.2012
comment
Вся группа строк, содержащих столбец с одинаковым значением   -  person Yaroslav    schedule 08.12.2012
comment
Я не уверен, что у меня это вообще получилось. Не могли бы вы добавить графику с объяснением или, может быть, просто показать пример? Спасибо.   -  person ceckoslab    schedule 08.12.2012
comment
Кстати, я работаю над чем-то подобным, и вот мой прогресс: awesomescreenshot.com/0fcp2sn47   -  person ceckoslab    schedule 08.12.2012
comment
Ну, может быть что-то подобное, надо будет проверить. SO, на который я ссылаюсь в своем вопросе, действительно пытается решить что-то вроде того, что вы делаете. В понедельник постараюсь посмотреть, что можно сделать. Я буду использовать ваш скриншот, чтобы показать пример того, что я хочу, это нормально для вас?   -  person Yaroslav    schedule 08.12.2012
comment
Конечно :) Кто знает, может кто ответит до понедельника.   -  person ceckoslab    schedule 08.12.2012
comment
Ага... просто дома у меня ничего не установлено... знаешь, оставь работу на работе ;)   -  person Yaroslav    schedule 08.12.2012
comment
Спасибо за наглядный материал... Быстрый вопрос: это для пользовательского модуля Magento, созданного вами, или вам нужно сделать это для некоторых существующих сеток в области администрирования Magento?   -  person ceckoslab    schedule 08.12.2012


Ответы (3)


Для тех, кто ищет решение. Я использовал это руководство на веб-сайте Inchoo: Добавить пользовательский рендерер для пользовательского столбца в сетке 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>';
    }
}
?>

И результат:

Снимок экрана сетки с визуализированным столбцом

person Yaroslav    schedule 12.12.2012

В моем случае я использовал приведенный выше фрагмент кода. Мне нужно было создать собственный столбец радио в сетке для категории. Поэтому я поставил все условия для этого вот так.

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.' >';
    }
person mandeepsinghn    schedule 23.06.2014

Ответы выше хороши, но иногда вы хотите сделать то же самое, не создавая новый файл.
Вот еще один способ добиться того же результата, оставаясь в файле сетки.

$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>';
}
person Shadoweb    schedule 13.07.2018