Risposte:
Personalmente sceglierei un approccio layout / azione usando il metodo addTab()
fornito daMage_Adminhtml_Block_Widget_Tabs
Quindi qui sono coinvolte 2 azioni principali:
- 1. Modifiche al layout -
<?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. Tab Class -
<?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';
}
}
Nota:
c'è pochissima documentazione sullo sviluppo del backend, mi sento come Magento Devs. sono un po 'timidi nel condividere le conoscenze su quest'area (ed è per questo motivo della domanda precedente).
Fonte:
questa tecnica può essere trovata qui:
- http://www.webspeaks.in/2012/02/create-custom-tab-in-magento-product-addedit-page.html
e anche nei commenti di questo articolo di Inchoo :
- http://inchoo.net/ecommerce/magento/how-to-add-custom-product-relations-in-magento/
Ecco come lo faccio.
Crea un osservatore per l'evento core_block_abstract_prepare_layout_after
. Non sono sicuro che sia il miglior evento.
<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>
Quindi crea l'osservatore
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;
}
}
Assicurati di sostituire [namespace]
e [module]
con i valori che hai per il tuo modulo.
Aggiungi il seguente codice al tuo config.xml
file
<blocks>
...
<modulename>
<class>Company_ModuleName_Block</class>
</modulename>
<adminhtml>
<rewrite>
<catalog_product_edit_tabs>Company_ModuleName_Block_Adminhtml_Tabs</catalog_product_edit_tabs>
</rewrite>
</adminhtml>
...
</blocks>
Dopo questo dovresti creare un nuovo file: Company/ModuleName/Block/Adminhtml/Tabs.php
<?php
class Company_ModuleName_Block_Adminhtml_Tabs extends Mage_Adminhtml_Block_Catalog_Product_Edit_Tabs
{
private $parent;
protected function _prepareLayout()
{
//get all existing tabs
$this->parent = parent::_prepareLayout();
//add new tab
$this->addTab('tabid', array(
'label' => Mage::helper('catalog')->__('New Tab'),
'content' => $this->getLayout()
->createBlock('modulename/adminhtml_tabs_tabid')->toHtml(),
));
return $this->parent;
}
}
Quindi, crea un file: Company/ModuleName/Block/Adminhtml/Tabs/Tabid.php
<?php
class Company_ModuleName_Block_Adminhtml_Tabs_Tabid extends Mage_Adminhtml_Block_Widget
{
public function __construct()
{
parent::__construct();
$this->setTemplate('modulename/newtab.phtml');
}
}
app / code / local / Mage / Adminhtml / blocchi / Catalogo / Prodotti / Modifica / Tabs.php
) e aggiungi il seguente frammento alla funzione _prepareLayout()
$this->addTab('tabid', array(
'label' => Mage::helper('catalog')->__('New Tab'),
'content' => $this->_translateHtml($this->getLayout()
->createBlock('modulname/adminhtml_tabs_tabid')->toHtml()),
));
È sempre possibile creare un locale di qualsiasi file principale.