Câu trả lời:
Cá nhân tôi sẽ đi theo cách tiếp cận bố cục / hành động bằng cách sử dụng addTab()
được cung cấp bởiMage_Adminhtml_Block_Widget_Tabs
Vì vậy, 2 hành động chính có liên quan ở đây:
- 1. Thay đổi bố cục -
<?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. Lớp Tab -
<?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';
}
}
Lưu ý:
Có rất ít tài liệu về phát triển phụ trợ, tôi cảm thấy như Magento Devs. rất ngại chia sẻ kiến thức về lĩnh vực này (và đó là lý do của câu hỏi trên.)
Nguồn:
Kỹ thuật này có thể được tìm thấy ở đây:
- http://www.webspeaks.in/2012/02/create-custom-tab-in-magento-product-addedit-page.html
và cả trong các bình luận của bài viết Inchoo này :
- http://inchoo.net/ecommerce/magento/how-to-add-custom-product-relations-in-magento/
Đây là cách tôi làm điều đó.
Tạo một người quan sát cho sự kiện core_block_abstract_prepare_layout_after
. Không chắc chắn nếu đó là sự kiện tốt nhất mặc dù.
<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>
Sau đó tạo người quan sát
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;
}
}
Chỉ cần đảm bảo bạn thay thế [namespace]
và [module]
với các giá trị bạn có cho mô-đun của mình.
Thêm mã sau vào config.xml
tập tin của bạn
<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>
Sau đó, bạn nên tạo một tệp mới: 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;
}
}
Tiếp theo, tạo một tệp: 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');
}
}
ứng dụng / mã / cục bộ / Pháp sư / adminhtml / Chặn / Danh mục / Sản phẩm / Chỉnh sửa / Tab.php
) và thêm đoạn mã sau vào hàm _prepareLayout()
$this->addTab('tabid', array(
'label' => Mage::helper('catalog')->__('New Tab'),
'content' => $this->_translateHtml($this->getLayout()
->createBlock('modulname/adminhtml_tabs_tabid')->toHtml()),
));
Bạn luôn có thể tạo một địa phương của bất kỳ tập tin cốt lõi.