3

製品のインポートプロファイルを使用すると、エクスポートする製品を名前、SKUでフィルタリングできます...製品の管理ページで同じ機能を使用したいと思います。管理者はグリッド内の製品をフィルタリングし、[エクスポート]ボタンをクリックしてフィルタリングされた製品を取得します。

「エクスポート」ボタンを追加するにはどうすればよいですか?どのテンプレート/ブロックをオーバーライドする必要がありますか?管理者がボタンをクリックしたときに、フィルタリングされたコレクションを取得するにはどうすればよいですか?フィルタリングされたコレクションをcsvファイルにエクスポートするにはどうすればよいですか?そのためにデータフローを使用できますか?

ありがとう

4

1 に答える 1

11

管理製品コントローラーに新しいmassActionを実装する必要があります。開始するための良い方法は、製品コントローラーを調べて、他のmassActionsがどのように実装されているかを確認することです。

見てみましょう...最初に、massActionの宣言をグリッドに追加する必要があります。これは、app / code / core / Mage / Adminhtml / Block / Catalog / Product/Grid.phpで実行できます。_prepareMassactionメソッドに以下を追加する必要があります。

$this->getMassactionBlock()->addItem('export', array(
                'label' => Mage::helper('catalog')->__('Export to CSV'),
                'url'   => $this->getUrl('*/*/massExport', array('_current'=>true)),
            ));

次に、この新しいアクションを製品コントローラー(app / code / core / Mage / Adminhtml / controllers / Catalog / ProductController.php)に実装する必要があります。

public function massExportAction()
    {
        $productIds = $this->getRequest()->getParam('product');
        if (!is_array($productIds)) {
            $this->_getSession()->addError($this->__('Please select product(s).'));
            $this->_redirect('*/*/index');
        }
        else {
            //write headers to the csv file
            $content = "id,name,url,sku\n";
            try {
                foreach ($productIds as $productId) {
                    $product = Mage::getSingleton('catalog/product')->load($productId);
                    $content .= "\"{$product->getId()}\",\"{$product->getName()}\",\"{$product->getProductUrl()}\",\"{$product->getSku()}\"\n";
                }
            } catch (Exception $e) {
                $this->_getSession()->addError($e->getMessage());
                $this->_redirect('*/*/index');
            }
            $this->_prepareDownloadResponse('export.csv', $content, 'text/csv');
        }

    }

コードはほとんどmassDeleteActionからコピーされますが、製品を削除する代わりに、$content変数に追加する必要があります。csvエクスポートのコンテンツの作成が完了したら(おそらく他のフィールドを追加する必要があります)、コントローラークラスの_prepareDownloadResponseメソッドを呼び出す必要があります。これで、カスタムエクスポートが完了しました。

最後に、変更に満足したら、magentoのインストールが更新されないように、変更をローカルコードプールに移動することを忘れないでください:)

于 2010-08-12T17:31:09.090 に答える