php magento magento-1.6
descargar un ejemplo de módulo simple para este enfoque: "custom_tab.zip"descargar un ejemplo de módulo simple para este enfoque: "attribute_tab.zip"

php - Necesito una pestaña personalizada para un tipo de producto específico, pero no para todos los tipos de productos



magento magento-1.6 (4)

Quiero agregar una nueva pestaña personalizada como en la imagen "Precio - Tamaño" para mi tipo de producto personalizado solamente

He intentado con el código de este enlace-1 y enlace-2, pero muestra la pestaña de todo tipo de producto agregar / editar

mi pregunta es la misma pero quiero hacer esto usando codificación

mysql4-install-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();

Se agregan ''límites'' de atributos pero se muestran en todos los tipos de productos. Solo los necesito con mi tipo de producto personalizado (custproduct).

Gracias por responder mi problema resuelto ahora

acaba de agregar ''límites'' a $fieldList array

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

¡¡¡Gracias!!!


Nuevo grupo en Backend

Aquí está el código para crear una nueva pestaña de "grupo" en el back-end:

$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();

Solo productos especiales

Para que surja solo en ciertos productos, siga estos pasos:

  1. Crea un nuevo conjunto de atributos (basado en el que ya estás usando)
  2. Agregue la pestaña / grupo personalizado a este nuevo conjunto de atributos
  3. Todos los productos especiales (en los que desea tener esta pestaña) deben usar este nuevo conjunto de atributos

Conseguir que el producto personalizado funcione en el carro

Inchoo ha creado un módulo de ''producto personalizado'', le sugiero que compare su código con el suyo.

Aquí hay un enlace a su módulo (y artículo):

http://inchoo.net/ecommerce/magento/how-to-create-a-new-product-type-in-magento/


Creo que para obtener el comportamiento que desea, tendrá que volver a escribir la clase Mage_Adminhtml_Block_Catalog_Product_Edit_Tabs

Allí, el método _prepareLayout () crea todas las pestañas, es decir:

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()), )); }

Dentro del método tiene la variable $ producto que puede usar para verificar el tipo de producto. Por lo tanto, verifique el nombre de grupo específico de su atributo y su tipo de producto y agregue la pestaña correspondiente solo si coincide con la forma que desea.


Deberías usar un parámetro 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 ) );

.. y agrega el atributo al conjunto de atributos

$setup->addAttributeToSet( ''product_catalog'', %ATTRIBUTE_SET%, %ATTRIBUTE_GROUP%, ''testing_attribute'' );

para obtener el conjunto de atributos predeterminado para los productos, use este código:

$productDefaultAttributeSet = $installer->getDefaultAttributeSetId(Mage_Catalog_Model_Product::ENTITY);


Magento es muy flexible, por lo que hay numerosas maneras de cómo puede lograr el resultado deseado. El único problema es determinar la mejor manera de hacerlo, es decir, encontrar la manera más confiable y efectiva.

Se pueden sugerir dos enfoques aquí. La elección depende de los detalles técnicos de la funcionalidad requerida, que no se especifican en la pregunta inicial:

  1. La pestaña personalizada contendrá solo campos básicos, utilizados para ingresar datos para un producto
  2. La pestaña personalizada contendrá campos avanzados y / o JavaScript, y / u otras marcas HTML personalizadas

Veamos la solución para ambos casos.


# 1. La pestaña contendrá solo campos básicos, utilizados para ingresar datos para un producto

En tal caso, es suficiente usar el mecanismo de atributos de Magento. Permite crear atributos (campos) para un producto, aplicarlos solo a ciertos tipos de productos y separar los campos en grupos (pestañas).

Así es como se ve un script.

<dir_módulo> /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'');


Siéntase libre de descargar un ejemplo de módulo simple para este enfoque: "attribute_tab.zip"



# 2. La pestaña personalizada contendrá campos avanzados y / o JavaScript, y / u otras marcas HTML personalizadas

En tal caso, la pestaña debe crearse como un bloque de Magento habitual. E inyectado en el renderizador de pestañas mediante el diseño.

Bloque de pestañas personalizadas <dir_módulo> /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; } }


La aplicación de archivo de diseño / 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>


Nota: si los tipos de producto, que tienen una pestaña personalizada, son fijos, puede colocarlos estáticamente en el archivo de diseño, en lugar de verificarlos dinámicamente en el método canShowTab() del bloque.

Aquí está el archivo de diseño para un caso de muestra así, cuando los tipos de productos con pestañas personalizadas son fijos e incluyen Solo descargable, 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>


El resto es simple: todo lo que coloque en zerkella_customtab/catalog/product/edit/tab/custom.phtml se representará en la pestaña.

Puede descargar un ejemplo de módulo simple para este enfoque: "custom_tab.zip"

Además, no recomendaría utilizar reescrituras de clase para implementar la tarea. Los enfoques, descritos anteriormente, cubren todas las necesidades del desarrollador. No tiene sentido utilizar reescrituras. Mientras que reescribir es una característica poderosa, que permite hacer cualquier cosa en Magento, tiene dos restricciones:

  • Una clase puede ser reescrita por un solo módulo
  • Si hay clases reescritas en su sistema, se necesitará más trabajo para actualizar Magento a una versión más nueva

Los enfoques propuestos siguen una forma natural de personalizar pestañas de productos en Magento, por lo que es mejor elegir uno de ellos.

Buena suerte con tu tienda :)