Frage

Ich versuche, dem oberen Rand der Kategorie -Bearbeitungsseite eine zusätzliche Registerkarte hinzuzufügen. Die Standardeinstellungen sind: Allgemeine Informationen, Anzeigeneinstellungen, benutzerdefinierte Design- und Kategorieprodukte.

Daher habe ich ein neues Modul erstellt, das den Block umschreibt, der die Registerkarten erzeugt. Hier ist der entsprechende Ausschnitt aus config.xml:

    <blocks>

        <adminhtml>

            <rewrite>

                <catalog_category_tabs>

                    MyNamespace_MyModule_Block_Catalog_Category_Tabs

                </catalog_category_tabs>

            </rewrite>

        </adminhtml>

    </blocks>

Hier ist mein Block, der den Standard -Magento überschreibt:

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

Beachten Sie den zusätzlichen Registerkartencode:

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

Die rechte Seite des Bildschirms ist jedoch nur leer. Der Kategoriebaum bleibt weiterhin, aber das Klicken auf eine Kategorie gibt diesen JavaScript -Fehler in Firebug: ReferenceError: category_info_tabsJsTabs is not defined

UPDATE: Nachdem Sie gelesen haben Diese doppelte Frage und Aswer Also sieht es so aus, als hätte ich alles getan. Gibt es einen Layoutcode, den ich vermisse?

Jede Hilfe wird massiv geschätzt.

War es hilfreich?

Lösung

Wenn Sie einfach neue Attributgruppen organisieren, erstellen Sie ein Setup -Skript:

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

Wenn Sie auch ein oder mehrere Attribute hinzufügen, geben Sie einfach den Registerkartennamen in der group Konfigurationswert für das Attribut und die Gruppe werden automatisch hinzugefügt:

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

Wenn Sie versuchen, nur einige generische Inhalte hinzuzufügen, fügen Sie eine Registerkarte über die hinzu adminhtml_catalog_category_tabs Ereignis - wie in einer anderen Antwort erwähnt - wird der richtige Weg sein.

Andere Tipps

Das Problem mit Ihrem Code ist also ziemlich einfach.

Das XML ist fehlerhaft und sollte wie folgt aussehen, mit dem <catalog_category_tabs> und MyNamespace_MyModule_Block_Catalog_Category_Tabs Auf der gleichen Linie ohne zusätzlichen Weißraum:

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

Nachdem Sie diese Änderung vorgenommen haben, funktioniert Ihr Code, aber es gibt einige andere Kommentare zu Ihrem Code, die Sie berücksichtigen sollten.

Punkt 1

Was Ihr Code versuchen wird, ist, den Block zu rufen _prepareLayout und rufen Sie dann das übergeordnete :: _ preparelayout () an, was in diesem Fall ist Mage_Adminhtml_Block_Catalog_Category_Tabs. Sie können Ihren Block wie folgt aktualisieren. Hinweis: Dies fügt zuerst Ihre neue Registerkarte hinzu, die möglicherweise keine Idee ist.

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

Punkt 2

Es gibt eine Veranstaltung, die perfekt für das ist, was Sie tun möchten. Sie können die Veranstaltung anhören adminhtml_catalog_category_tabs Und dann in deinem Beobachter so etwas wie.

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

Dies würde Ihnen helfen, wenn ein anderer Code diesen Block umschreibt

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top