2015-06-24 1 views
1

Для веб-сайта Magento я хотел бы показать пользовательские параметры в сетке заказов в backoffice.Magento - Как добавить пользовательский рендеринг в пользовательский столбец в сетке заказов?

В настоящее время я успешно добавил пользовательский столбец в сетку с помощью this guide и this guide, используя модуль, чтобы избежать перезаписи основных классов.

Теперь у меня длинная строка, появляющаяся в столбце, и я хотел бы сериализовать ее, чтобы иметь настраиваемые параметры, но я не могу использовать собственный рендерер.

/app/code/local/Atwix/ExtendedGrid/Helper/Data.php:

public function getProductOptionsColumnParams() 
{ 
    return array(
     'header' => 'Products Options', 
     'index' => 'product_options', 
     'type' => 'text', 
     'renderer' => array('Atwix_ExtendedGrid_Model_Observer', 'render'), 
    ); 
} 

Я добавил визуализатор, который связывает с Типовым наблюдателя (/ приложение/код/​​местные/Atwix/ExtendedGrid/Model/Observer.php), но это не работает, оно отображает только белую страницу вместо таблицы ...

Где я совершил ошибку? Функция «render» не может быть в Observer? Я попытался создать класс, который расширяет Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract в/app/code/local/Mage/Adminhtml/Block/Sales/Order (рядом с Grid.php), но он тоже не работает.

UPDATE 1:

Это не работает, я создал файл /app/code/local/Atwix/ExtendedGrid/Block/Adminhtml/ExtendedGrid/Renderer/Renderer.php с кодом:

class Atwix_ExtendedGrid_Block_Product extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract 
{ 
    public function render(Varien_Object $row) { 
     $value = $row->getData($this->getColumn()->getIndex()); 
     return '<span style="color:red;">'.$value.'</span>'; 
    } 
} 

А/приложения/код/​​местные/Atwix/ExtendedGrid/Helper/Data.php у меня есть этот код:

class Atwix_ExtendedGrid_Helper_Data extends Mage_Core_Helper_Abstract 
{ 
    /** 
    * parameters for addColumnAfter method 
    * @return array 
    */ 
    public function getSkusColumnParams() 
    { 
     return array(
      'header' => 'SKUs', 
      'index' => 'skus', 
      'type' => 'text', 
      'filter_condition_callback' => array('Atwix_ExtendedGrid_Model_Observer', 'filterSkus'), 
     ); 
    } 
    /** 
    * parameters for addColumnAfter method 
    * @return array 
    */ 
    public function getProductOptionsColumnParams() 
    { 
     return array(
      'header' => 'Products Options', 
      'index' => 'product_options', 
      'type' => 'text', 
      'renderer' => array('Atwix_ExtendedGrid_Block_Product', 'render'), 
     ); 
    } 
} 

ответ

0

Вы должны создать свой собственный файл визуализации в Package_Name/Module_Name/Block/Adminhtml/Module_Name/Renderer/Renderer.php

+0

Спасибо за ваш ответ, но он не работает, я имею обновил мой вопрос, чтобы показать вам, что я сделал. – NaoDav

1

Попробуйте это renderer

public function getProductOptionsColumnParams() 
    { 
     return array(
      'header' => 'Products Options', 
      'index' => 'product_options', 
      'type' => 'text', 
      'renderer' => 'Atwix_ExtendedGrid_Block_Product', 
     ); 
    } 
+0

У меня все еще есть пустой стол. Странно, что у меня нет ошибки! Тем не менее, я активировал отображение ошибок ... – NaoDav

+0

просто хочу добавить: соглашения о присвоении имен magento могут и должны использоваться здесь, как обычно. для блоков это может быть «renderer» => 'atwix_extendedgrid/product' – clinical

2

Я использовал способ более легкий подход к цвету. первого я переопределять основную сетку на моей локальной папке:

app/code/local/Mage/Adminhtml/Block/Sales/Order/Grid.php 

Затем я добавил свой собственный столбец и добавил атрибут рендерера к нему.

 $this->addColumn('fee_amount', array(
     'header' => Mage::helper('sales')->__('Amount to be Paid Later'), 
     'index' => 'fee_amount', 
     'filter_index'=>'fee_amount', 
     'type' => 'currency', 
     'currency' => 'base_currency_code', 
     'width' => '80px', 
     'renderer' => 'Mage_Adminhtml_Block_Sales_Order_Renderer_Red', 

    )); 

Затем создайте Red.php под

app/code/local/Mage/Adminhtml/Block/Sales/Order/Renderer/Red.php 

На red.php я добавил следующее:

class Mage_Adminhtml_Block_Sales_Order_Renderer_Red 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: 40%;margin-left: 40px;">$'.number_format($value , 2).'</div>'; 


     } 
}