Как отобразить сумму двух полей в сетке в панели администратора Magento - PullRequest
3 голосов
/ 30 октября 2011

Я работаю над расширением, в котором пользователь вводит другую цену для «Стоимость штампа, Стоимость чернил, Стоимость формы ". В настоящее время в сетке данных я показываю значение одного поля

$this->addColumn('stamp_cost', array(
    'header'    => Mage::helper('imprint')->__('Stamp Cost'),
    'width'     => '100px',
    'type'  => 'price',
    'currency_code' => $store->getBaseCurrency()->getCode(),
    'index'     => 'stamp_cost'
));

Но теперь мне нужно показать сумму всех этих полей в одном столбце

Как мы можем показать сумму двух полей в одном столбце в сетке данных администратора magento?

Ответы [ 2 ]

2 голосов
/ 30 октября 2011

По сути, есть два способа сделать это.Добавьте поле в коллекцию и получите данные из базы данных или рассчитайте их в PHP на основе 3 значений, возвращаемых из БД.Делать первый путь с коллекцией Magento было бы, на мой взгляд, слишком сложно.вместо этого вы хотите использовать Renderer (Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract)

Сначала, внутри папки Block/Adminhtml вашего плагина, создайте новую папку с именем Renderer.Внутри него создайте новый файл с именем CostSum.php со следующим содержимым:

<?php 
class Company_Module_Block_Adminhtml_Renderer_CostSum extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
{
    public function render(Varien_Object $row)
    {
         return $row->getStampCost() + $row->getInkCost() + $row->getFormCost();
    }
}

Затем в сетке создайте новый столбец

$this->addColumn('cost_total', array(
    'header'    => Mage::helper('imprint')->__('Stamp Cost'),
    //'index'     => 'Im not sure this is necessary',
    'type'      => 'price',
    'currency_code' => $store->getBaseCurrency()->getCode(),
    'renderer' => new Company_Module_Block_Adminhtml_Renderer_CostSum() 
));

Надеюсь, это поможет!

0 голосов
/ 26 июня 2016

Более правильный путь - это 'renderer' => 'company_module / adminhtml_renderer_costSum'

Как говорит @Zyava, правильный вариант - это.Но на самом деле это не «company_module».Вместо этого вы должны вызывать его так, как вы объявили свои блоки в файле config.xml.

<blocks>
    <declaration>
        <class>Company_Module_Block</class>
    </declaration>
</blocks>

Итак, в этом случае вы должны создать 'renderer' как:

'renderer'=> 'объявление / adminhtml_renderer_costSum'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...