Сетка администратора - Назначьте класс 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 к столбцу.
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;
}
Вместо того, чтобы редактировать шаблон, я добавил базовый модуль для перезаписи /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 заставил меня двигаться в правильном направлении. Я надеялся использовать встроенные методы для внесения этой модификации, но пока этого будет достаточно. Принимая предыдущий ответ, так как он направил меня в правильном направлении, но этот метод также работает.