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

前端之家收集整理的这篇文章主要介绍了php – 我需要特定产品类型的自定义选项卡,而不是所有产品类型前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想为我的自定义产品类型添加新的自定义标签,如图片“价格 – 尺寸”

我已经尝试了这个link-1link-2代码,但它显示了所有产品类型添加/编辑的选项卡

我的问题与this相同,但想要使用编码来做到这一点

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','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','apply_to',join(',$applyTo));
    }
}
$installer->endSetup();

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

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

刚为$fieldList数组添加了’limits’

$fieldList = array('price','tax_class_id','limits');

谢谢!!!

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),'default'           => '','visible_on_front'  => false,'is_configurable'   => false
));

// Add group
$installer->addAttributeGroup(Mage_Catalog_Model_Product::ENTITY,'My Attribute Tab');

// Add attribute to set and group
$installer->addAttributeToSet(Mage_Catalog_Model_Product::ENTITY,'My Attribute Tab','attribute_for_tab');

随意到download simple module example for this approach: “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,);
        $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的所有内容都将在选项卡中呈现.

你可以download simple module example for this approach: “custom_tab.zip”

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

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

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

祝你的商店好运:)

猜你在找的PHP相关文章