Magento - 将自定义块添加到目录产品编辑视图中的现有选项卡

时间:2014-07-03 09:53:41

标签: magento tabs product

我需要在目录产品编辑视图的图像选项卡顶部添加一些内容。我不想添加新选项卡,我想在现有选项中包含一些内容(自定义块)。

我已经看过很多关于如何添加全新标签的教程,但没有关于如何编辑现有标签的内容。

我设法在事件上创建一个观察者" core_block_abstract_prepare_layout_after":

<core_block_abstract_prepare_layout_after>
      <observers>
          <edit_images_tab>
              <type>singleton</type>
                  <class>custom_module/observer</class>
                  <method>editImagesTab</method>
          </edit_images_tab>
      </observers>
</core_block_abstract_prepare_layout_after>

并删除并重新创建相同位置的标签:

public function editImagesTab(Varien_Event_Observer $observer) {
    $block = $observer->getEvent()->getBlock();

    if ($block instanceof Mage_Adminhtml_Block_Catalog_Product_Edit_Tabs) {
        $block->removeTab('group_10');

        $block->addTabAfter(
            'group_10',
            array(
                'label'     => 'Upload Product Files',
                'content'   => $block->getLayout()->createBlock('adminhtml/catalog_product_helper_form_gallery_content')->toHtml() . 'custom content'
            ),
            'group_9'
        );
    }
}

无论如何,似乎$ block-&gt; getLayout() - &gt; createBlock(&#39; adminhtml / catalog_product_helper_form_gallery_content&#39;) - &gt; toHtml()不足以重新创建图片标签。

不确定我是否朝着正确的方向前进。

任何提示都将不胜感激。

1 个答案:

答案 0 :(得分:1)

我找到了另一种实现目标的方法,这就是我所做的。

我已经覆盖了该类的方法toHtml()&#34; Mage_Adminhtml_Block_Catalog_Product_Helper_Form_Gallery&#34;就这样:

class Custom_Module_Block_Adminhtml_Catalog_Product_Helper_Form_Gallery 
    extends Mage_Adminhtml_Block_Catalog_Product_Helper_Form_Gallery {

    public function toHtml() {

        $myBlock = Mage::getSingleton('core/layout')->createBlock('custom_module/custom_block')->toHtml();

        return $myBlock . parent::toHtml();
    }
}

并在config.xml文件中添加:

<global>
    <blocks>
        <adminhtml>
            <rewrite>
               <catalog_product_helper_form_gallery>Custom_Module_Block_Adminhtml_Catalog_Product_Helper_Form_Gallery</catalog_product_helper_form_gallery>
            </rewrite>
        </adminhtml>
    </blocks>
</global>

不确定这是否是最佳方法,但它有效。