Magento adminhtml网格与javascript动作列

时间:2013-10-15 12:26:15

标签: javascript php magento

我正在设计一个基于我自己的模型的自定义adminhtml网格,我已经在网格中添加了一个动作列,我希望能够点击将一些文本复制到剪贴板。

所以在Grid.php的_prepareColumns()函数中,我添加了actions列,如下所示:

$this->addColumn('action',array(
            'header'    => Mage::helper('sales')->__('To Clipboard'),
            'width'     => '5%',
            'type'      => 'action',
            'getter'     => 'getId',
            'actions'   => array(
                    array(
                        'caption' => Mage::helper('sales')->__('Copy'),
                        'url'     => array('base'=>'*/*/toclipboard'),
                        'field'   => 'id'
                    )
                ),
            'filter'    => false,
            'sortable'  => false,
            'is_system' => true,
        )
    );

我可能需要使用Javascript来执行此操作,但我不太确定如何操作。即使我已成功将$this->setUseAjax(true);添加到__construct();,上面使用上述方法也会导致页面重新加载。

会感激一些意见。

3 个答案:

答案 0 :(得分:3)

你可以在这里做一些有趣的事情。主要是,您需要引用Action rendererGrid Javascript。您现在拥有的代码应该在actions列中呈现单个链接。但是,如果您提供一系列操作,则会成为<select>列表。呈现<select>时,grid.js文件负责执行操作。

以下是您将在&#39;操作中传递的内容的一些示例。阵列:

Javascript Onclick w / link

...
    'actions'   => array(
        array(
            'caption' => Mage::helper('sales')->__('Copy'),
            'onclick' => 'window.location = "' . Mage::getUrl('*/*/toclipboard') . '"'
        )
    ),
...

在执行操作前确认

...
    'actions'   => array(
        array(
            'caption' => Mage::helper('sales')->__('Copy'),
            'url'     => array('base'=>'*/*/toclipboard'),
            'confirm' => true
        )
    ),
...

呈现<select>个动作列表(在弹出窗口中打开最后一个动作)

...
    'actions'   => array(
        array(
            'caption' => Mage::helper('sales')->__('Copy'),
            'url'     => array('base'=>'*/*/toclipboard'),
            'confirm' => true
        ),
        array(
            'caption' => Mage::helper('sales')->__('Example'),
            'onclick' => 'window.location = "' . Mage::getUrl('*/*/toclipboard') . '"'
        ),
        array(
            'caption' => Mage::helper('sales')->__('Popup'),
            'popup'   => true
            'url'     => array('base'=>'*/*/toclipboard'),
        )
    ),
...

答案 1 :(得分:0)

@Franklin P Strube:ty,我指出了正确的方向。

我使用的最终解决方案如下

 ....
          'actions'    => array(
                    array(
                    'caption' => Mage::helper('sales')->__('Copy'),
                    'onclick' => "javaScriptCopyMethod();"
                )
           ),
....

访问用户的剪贴板被认为是不好的做法,现在大多数浏览器都会阻止这种做法,但我确实找到了一个非常有创意的帖子,下面解释了Trello如何“出现”以访问用户的剪贴板,该解决方案实际上是由Daniel发布的LeCheminant是Trello开发人员之一。

解决方案:How does Trello access the user's clipboard?
附加:https://trello.com/daniel

答案 2 :(得分:0)

简单添加选项:'target'=>'_blank' 示例:

$this->addColumn('action',
            array(
                'header'    => Mage::helper('revocation')->__('Action'),
                'width'     => '100px',
                'type'      => 'action',
                'getter'    => '',
                'actions'   => array(array(
                    'caption' => Mage::helper('revocation')->__('View'),
                    'url'     => array('base' => 'adminhtml/sales_order/view'),
                    'field'   => 'order_id',
                    'target'=>'_blank'
                )),
                'filter'    => false,
                'sortable'  => false,
                'index'     => 'order_id',
            ));