Mage_Adminhtml_Catalog_Productを上書きして、[製品の管理]ページのグリッドにいくつかのアクションを追加する機能を追加しようとしています。他の拡張機能(Enhanced Admin Product Gridなど)との競合を防ぐために、ルーターとリダイレクトを正しく取得する方法を知りたいです。
私は2つのオプションを考え出しましたが、どちらも機能しますが、その影響についてはよくわかりません。
オプション1
標準のadminhtml/catalog_productルーターを使用して、モジュールを追加するだけです。これはPOST
、への新しいグリッドアクションになりwww.mysite.com/index.php/admin/catalog_product/example
ます。
からの抜粋config.xml
:
<config>
...
<admin>
<routers>
<adminhtml>
<args>
<modules>
<mymodule before="Mage_Adminhtml">MyCompany_MyModule</mymodule>
</modules>
</args>
</adminhtml>
</routers>
</admin>
</config>
グリッドにアクションを追加するオブザーバー:
class MyCompany_MyModule_Model_Observer {
public function addExampleAction($observer) {
$block = $observer->getEvent()->getBlock();
if(get_class($block) =='Mage_Adminhtml_Block_Widget_Grid_Massaction'
&& $block->getRequest()->getControllerName() == 'catalog_product') {
$block->addItem('example', array(
'label' => 'execute exampleAction',
'url' => $block->getUrl('adminhtml/*/example')
));
}
}
ステートメントadminhtml
の最初の部分として指定されていることに注意してください。$block->getUrl()
を使用*/*/example
すると、モジュールは「拡張管理製品グリッド」では機能POST
しwww.mysite.com/index.php/enhancedgrid/catalog_product/example
ません。これは存在しないためです。(この問題は、ルートを書き換えるすべてのモジュールで発生すると思いますか?)
オプション2
モジュールに新しいルートを追加します。これはPOST
、への新しいグリッドアクションになりwww.mysite.com/index.php/myrouter/catalog_product/example
ます。
からの抜粋config.xml
:
<config>
...
<admin>
<routers>
<myroute>
<use>admin</use>
<args>
<module>MyCompany_MyModule</module>
<frontName>myroute</frontName>
</args>
</myroute>
</routers>
</admin>
</config>
グリッドにアクションを追加するオブザーバー:
class MyCompany_MyModule_Model_Observer {
public function addExampleAction($observer) {
$block = $observer->getEvent()->getBlock();
if(get_class($block) =='Mage_Adminhtml_Block_Widget_Grid_Massaction'
&& $block->getRequest()->getControllerName() == 'catalog_product') {
$block->addItem('example', array(
'label' => 'execute exampleAction',
'url' => $block->getUrl('myroute/*/example')
));
}
}
$block->getUrl()
ステートメントの違いに注意してください。
質問
他の拡張機能との互換性を高めるオプションはどれですか?それとももっと良い方法はありますか?
アクションが処理されたら、コントローラークラスのどこにリダイレクトしますか?これは私の単純化されたコントローラーです:
class MyCompany_MyModule_Catalog_ProductController extends Mage_Adminhtml_Catalog_ProductController { public function exampleAction() { ... do stuff ... $this->_redirect('*/*/index'); } }
Enhanced AdminProductGridもインストールされていると仮定しましょう。オプション1を使用すると、に
*/*/index
リダイレクトされwww.mysite.com/index.php/admin/catalog_product/index
ます。これは問題なく機能しますが、正しいURLはである必要があると思いますwww.mysite.com/index.php/enhancedgrid/catalog_product/index
。しかし、それが本当に重要であるかどうか、そして他にどの拡張機能がインストールされているかわからない場合の方法がわかりません。オプション2を使用すると、MyCompany_MyModule_Catalog_ProductControllerにindexAction()がないため、ページが空になるように
*/*/index
リダイレクトされます。www.mysite.com/index.php/myrouter/catalog_product/index
だから私はadminhtml/*/index
代わりにリダイレクトするものを使用する必要がありますwww.mysite.com/index.php/admin/catalog_product/index
-上記と同じ疑問...
この長い質問を読むのに時間を割いてくれた人に感謝します!!!