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 rendererGrid Javascriptを参照します。現在のコードは、アクション列に 1 つのリンクをレンダリングする必要があります。ただし、アクションの配列を指定すると、これは<select>リストになります。が<select>レンダリングされると、grid.js ファイルがアクションの実行を担当します。

以下は、'actions' 配列で渡す内容の例です。

Javascript Onclick w/ リンク

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

@Franklin P Strube: ty、私を正しい方向に向けてくれました。

私が使用した最終的な解決策は次のとおりです

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

ユーザーのクリップボードにアクセスすることは悪い習慣と見なされており、最近ではほとんどのブラウザーがこれを防止しています。しかし、Trello がユーザーのクリップボードにアクセスするためにどのように "表示" されるかを説明する非常に創造的な投稿を以下にリンクして見つけました。 Trello 開発者の 1 人。

解決策: Trello はユーザーのクリップボードにどのようにアクセスしますか?
追加: https://trello.com/daniel

于 2013-10-16T13:08:08.920 に答える