php - Magento adminhtml grid with javascript action column - Stack Overflow

I'm designing a custom adminhtml grid based on a model of my own, I've added an actions colum

I'm designing a custom adminhtml grid based on a model of my own, I've added an actions column to the grid which I'd like to be able to click to copy some text to the clipboard.

So in the _prepareColumns() function in Grid.php, I've added the actions column as seen below:

$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,
        )
    );

I'd likely need to use Javascript to do this, but I'm not quite sure how to. Using the method above strangely enough also causes a page reload, even though I have successfully added $this->setUseAjax(true); to __construct();.

Would appreciate some input.

I'm designing a custom adminhtml grid based on a model of my own, I've added an actions column to the grid which I'd like to be able to click to copy some text to the clipboard.

So in the _prepareColumns() function in Grid.php, I've added the actions column as seen below:

$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,
        )
    );

I'd likely need to use Javascript to do this, but I'm not quite sure how to. Using the method above strangely enough also causes a page reload, even though I have successfully added $this->setUseAjax(true); to __construct();.

Would appreciate some input.

Share Improve this question asked Oct 15, 2013 at 12:26 MooseMoose 6301 gold badge14 silver badges29 bronze badges
Add a ment  | 

3 Answers 3

Reset to default 3

There are some interesting things you can do here. Mainly, you will want to reference the Action renderer and the Grid Javascript. The code you have right now should render a single link in the actions column. However, if you provide an array of actions, this will bee a <select> list. When a <select> is rendered, then the grid.js file is responsible for performing the action.

Below are some examples of what you would pass in the 'actions' array:

Javascript Onclick w/ link

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

Confirm before running action

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

Render a <select> list of actions (open last action in a popup)

...
    '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'),
        )
    ),
...

@Franklin P Strube: ty, pointed me in the right direction.

Final solution I used was as follows

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

It is considered bad practice to access a user's clipboard and most browsers prevent this nowadays, I did however find an extremely creative post linked below explaining how Trello "appears" to access the users' clipboard, the solution was actually posted by Daniel LeCheminant who is one of the Trello developers.

Solution: How does Trello access the user's clipboard?
Additional: https://trello./daniel

Simple add a option : 'target'=>'_blank' Example :

$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',
            ));

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1745560736a4633092.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信