Je voudrais ajouter un onglet supplémentaire aux détails du produit (backend) et je ne veux pas effectuer de remplacement, si possible.
Quelle est la meilleure façon d'y parvenir ?
Personnellement, j'opterais pour une approche de mise en page / action en utilisant le addTab()
fourni parMage_Adminhtml_Block_Widget_Tabs
Donc 2 actions principales sont impliquées ici:
- 1. Modifications de mise en page -
<?xml version="1.0"?>
<layout>
<adminhtml_catalog_product_edit>
<reference name="product_tabs">
<block type="MODULENAME/adminhtml_catalog_product_edit_tab" name="custom_tab"/>
<action method="addTab">
<name>Custom Tab</name>
<block>custom_tab</block>
</action>
</reference>
</adminhtml_catalog_product_edit>
</layout>
- 2. Classe d'onglets -
<?php
class NAMESPACE_MODULENAME_Block_Adminhtml_Catalog_Product_Edit_Tab extends Mage_Adminhtml_Block_Widget
implements Mage_Adminhtml_Block_Widget_Tab_Interface
{
public function canShowTab()
{
return true;
}
public function getTabLabel()
{
return $this->__('Custom Tab');
}
public function getTabTitle()
{
return $this->__('Custom Tab');
}
public function isHidden()
{
return false;
}
public function getTabUrl()
{
return $this->getUrl('*/*/customtab', array('_current' => true));
}
public function getTabClass()
{
return 'ajax';
}
}
Remarque:
Il y a très peu de documentation sur le développement backend, je me sens comme Magento Devs. sont un peu timides pour partager des connaissances sur ce domaine (et c'est pourquoi de la question ci-dessus.)
Source:
Cette technique peut être trouvée ici:
- http://www.webspeaks.in/2012/02/create-custom-tab-in-magento-product-addedit-page.html
et aussi dans les commentaires de cet article Inchoo :
- http://inchoo.net/ecommerce/magento/how-to-add-custom-product-relations-in-magento/
Voici comment je le fais.
Créez un observateur pour l'événement core_block_abstract_prepare_layout_after
. Je ne sais pas si c'est le meilleur événement.
<adminhtml>
...
<events>
<core_block_abstract_prepare_layout_after>
<observers>
<[namespace]_[module]_product>
<type>singleton</type>
<class>[module]/adminhtml_observer</class>
<method>addProductTabBlock</method>
</[namespace]_[module]_product>
</observers>
</core_block_abstract_prepare_layout_after>
</events>
....
</adminhtml>
Créez ensuite l'observateur
class [Namespace]_[Module]_Model_Adminhtml_Observer {
//this checks if the tab can be added. You don't want to add the tab when selecting the product type and attribute set or when selecting the configurable attributes.
protected function _canAddTab($product){
if ($product->getId()){
return true;
}
if (!$product->getAttributeSetId()){
return false;
}
$request = Mage::app()->getRequest();
if ($request->getParam('type') == 'configurable'){
if ($request->getParam('attributes')){
return true;
}
}
return false;
}
//the method that actually adds the tab
public function addProductTabBlock($observer){
$block = $observer->getEvent()->getBlock();
$product = Mage::registry('product');
//if on product tabs block and the tab can be added...
if ($block instanceof Mage_Adminhtml_Block_Catalog_Product_Edit_Tabs && $this->_canAddTab($product)){
//in case there is an ajax tab
$block->addTab('some_identifier_here', array(
'label' => Mage::helper('catalog')->__('Some Label here'),
'url' => Mage::helper('adminhtml')->getUrl('adminhtml/some_url/here', array('_current' => true)),
'class' => 'ajax',
));
//in case it's a simple content tab
$block->addTab('other_identifier_here', array(
'label' => Mage::helper('catalog')->__('Label here'),
'content' => $this->getLayout()->createBlock('[module]/block_alias')->toHtml(),
));
}
return $this;
}
}
Assurez-vous simplement de remplacer [namespace]
et [module]
avec les valeurs que vous avez pour votre module.
Ajoutez le code suivant à votre
config.xml
fichierAprès cela, vous devez créer un nouveau fichier:
Company/ModuleName/Block/Adminhtml/Tabs.php
Ensuite, créez un fichier:
Company/ModuleName/Block/Adminhtml/Tabs/Tabid.php
) et ajoutez l'extrait de code suivant à la fonction
_prepareLayout()
Vous pouvez toujours créer une section locale de n'importe quel fichier principal.
la source