Вопрос

Я пытаюсь добавить дополнительную вкладку вверху страницы редактирования категории.По умолчанию:Общая информация, настройки отображения, индивидуальный дизайн и категории продуктов.

Поэтому я создал новый модуль, который переписывает блок, генерирующий вкладки.Вот соответствующий фрагмент из конфиг.xml:

    <blocks>

        <adminhtml>

            <rewrite>

                <catalog_category_tabs>

                    MyNamespace_MyModule_Block_Catalog_Category_Tabs

                </catalog_category_tabs>

            </rewrite>

        </adminhtml>

    </blocks>

Вот мой блок, который перезаписывает блок Magento по умолчанию:

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

Обратите внимание на дополнительный код табуляции:

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

Однако правая часть экрана просто пуста.Дерево категорий все еще остается, но нажатие на категорию приводит к ошибке Javascript в Firebug: ReferenceError: category_info_tabsJsTabs is not defined

ОБНОВЛЯТЬ:Прочитав этот повторяющийся вопрос и ответ на ТАК похоже, что я все сделал.Есть ли какой-то код макета, который мне не хватает?

Любая помощь очень ценится.

Это было полезно?

Решение

Если вы просто организуете новые группы атрибутов, создайте сценарий установки:

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

Если вы также добавляете один или несколько атрибутов, просто укажите имя вкладки в поле group значение конфигурации для атрибута и группа будут добавлены автоматически:

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

Если вы пытаетесь просто добавить общий контент, добавьте вкладку через adminhtml_catalog_category_tabs событие - как отмечено в другом ответе - будет подходящим вариантом.

Другие советы

Таким образом, проблема с вашим кодом довольно проста.

XML ускорен и должен выглядеть следующим образом, с <catalog_category_tabs> а также MyNamespace_MyModule_Block_Catalog_Category_Tabs На той же линии без лишнего белого пространства:

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

После того, как это изменение будет сработать, но есть другие комментарии о вашем коде, которые вы должны учитывать.

Точка 1

Что ваш код попытается позвонить в ваш блок _prepareLayout а затем позвоните родителю :: _ preparelayout (), который в этом случае Mage_Adminhtml_Block_Catalog_Category_Tabs. Анкет То, что вы можете сделать, это обновить свой блок следующим образом. Примечание. Сначала это добавит вашу новую вкладку, которая может не быть идеей.

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

Точка 2

Есть событие, которое идеально подходит для того, что вы хотите сделать. Вы можете послушать мероприятие adminhtml_catalog_category_tabs А потом в вашем наблюдателе делаете что -то вроде.

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

Это поможет вам, если какой -либо другой код переписывает этот блок

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top