Pregunta

Estoy tratando de agregar una pestaña adicional a la parte superior de la página de edición de categoría. Los predeterminados son: información general, configuración de visualización, diseño personalizado y productos de categoría.

Así que he creado un nuevo módulo que reescribe el bloque que genera las pestañas. Aquí está el fragmento relevante de config.xml:

    <blocks>

        <adminhtml>

            <rewrite>

                <catalog_category_tabs>

                    MyNamespace_MyModule_Block_Catalog_Category_Tabs

                </catalog_category_tabs>

            </rewrite>

        </adminhtml>

    </blocks>

Aquí está mi bloque que sobrescribe el magento predeterminado:

class MyNamespace_MyModule_Block_Catalog_Category_Tabs extends Mage_Adminhtml_Block_Catalog_Category_Tabs
{

    protected function _prepareLayout()
    {
        $categoryAttributes = $this->getCategory()->getAttributes();
        if (!$this->getCategory()->getId()) {
            foreach ($categoryAttributes as $attribute) {
                $default = $attribute->getDefaultValue();
                if ($default != '') {
                    $this->getCategory()->setData($attribute->getAttributeCode(), $default);
                }
            }
        }

        $attributeSetId     = $this->getCategory()->getDefaultAttributeSetId();
        /** @var $groupCollection Mage_Eav_Model_Resource_Entity_Attribute_Group_Collection */
        $groupCollection    = Mage::getResourceModel('eav/entity_attribute_group_collection')
            ->setAttributeSetFilter($attributeSetId)
            ->setSortOrder()
            ->load();
        $defaultGroupId = 0;
        foreach ($groupCollection as $group) {
            /* @var $group Mage_Eav_Model_Entity_Attribute_Group */
            if ($defaultGroupId == 0 or $group->getIsDefault()) {
                $defaultGroupId = $group->getId();
            }
        }

        foreach ($groupCollection as $group) {
            /* @var $group Mage_Eav_Model_Entity_Attribute_Group */
            $attributes = array();
            foreach ($categoryAttributes as $attribute) {
                /* @var $attribute Mage_Eav_Model_Entity_Attribute */
                if ($attribute->isInGroup($attributeSetId, $group->getId())) {
                    $attributes[] = $attribute;
                }
            }

            // do not add grops without attributes
            if (!$attributes) {
                continue;
            }

            $active  = $defaultGroupId == $group->getId();
            $block = $this->getLayout()->createBlock($this->getAttributeTabBlock(), '')
                ->setGroup($group)
                ->setAttributes($attributes)
                ->setAddHiddenFields($active)
                ->toHtml();
            $this->addTab('group_' . $group->getId(), array(
                'label'     => Mage::helper('catalog')->__($group->getAttributeGroupName()),
                'content'   => $block,
                'active'    => $active
            ));
        }

        $this->addTab('products', array(
            'label'     => Mage::helper('catalog')->__('Category Products'),
            'content'   => $this->getLayout()->createBlock(
                'adminhtml/catalog_category_tab_product',
                'category.product.grid'
            )->toHtml(),
        ));

        // dispatch event add custom tabs
        Mage::dispatchEvent('adminhtml_catalog_category_tabs', array(
            'tabs'  => $this
        ));

        $this->addTab('myextratab', array(
            'label'     => Mage::helper('catalog')->__('My Extra Tab'),
            'content'   => 'Here is the contents for my extra tab'
        ));        

        return parent::_prepareLayout();
    }
}

Tenga en cuenta el código de pestaña adicional:

        $this->addTab('myextratab', array(
            'label'     => Mage::helper('catalog')->__('My Extra Tab'),
            'content'   => 'Here is the contents for my extra tab'
        )); 

Sin embargo, el lado derecho de la pantalla está en blanco. El árbol de categoría aún permanece, pero hacer clic en una categoría le da este error de JavaScript en Firebug: ReferenceError: category_info_tabsJsTabs is not defined

Actualización: haber leído esta pregunta duplicada y aswer So So It It Wo Lo he hecho todo. ¿Hay algún código de diseño que me falta?

Cualquier ayuda es apreciada masivamente.

¿Fue útil?

Solución

Si simplemente está organizando nuevos grupos de atributos, cree un script de configuración:

$installer = Mage::getResourceModel('catalog/setup','catalog_setup');
$installer->startSetup();

//Categories typically only have one attribute set, this will retrieve its ID
$setId = Mage::getSingleton('eav/config')->getEntityType('catalog_category')->getDefaultAttributeSetId();

//Add group to entity & set
$installer->addAttributeGroup('catalog_category',$setId, 'My Extra Tab');

$installer->endSetup();

Si también está agregando uno o más atributos, simplemente especifique el nombre de la pestaña en el group Valor de configuración para el atributo y el grupo se agregará automáticamente:

$installer = Mage::getResourceModel('catalog/setup','catalog_setup');
$installer->startSetup();

//Add group to entity & all attribute sets
$installer->addAttribute(
    'catalog_category',
    'new_attribute',
    array(
        'label' => 'New Attribute',
        'group' => 'My Extra Tab'   //will be created if necessary
    )
);

$installer->endSetup();

Si está intentando agregar un contenido genérico, agregando una pestaña a través del adminhtml_catalog_category_tabs El evento, como se señaló en otra respuesta, será el camino a seguir.

Otros consejos

Entonces, el problema con su código es bastante simple.

El XML está malformado y debe verse de la siguiente manera, con el <catalog_category_tabs> y MyNamespace_MyModule_Block_Catalog_Category_Tabs En la misma línea sin espacio en blanco adicional:

<blocks>
    <adminhtml>
        <rewrite>
            <catalog_category_tabs>MyNamespace_MyModule_Block_Catalog_Category_Tabs</catalog_category_tabs>
        </rewrite>
    </adminhtml>
</blocks>

Después de hacer este cambio, su código funcionará, pero hay otros comentarios sobre su código que debe tener en cuenta.

Punto 1

Lo que intentará hacer su código es llamar a su bloque _prepareLayout y luego llame al padre :: _ PrepareLayout () que en este caso está Mage_Adminhtml_Block_Catalog_Category_Tabs. Lo que puede hacer es actualizar su bloque de la siguiente manera. Nota: Esto agregará su nueva pestaña primero, lo que podría no ser idea.

protected function _prepareLayout()
{
    $this->addTab('myextratab', array(
            'label'     => Mage::helper('catalog')->__('My Extra Tab'),
            'content'   => 'Here is the contents for my extra tab'
        ));

    return parent::_prepareLayout();
}

Punto 2

Hay un evento que es perfecto para lo que quieres hacer. Puedes escuchar el evento adminhtml_catalog_category_tabs Y luego en tu observador haciendo algo como.

$tabs = $observer->getTabs();
$tabs->addTab('myextratab', array(
    'label'     => Mage::helper('catalog')->__('My Extra Tab'),
    'content'   => 'Here is the contents for my extra tab'
)); 

Esto te ayudaría si algún otro código reescribe este bloque

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top