php 自定义类型,php – 我需要特定产品类型的自定义选项卡,而不是所有产品类型...

Magento非常灵活,因此有很多方法可以达到预期的效果.唯一的问题是确定最佳方法,即找到最可靠和有效的方法.

这里可以提出两种方法.选择取决于所需功能的技术细节,这些细节未在初始问题中说明:

>自定义选项卡将仅包含用于输入数据的基本字段

对于产品

>自定义选项卡将包含高级字段,和/或javascript,和/或其他自定义HTML

标记

让我们看看两种情况的解决方案.

#1.该选项卡仅包含用于输入产品数据的基本字段

在这种情况下,使用Magento的属性机制就足够了.它允许为产品创建属性(字段),仅将其应用于某些产品类型,并将字段分成组(选项卡).

这就是脚本的样子.

< module_dir> /sql/install-1.0.0.0.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');

#2.自定义选项卡将包含高级字段和/或javascript,和/或其他自定义HTML标记

在这种情况下,应将选项卡创建为通常的Magento块.并通过布局注入Tabs渲染器.

自定义标签块< module_dir> /Block/Adminhtml/Catalog/Product/Edit/Tab/Custom.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:

my_custom_tab

zerkella_customtab/adminhtml_catalog_product_edit_tab_custom

my_custom_tab

zerkella_customtab/adminhtml_catalog_product_edit_tab_custom

注意:如果具有自定义选项卡的产品类型是固定的,那么您可以将它们静态地放在布局文件中,而不是在块的canShowTab()方法中动态检查它们.

下面是这样一个示例案例的布局文件,当固定了自定义选项卡的产品类型并且仅包含可下载时,app / design / adminhtml / default / default / layout / zerkella_customtab.xml:

my_custom_tab

zerkella_customtab/adminhtml_catalog_product_edit_tab_custom

其余的很简单 – 您放入zerkella_customtab / catalog / product / edit / tab / custom.phtml的所有内容都将在选项卡中呈现.

另外,我不建议使用类重写来实现任务.上述方法涵盖了开发人员的所有需求.利用重写是没有意义的.虽然重写是一个强大的功能,允许在Magento中做任何事情,但它有两个限制:

>一个类只能由一个模块重写

>如果您的系统中有重写的类,那么将需要更多的工作

将Magento升级到更新版本

所提出的方法遵循在Magento中自定义产品选项卡的自然方式,因此最好选择其中一个.

祝你的商店好运:)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值