我目前正在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验证拒绝了。
有没有办法做到这一点,没有一个巨大的解决方案?
如果没有,是否可以根据产品集合中的属性创建禁用链接?
谢谢大家!个系统
您需要为此创建自定义网格列渲染器:
-
创建类并覆盖_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', // ...
下面的代码是为我工作。
$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 'getUrl('adminhtml/sales_order/view',array('order_id'=>$row->getData('order_id'))).'">View Order'; else return false; } }
对于那些尝试过Zyava的答案但它不起作用的人,您可能需要这样做:
'filter' => false,
'renderer' => Mage::getConfig()->getBlockClassName('mycompany_mymodule/adminhtml_template_grid_renderer_myrenderer'),
'sortable' => false,
'index' => 'stores',
我不知道bug在哪里,因为这应该是不必要的,但是…
有一个更简单的方法:
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;
}