2014-01-16 2 views
0

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

Итак, я создал новый модуль, который переписывает блок, который генерирует вкладки. Вот соответствующий отрывок из config.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

UPDATE: Прочитав this duplicate question and aswer на SO, похоже, я сделал все. Есть ли какой-то код макета, который мне не хватает?

Любая помощь получает широкую оценку.

ответ

5
  1. Отключить кеш и компиляцию, если вы еще этого не сделали.

Я скорее использовал наблюдатель событий, так как я чувствую, что это менее навязчивым:

Мои модули config.xml

<?xml version="1.0" encoding="UTF-8"?> 
<config> 
    <modules> 
     <Tzunghaor_Customtab> 
      <version>0.1.0</version> 
     </Tzunghaor_Customtab> 
    </modules> 

    <global> 
     <models> 
      <tzunghaor_customtab> 
       <class>Tzunghaor_Customtab_Model</class> 
      </tzunghaor_customtab> 
     </models> 

     <events> 
      <adminhtml_catalog_category_tabs> 
       <observers> 
        <tzunghaor_customtab_observer> 
         <class>tzunghaor_customtab/observer</class> 
         <method>addCategoryTab</method> 
        </tzunghaor_customtab_observer> 
       </observers> 
      </adminhtml_catalog_category_tabs> 
     </events> 

    </global> 
</config> 

tzunghaor_customtab/observer в наблюдатель относится к <class> префиксом, определенным в <models>, так это относится к Tzunghaor_Customtab_Model_Observer, который находится в /app/code/local/Tzunghaor/Customtab/Model/Observer.php:

<?php 
class Tzunghaor_Customtab_Model_Observer 
{ 
    /** 
    * Adds a custom tab to adminhtml category page 
    * 
    * @param Varien_Event_Observer $observer 
    */ 
    public function addCategoryTab($observer) 
    { 
     $tabs = $observer->getEvent()->getTabs(); 
     $tabs->addTab('features', array(
      'label'  => Mage::helper('catalog')->__('My Extra Tab'), 
      'content' => 'Here is the contents for my extra tab' 
     )); 
    } 
} 
Смежные вопросы