Magento 非常灵活,因此有多种方法可以达到预期的效果。唯一的问题是确定最好的方法,即找到最可靠和最有效的方法。
这里可以推荐两种方法。选择取决于所需功能的技术细节,在最初的问题中没有说明:
- 自定义选项卡将仅包含基本字段,用于输入产品数据
- 自定义选项卡将包含高级字段和/或 javascript 和/或其他自定义 HTML 标记
让我们看看这两种情况的解决方案。
#1。该选项卡将仅包含基本字段,用于输入产品数据
在这种情况下,使用 Magento 的属性机制就足够了。它允许为产品创建属性(字段),仅将它们应用于某些产品类型,并将字段分成组(选项卡)。
这就是脚本的样子。
<module_dir>/sql/install-1.0.0.0.php
<?php
/* @var $installer Mage_Catalog_Model_Resource_Setup */
$installer = $this;
// Add attribute
$allowedProductTypes = array(
Mage_Catalog_Model_Product_Type_Grouped::TYPE_CODE,
Mage_Downloadable_Model_Product_Type::TYPE_DOWNLOADABLE,
);
$installer->addAttribute(Mage_Catalog_Model_Product::ENTITY, 'attribute_for_tab', array(
'label' => 'Attribute For Tab',
'apply_to' => implode(',', $allowedProductTypes),
'type' => 'varchar',
'input' => 'text',
'default' => '',
'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL,
'user_defined' => true,
'visible' => true,
'required' => false,
'searchable' => false,
'filterable' => false,
'comparable' => false,
'visible_on_front' => false,
'unique' => false,
'is_configurable' => false
));
// Add group
$installer->addAttributeGroup(Mage_Catalog_Model_Product::ENTITY, 'Default', 'My Attribute Tab');
// Add attribute to set and group
$installer->addAttributeToSet(Mage_Catalog_Model_Product::ENTITY, 'Default', 'My Attribute Tab', 'attribute_for_tab');
随意下载此方法的简单模块示例:“attribute_tab.zip”
#2。自定义选项卡将包含高级字段和/或 javascript 和/或其他自定义 HTML 标记
在这种情况下,选项卡应该创建为通常的 Magento 块。并通过布局注入到 Tabs 渲染器中。
自定义选项卡块<module_dir>/Block/Adminhtml/Catalog/Product/Edit/Tab/Custom.php
<?php
class Zerkella_CustomTab_Block_Adminhtml_Catalog_Product_Edit_Tab_Custom
extends Mage_Adminhtml_Block_Widget implements Mage_Adminhtml_Block_Widget_Tab_Interface
{
/**
* Class constructor
*
*/
public function __construct()
{
parent::__construct();
$this->setTemplate('zerkella_customtab/catalog/product/edit/tab/custom.phtml');
}
/**
* Get tab label
*
* @return string
*/
public function getTabLabel()
{
return Mage::helper('zerkella_customtab')->__('My Custom Tab');
}
/**
* Get tab title
*
* @return string
*/
public function getTabTitle()
{
return Mage::helper('zerkella_customtab')->__('My Custom Tab');
}
/**
* Check if tab can be displayed
*
* @return boolean
*/
public function canShowTab()
{
$allowedProductTypes = array(
Mage_Catalog_Model_Product_Type_Grouped::TYPE_CODE,
Mage_Downloadable_Model_Product_Type::TYPE_DOWNLOADABLE,
);
$productType = $this->_getProduct()->getTypeId();
return in_array($productType, $allowedProductTypes);
}
/**
* Retrieve product
*
* @return Mage_Catalog_Model_Product
*/
protected function _getProduct()
{
return Mage::registry('current_product');
}
/**
* Check if tab is hidden
*
* @return boolean
*/
public function isHidden()
{
return false;
}
}
布局文件app/design/adminhtml/default/default/layout/zerkella_customtab.xml:
<?xml version="1.0"?>
<layout>
<adminhtml_catalog_product_new>
<reference name="product_tabs">
<action method="addTab">
<name>my_custom_tab</name>
<block>zerkella_customtab/adminhtml_catalog_product_edit_tab_custom</block>
</action>
</reference>
</adminhtml_catalog_product_new>
<adminhtml_catalog_product_edit>
<reference name="product_tabs">
<action method="addTab">
<name>my_custom_tab</name>
<block>zerkella_customtab/adminhtml_catalog_product_edit_tab_custom</block>
</action>
</reference>
</adminhtml_catalog_product_edit>
</layout>
注意:如果具有自定义选项卡的产品类型是固定的,那么您可以将它们静态放在布局文件中,而不是在块的canShowTab()
方法中动态检查它们。
这是此类示例案例的布局文件,当具有自定义选项卡的产品类型已修复且仅包含可下载的app/design/adminhtml/default/default/layout/zerkella_customtab.xml 时:
<?xml version="1.0"?>
<layout>
<adminhtml_catalog_product_downloadable>
<reference name="product_tabs">
<action method="addTab">
<name>my_custom_tab</name>
<block>zerkella_customtab/adminhtml_catalog_product_edit_tab_custom</block>
</action>
</reference>
</adminhtml_catalog_product_downloadable>
</layout>
剩下的很简单——你输入的所有内容都zerkella_customtab/catalog/product/edit/tab/custom.phtml
将呈现在选项卡中。
您可以下载此方法的简单模块示例:“custom_tab.zip”
此外,我不建议使用类重写来实现任务。上述方法涵盖了开发人员的所有需求。使用重写是没有意义的。虽然重写是一个强大的功能,它允许在 Magento 中做任何事情,但它有两个限制:
- 一个类只能被一个模块重写
- 如果您的系统中有重写的类,则需要做更多的工作才能将 Magento 升级到更新的版本
建议的方法遵循在 Magento 中自定义产品选项卡的自然方式,因此最好选择其中一个。
祝你的商店好运:)