Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Magento:在后端数据网格中的on列中显示不同的操作链接_Php_Magento_Custom Action_Backend - Fatal编程技术网

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

Php Magento:在后端数据网格中的on列中显示不同的操作链接,php,magento,custom-action,backend,Php,Magento,Custom Action,Backend,我目前正在Magento后端处理自定义产品列表 以下是我当前用于添加行的代码: $this->addColumn('action_widget', array( 'header' => Mage::helper('catalog')->__('Action'), 'width' => '110px', 'type' => 'action', 'getter' =&g

我目前正在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

您需要为此创建自定义网格列渲染器:

  • 创建类并重写_transformActionData()或render()方法,具体取决于您需要什么:

    class Mycompany_Mymodule_Block_Adminhtml_Template_Grid_Renderer_Myrendered extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Action 
    {
      ... 
    }
    
  • 告诉magento为此列使用自定义渲染器:

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

  • 对于那些尝试过Zyava的答案但没有成功的人,你可能需要这样做:

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

    我不知道错误在哪里,因为这不必要,但是。。。这是给我的。

    下面的代码适合我。
    
    $this->addColumn('action',
    排列(
    'header'=>Mage::helper('orderemplerance')->('Action'),
    “宽度”=>“100”,
    “类型”=>“操作”,
    'getter'=>'getOrderId',
    “操作”=>数组(
    排列(
    'caption'=>Mage::helper('orderemplerance')->('View Order'),
    'url'=>array('base'=>adminhtml/sales\u order/view'),
    '字段'=>'订单id'
    )
    ),
    “过滤器”=>false,
    “渲染器”=>“Mycompany\u Mymodule\u Block\u Adminhtml\u Template\u Grid\u renderer\u Myrendered”,
    'sortable'=>false,
    '索引'=>'存储',
    “是否为系统”=>正确,
    ));
    

    类Mycompany\u Mymodule\u Block\u Adminhtml\u Template\u Grid\u Rendered\u Myrendered扩展了Mage\u Adminhtml\u Block\u Widget\u Grid\u Column\u Renderer\u Action { 公共函数渲染(Varien_对象$row) { $value=$row->getData('increment_id'); 如果($value=$row->getData('increment\u id')) 返回“getUrl('adminhtml/sales\u order/view',array('order\u id'=>$row->getData('order\u id'))”)。“>view order'; 其他的 返回false; } }

    有一种更简单的方法:

    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;
    }
    

    比使用渲染器更容易!