Как создать новый геттер в сетке Magento

У меня есть следующий фрагмент кода в моей пользовательской сетке модулей.

     $this->addColumn('action',
     array(
            'header'    =>  Mage::helper('module')->__('Action'),
            'width'     => '100',
            'type'      => 'action',
            'getter'    => 'getId',     
            'actions'   => array(
                array(
                    'caption'   => Mage::helper('module')->__('Edit'),
                    'url'       => array('base'=> '*/*/edit'),
                    'field'     => 'id',                
                )
            ),
            'filter'    => false,
            'sortable'  => false,
            'index'     => 'stores',
            'is_system' => true,
    )); 

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

Используя это, я получаю следующий URL-адрес редактирования

http://domain.com/index.php/module/adminhtml_module/edit/id/5/key/a19618bbaa3ee98ed395bc2fa552de35/

если к URL-адресу будет добавлен другой геттер, например «геттер» => «getStoreId»,

Чем мой URL должен быть таким:

http://domain.com/index.php/module/adminhtml_module/edit/id/5/store/5/key/a19618bbaa3ee98ed395bc2fa552de35/

Может ли кто-нибудь направить меня, как я могу это сделать.?

Я пытался использовать следующий код, но это не сработало.

    $this->addColumn('action',
     array(
            'header'    =>  Mage::helper('module')->__('Action'),
            'width'     => '100',
            'type'      => 'action',
            'getter'    => array('getId','getStoreId'),     
            'actions'   => array(
                array(
                    'caption'   => Mage::helper('module')->__('Edit'),
                    'url'       => array('base'=> '*/*/edit'),
                    'field'     => array('id',store_id),                
                )
            ),
            'filter'    => false,
            'sortable'  => false,
            'index'     => 'stores',
            'is_system' => true,
    ));

person tinkesh    schedule 22.03.2013    source источник


Ответы (2)


Чтобы добавить ключ магазина к URL-адресу, попробуйте изменить actions на

'actions'   => array(
    array(
        'caption' => Mage::helper('catalog')->__('Edit'),
        'url'     => array(
            'base'=>'*/*/edit',
            'params'=>array('store'=>$this->getRequest()->getParam('store'))
        ),
        'field'   => 'id'
    )
),

обновить $this->getRequest()->getParam('store') по мере необходимости

Ссылка /app/code/core/Mage/Adminhtml/Block/Catalog/Product/Grid.php

$this->addColumn('action',
    array(
        'header'    => Mage::helper('catalog')->__('Action'),
        'width'     => '50px',
        'type'      => 'action',
        'getter'     => 'getId',
        'actions'   => array(
            array(
                'caption' => Mage::helper('catalog')->__('Edit'),
                'url'     => array(
                    'base'=>'*/*/edit',
                    'params'=>array('store'=>$this->getRequest()->getParam('store'))
                ),
                'field'   => 'id'
            )
        ),
        'filter'    => false,
        'sortable'  => false,
        'index'     => 'stores',
));
person Renon Stewart    schedule 22.03.2013
comment
Кажется, это более чистый подход, чем добавление нового класса рендерера для простой вещи. Спасибо, и, на мой взгляд, это должно быть отмечено как первый ответ. - person Haijerome; 10.09.2015

Если вы хотите передать более одного значения из сетки, вы можете использовать собственный рендерер:

    $this->addColumn('action',
     array(
        'header'    =>  Mage::helper('module')->__('Action'),
        'width'     => '100',
        'type'      => 'text',
        'filter'    => false,
        'sortable'  => false,
        'is_system' => true,
        'renderer'  => 'Company_MyModule_Block_Adminhtml_Renderer_Actionlink',
    ));

Рендерер:

class Company_MyModule_Block_Adminhtml_Renderer_Actionlink extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract {
  public function render(Varien_Object $row) {
    $url=$this->getUrl('*/*/edit', array('id'=>$row->getId(), 'storeId' => $row->getStoreId()));
    return sprintf("<a href='%s'>%s</a>", $url, Mage::helper('catalog')->__('Edit'));
  }
}
person lbiegaj    schedule 03.12.2013