Admin製品編集セクションに在庫タブのみを表示する方法は?
-
16-10-2019 - |
質問
製品編集セクション(カタログ - >製品の管理 - >編集)特定の管理者ユーザーの役割については、インベントリタブのみを表示します。
たとえば、ユーザーの役割として「テスト」を備えた管理者ユーザーは、製品の編集を試みている間に在庫タブのみを表示する必要があります。
現在、使用しています core_block_abstract_prepare_layout_after
カスタムタブを追加するイベント。
私のオブザーバー機能は次のとおりです。
public function addTestBlock($observer){
$block = $observer->getEvent()->getBlock();
$product = Mage::registry('product');
if ($block instanceof Mage_Adminhtml_Block_Catalog_Product_Edit_Tabs && $this->_canAddTab($product)){
$block->addTab('myentity', array(
'label' => Mage::helper('mymodule')->__('Test'),
'url' => Mage::helper('adminhtml')->getUrl('adminhtml/marketplace_tendor_catalog_product/tendors', array('_current' => true)),
'class' => 'ajax',
));
}
return $this;
}
私は使用する予定です
adminhtml_catalog_product_edit_prepare_form
テスト管理者ユーザーの「インベントリ」タブのみを表示するイベント。
- イベントオブザーバーを使用してこれを行うことはできますか?
- はいの場合、どうですか?
誰かが私を導くことができますか?
編集:Mpaepperが示唆しているように、私は使用しました controller_action_layout_generate_blocks_after
イベントと私のオブザーバー機能は以下のようでした:
public function vendorLayout($evt){
$tabBlock =$evt->getEvent()->getBlock('product_tabs');
$tab_ids = $tabBlock->getTabsIds();
foreach ($tab_ids as $tab){
if($tab != 'inventory'){
$tabBlock->removeTab($tab);
}
}
}
- ユーザーの役割を確認することは問題ではありません。後で追加できます。
- 「一般」タブを削除すると、次の結果が得られます。
- 「一般」(Group_4)と「Inventory」(インベントリ)タブを許可する場合、それは正常に動作しますが、要件はインベントリタブのみを表示することです。
そのタブをクリックしても何も起こりません。JSスクリプトが読み込まれていないと思います。私は何が間違っているのですか?
解決
使った core_block_abstract_prepare_layout_after
イベントとオブザーバーは次のとおりでした:
public function vendorLayout($evt){ // for removing unallowed tabs and buttons from product information edit page.
$tabBlock = $evt->getEvent()->getBlock();
if ($tabBlock instanceof Mage_Adminhtml_Block_Catalog_Product_Edit_Tabs) {
$tab_ids = $tabBlock->getTabsIds();
$tabs_to_show = array('inventory');
foreach ($tab_ids as $tab){
if(!in_array($tab, $tabs_to_show)){
$tabBlock->removeTab($tab);
}
else{
$tabBlock->setActiveTab($tab);
}
}
}
elseif($tabBlock instanceof Mage_Adminhtml_Block_Catalog_Product_Edit){
$buttonsToBeRemoved = array('back_button', 'reset_button', 'delete_button', 'duplicate_button', 'save_and_edit_button');
foreach($buttonsToBeRemoved as $button){
$tabBlock->unsetChild($button);
}
}
}
最初の条件はすべてのタブを削除しますが、「インベントリ」では、2番目の条件は「保存」以外のすべてのボタンを削除します。
@mpaepperと@Alexに感謝します。
他のヒント
各ユーザーに対して、製品バックエンドで編集できるタブを設定できるモジュールを開発しました。
許可されていないタブを削除するには、イベントを購読しています 'controller_action_layout_generate_blocks_after'
そして、このようなことをします:
if ($customHelper->getFullActionName() === 'adminhtml_catalog_product_edit') {
if ($customHelper->isRestrictedUser()) {
$tabNames = $tabModel->getForbiddenTabs(Mage::getSingleton('admin/session')->getUser()->getId());
$tabBlock = Mage::app()->getLayout()->getBlock('product_tabs');
foreach ( $tabNames as $tabName ) {
// Removes forbidden tabs
$tabBlock->removeTab( $tabName );
}
// Added this to select the top-most tab
$firstTab = current($tabBlock->getTabsIds());
$tabBlock->setActiveTab($firstTab);
}
}
$ tabmodelは、データベースからアクセス許可を取得するモデルですが、これはすべてカスタムコードです。代わりに、ストックのタブ名を除くすべてのタブ名を取得するメソッドをここに提供するだけで、他のすべてが削除されます。
編集:$ customhelperもカスタムですが、STHを実装する必要があります。同様に、IEは現在のユーザーがアクセスを制限しているかどうかを検出します。
これは正しい方向に向けられるはずだと思いますが、ユーザーごとにタブ権限を構成できるGUIでこのすべてを箱から取り出す完全に機能するモジュールを購入することに興味がある場合は、私に連絡してください。