我想为我的自定义产品类型添加新的自定义标签,如图片“价格 - 尺寸”
我已尝试使用此link-1和link-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','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();
添加了属性'限制',但它仅在我的定制产品类型(custproduct)上显示在我需要的所有产品类型上。
感谢您的回复,我的问题现已解决
刚刚向$fieldList
数组添加了“限制”
$fieldList = array('price','special_price','special_from_date','special_to_date',
'minimal_price','cost','tier_price','weight','tax_class_id', 'limits');
感谢!!!
答案 0 :(得分:10)
Magento非常灵活,因此有很多方法可以达到预期的效果。唯一的问题是确定最佳方式,即找到最可靠有效的方法。
这里可以提出两种方法。选择取决于所需功能的技术细节,这些细节未在初始问题中说明:
让我们看看两种情况的解决方案。
在这种情况下,使用Magento的属性机制就足够了。它允许为产品创建属性(字段),仅将它们应用于某些产品类型,并将字段分成组(选项卡)。
这是脚本的样子。
<强>&LT; module_dir&GT; /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');
随意download simple module example for this approach: "attribute_tab.zip"
在这种情况下,应将选项卡创建为通常的Magento块。并通过布局注入Tabs渲染器。
自定义标签块&lt; module_dir&gt; /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
的所有内容都将在标签中呈现。
你可以download simple module example for this approach: "custom_tab.zip"
此外,我不建议使用类重写来实现任务。上述方法涵盖了开发人员的所有需求。利用重写是没有意义的。虽然重写是一个强大的功能,允许在Magento中做任何事情,但它有两个限制:
建议的方法遵循在Magento中自定义产品标签的自然方式,因此最好选择其中一种。
祝你的商店好运:)
答案 1 :(得分:2)
您应该使用参数apply_to
$productTypes = array(
Mage_Catalog_Model_Product_Type::TYPE_SIMPLE,
Mage_Catalog_Model_Product_Type::TYPE_BUNDLE,
Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE,
Mage_Catalog_Model_Product_Type::TYPE_VIRTUAL
);
$productTypes = join(',', $productTypes);
$globalScope = Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL;
$installer->addAttribute(
Mage_Catalog_Model_Product::ENTITY, 'artist_id',
array(
'global' => $globalScope,
'visible' => false,
'required' => false,
'user_defined' => true,
'default' => '',
'apply_to' => $productTypes, // <-- apply_to
'visible_on_front' => false,
'used_in_product_listing' => false,
'type' => 'int', //backend_type
)
);
..并将属性添加到属性集
$setup->addAttributeToSet(
'product_catalog',
%ATTRIBUTE_SET%,
%ATTRIBUTE_GROUP%,
'testing_attribute'
);
获取产品的默认属性集使用此代码:
$productDefaultAttributeSet = $installer->getDefaultAttributeSetId(Mage_Catalog_Model_Product::ENTITY);
答案 2 :(得分:0)
后端新组
以下是在后端创建新“组”标签的代码:
$installer = $this;
$productAttributesSetup = new Mage_Eav_Model_Entity_Setup('core_setup');
$installer->startSetup();
// this is the line you need
$productAttributesSetup->addAttributeGroup('catalog_product', 'Attribute Set', 'Name of Group');
$installer->endSetup();
仅限特殊产品
要仅在某些产品上出现,请按以下步骤操作:
让自定义产品在购物车中运作
Inchoo创建了一个“自定义产品”模块,我建议您将代码与他们的代码进行比较。
以下是其模块(和文章)的链接:
http://inchoo.net/ecommerce/magento/how-to-create-a-new-product-type-in-magento/
答案 3 :(得分:0)
我认为要获得你想要的行为,你需要重写类Mage_Adminhtml_Block_Catalog_Product_Edit_Tabs
在那里,方法_prepareLayout()创建所有选项卡,即:
foreach ($groupCollection as $group) {
...
$this->addTab('group_'.$group->getId(), array(
'label' => Mage::helper('catalog')->__($group->getAttributeGroupName()),
'content' => $this->_translateHtml(
$this->getLayout()
->createBlock($this->getAttributeTabBlock(),
'adminhtml.catalog.product.edit.tab.attributes')
->setGroup($group)
->setGroupAttributes($attributes)
->toHtml()),
));
}
在方法内部,您有变量$ product,可用于检查产品类型。因此,请检查属性的特定组名称和产品类型,并添加相应的选项卡(如果它符合您的需要)。