1

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

因此,在 Grid.php 的 _prepareColumns() 函数中,我添加了操作列,如下所示:

$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();.

将不胜感激一些输入。

4

3 回答 3

3

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

以下是您将在“actions”数组中传递的一些示例:

Javascript Onclick 带链接

...
    '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'),
        )
    ),
...
于 2013-10-16T12:36:13.573 回答
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',
            ));
于 2014-03-03T08:15:27.067 回答
0

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

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

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

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

解决方案:Trello 如何访问用户的剪贴板?
附加:https ://trello.com/daniel

于 2013-10-16T13:08:08.920 回答