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

Pra*_*han 7 php magento magento-1.6

我想为我的自定义产品类型添加新的自定义标签,如图片"价格 - 尺寸"

我已尝试使用此link-1link-2中的代码,但它会显示所有产品类型添加/编辑的选项卡

我的问题与相同,但希望使用编码来做到这一点

在此输入图像描述

mysql4安装,0.1.0.php

$installer = $this;
$installer->startSetup();
$installer->addAttribute('catalog_product', 'limits', array(
    'group'             => 'Price - Size',
    'type'              => 'varchar',
    'frontend'          => '',
            'backend'           => 'custproduct/entity_attribute_backend_limit',
    'label'             => 'Limit',
    'input'             => 'text',
    'class'             => '',
    'source'            => '',
    'global'            => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL,
    'visible'           => true,
    'required'          => false,
    'user_defined'      => true,
    'default'           => '1',
    'searchable'        => false,
    'filterable'        => false,
    'comparable'        => false,
    'visible_on_front'  => true,
    'unique'            => false,
    'apply_to'          => My_Custproduct_Model_Product_Type::TYPE_CustomProduct_PRODUCT, //also try 'custproduct'
    'is_configurable'   => false
));
$installer->addAttributeGroup('catalog_product', 'Default','Price - Size', 40);
$installer->addAttributeToSet('catalog_product','Default', 'Price - Size', 'limits');

$fieldList = array('price','special_price','special_from_date','special_to_date',
    'minimal_price','cost','tier_price','weight','tax_class_id');

 foreach ($fieldList as $field) {
    $applyTo = explode(',', $installer->getAttribute('catalog_product', $field, 'apply_to'));
    if (!in_array('custproduct', $applyTo)) {
        $applyTo[] = 'custproduct';
        $installer->updateAttribute('catalog_product', $field, 'apply_to', join(',', $applyTo));
    }
}
$installer->endSetup();
Run Code Online (Sandbox Code Playgroud)

属性'限制'已添加但它显示在所有产品类型上我只需要使用我的自定义产品类型(custproduct).

感谢回复我的问题现在解决了

刚为$fieldList数组添加了"限制"

$fieldList = array('price','special_price','special_from_date','special_to_date',
    'minimal_price','cost','tier_price','weight','tax_class_id', 'limits');
Run Code Online (Sandbox Code Playgroud)

谢谢!!!

And*_*kus 10

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

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

  1. 自定义选项卡将仅包含用于输入产品数据的基本字段
  2. 自定义选项卡将包含高级字段和/或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');
Run Code Online (Sandbox Code Playgroud)

 
随意下载此方法的简单模块示例:"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;
    }
}
Run Code Online (Sandbox Code Playgroud)

 
布局文件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>
Run Code Online (Sandbox Code Playgroud)

 
注意:如果具有自定义选项卡的产品类型是固定的,那么您可以将它们静态地放在布局文件中,而不是在块的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>
Run Code Online (Sandbox Code Playgroud)

 
其余的很简单 - 您输入的所有内容都zerkella_customtab/catalog/product/edit/tab/custom.phtml将在标签中呈现.

您可以下载此方法的简单模块示例:"custom_tab.zip"


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

  • 一个类只能由一个模块重写
  • 如果系统中有重写的类,则需要更多工作才能将Magento升级到更新的版本

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

祝你的商店好运:)