Magento:在后端数据网格的一列中显示不同的操作链接

xoefb8l8  于 2023-10-19  发布在  其他
关注(0)|答案(4)|浏览(91)

我目前在Magento后端的自定义产品列表工作。
下面是我目前用来添加一行的代码:

$this->addColumn('action_widget',
    array(
        'header'    => Mage::helper('catalog')->__('Action'),
        'width'     => '110px',
        'type'      => 'action',
        'getter'    => 'getId',
        'actions'   => array(
            array(
                'caption' => Mage::helper('catalog')->__('Create Widget'),
                'url'     => array(
                    'base'=>'*/*/create_widget',
                    'params'=>array('store'=>$this->getRequest()->getParam('store'))
                ),
                'field'   => 'id'
            )
        ),
        'filter'    => false,
        'sortable'  => false,
        'index'     => 'stores',
));

这已经是首选了。
但现在我想在小部件已经创建时显示另一个操作链接(更新小部件),而不是创建链接。为了知道小部件已经创建,我将一个属性加入到集合中,当它不存在时,该属性为null,当它存在时,该属性为字符串。
我已经尝试使用自定义网格模板文件,将{actionAssign} '变量'放入URL并在模板中分配,但magento URL验证拒绝了这一点。
有没有什么方法可以做到这一点,而不需要一个巨大的工作区?
如果没有,是否可以根据我的产品集合中的属性创建禁用链接?
感谢大家!MRU

xhv8bpkk

xhv8bpkk1#

您需要为此创建自定义网格列渲染器:
1.创建类并覆盖_transformerData()或render()方法,这取决于你到底需要什么:

class Mycompany_Mymodule_Block_Adminhtml_Template_Grid_Renderer_Myrendered extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Action 
{
  ... 
}

1.告诉magento为这个列使用自定义渲染器:

// ...
'filter'    => false,
'renderer'  => 'mycompany_mymodule/adminhtml_template_grid_renderer_myrenderer',
'sortable'  => false,
'index'     => 'stores',
// ...
qojgxg4l

qojgxg4l2#

下面的代码是为我工作。

$this->addColumn('action',
            array(
                'header'    =>  Mage::helper('orderreminder')->__('Action'),
                'width'     => '100',
                'type'      => 'action',
                'getter'    => 'getOrderId',
                'actions'   => array(
                  array(
                        'caption'   => Mage::helper('orderreminder')->__('View Order'),
                        'url'       => array('base'=> 'adminhtml/sales_order/view'),
                        'field'     => 'order_id'
                    )
                ),
                'filter'    => false,
                'renderer'  => 'Mycompany_Mymodule_Block_Adminhtml_Template_Grid_Renderer_Myrendered',
                'sortable'  => false,
                'index'     => 'stores',
                'is_system' => true,
            ));
class Mycompany_Mymodule_Block_Adminhtml_Template_Grid_Renderer_Myrendered extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Action
{
    public function render(Varien_Object $row)
    {
       $value = $row->getData('increment_id');
        if($value = $row->getData('increment_id'))
            return '<a href="'.$this->getUrl('adminhtml/sales_order/view',array('order_id'=>$row->getData('order_id'))).'">View Order</a>';
        else
            return false;
    }
}
8fsztsew

8fsztsew3#

对于那些尝试了Zyava的答案并且它不起作用的人,你可能需要这样做:

'filter'    => false,
'renderer'  => Mage::getConfig()->getBlockClassName('mycompany_mymodule/adminhtml_template_grid_renderer_myrenderer'),
'sortable'  => false,
'index'     => 'stores',

我不知道窃听器在哪里,因为这应该没有必要,但是...是为了我

pxiryf3j

pxiryf3j4#

有一个更简单的方法:

protected function _prepareColumns()
{
    $this->addColumn('action1',
        array(
            'type' => 'action',
            'getter' => 'getId',
            'frame_callback' => array($this, 'decorateRow'),
            'actions' => array( ... )
            'index' => 'stores',
            'is_system' => true,
        ));
    return parent::_prepareColumns();
}

public function decorateRow($sVal, Mage_Core_Model_Abstract $oRow){
    return $oRow->getData('something') ? '' : $sVal;
}

相关问题