Сетка администратора - Назначьте класс CSS новым заказам


Я хотел бы просто добавить класс new-order в строку заказа (или поле, что кажется проще), если заказ был размещен в последний день.

Для тестирования я ничего не перенес в переопределенный класс, я просто работаю непосредственно в классе app/code/core/Mage/Adminhtml/Widget/Block/Grid/Column/Renderer/Longtext.php, просто чтобы заставить его работать.

Я в основном настроил его так, как мне нравится, но моя логика заключается в применении класса ко всем строкам, а не только к тем, которые я указываю. Я чувствую, что упускаю что-то простое. Вот некоторые код:

class Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Longtext extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
{
    public function render(Varien_Object $row)
    {
        // ...native code
        if ($this->getColumn()->getId() == 'real_order_id') {
            // realized this is available already with $row->getData()
            // $order = Mage::getModel('sales/order')->loadByIncrementId($text);

            $yesterday = strtotime("-1 day", Mage::getModel('core/date')->gmtTimestamp());
            $yesterday = Mage::getModel('core/date')->date(null, $yesterday);

            if ($row->getCreatedAt() > $yesterday) {
                $this->getColumn()->setColumnCssClass('new-order');
            };
        }

        return $text;
    }
}

Когда я отсюда вызываю setColumnCssClass(), он правильно устанавливает данные в объекте getData(), но добавляет их для всех строк; однако на самом деле он не применяет этот класс CSS к столбцу.

Author: Keyul Shah, 2013-02-19

2 answers

Вместо этого вы должны сделать это в шаблоне сетки. Вы можете добавить новый идентификатор в строку заказа "tr". В качестве примера мы выделим заказы, размещенные за последние 24 часа.

Перейдите в раздел приложение/дизайн/adminhtml/по умолчанию/по умолчанию/шаблон/виджет/сетка.phtml. Начиная со строки 154:

...
<?php foreach ($this->getCollection() as $_index=>$_item): 
        $orderCreateAt = strtotime($_item->getCreatedAt());
        $last24hours = strtotime('24 hours ago'); ?>
        <tr id ="
        <?php if($orderCreateAt > $last24hours)
            { echo 'new-order'; }
        ?>"
        title="<?php echo $this->getRowUrl($_item) ?>"<?php if ($_class = $this->getRowClass($_item)):?> class="<?php echo $_class; ?>"<?php endif;?> >
...

Теперь пренебрежение стилем в css должно быть простым. Перейдите в раздел скин/adminhtml/по умолчанию/по умолчанию/boxes.css и добавьте стиль, который вы хотели бы иметь

.grid table tr#new-order{
    background-color: #FF0000;
}
 3
Author: osondoar, 2013-02-20 19:26:34

Вместо того, чтобы редактировать шаблон, я добавил базовый модуль для перезаписи /Adminhtml/Widget/Grid/Column/Renderer/Longtext.php.

public function render(Varien_Object $row)
{
    //...native code

    // Custom stuff here. Render the order # in red if the order is less than a day old.
    if ($this->getColumn()->getId() == 'real_order_id') {

        $yesterday = strtotime("-24 hours", Mage::getModel('core/date')->gmtTimestamp());
        $yesterday = Mage::getModel('core/date')->date(null, $yesterday);

        if ($row->getCreatedAt() > $yesterday) {
            $text = '<span style="color: red; font-weight: bold;">' . $text . '</span>';
        };
    }

    return $text;
}

@osondoar заставил меня двигаться в правильном направлении. Я надеялся использовать встроенные методы для внесения этой модификации, но пока этого будет достаточно. Принимая предыдущий ответ, так как он направил меня в правильном направлении, но этот метод также работает.

 2
Author: pspahn, 2013-02-20 17:28:07