Ürün Detaylarına Özel Sekme Eklemek İçin En İyi Uygulama (arka uç)


Yanıtlar:


16

Şahsen ben addTab()tarafından sağlanan bir düzen / eylem yaklaşımı için gitmek istiyorumMage_Adminhtml_Block_Widget_Tabs

Burada 2 ana eylem söz konusudur:

  1. XML mizanpaj değişiklikleri ekle
  2. sekme sınıfını oluştur
  3. (tüm bunlar burada kapsam dışında yeni bir modül oluşturmayı başarabilir)

- 1. Düzen değişiklikleri -

<?xml version="1.0"?>
<layout>
     <adminhtml_catalog_product_edit>
        <reference name="product_tabs">
            <block type="MODULENAME/adminhtml_catalog_product_edit_tab" name="custom_tab"/>
            <action method="addTab">
                <name>Custom Tab</name>
                <block>custom_tab</block>
            </action>
        </reference>
    </adminhtml_catalog_product_edit>
</layout>

- 2. Sekme Sınıfı -

<?php
class NAMESPACE_MODULENAME_Block_Adminhtml_Catalog_Product_Edit_Tab extends Mage_Adminhtml_Block_Widget
    implements Mage_Adminhtml_Block_Widget_Tab_Interface
{
    public function canShowTab()
    {
        return true;
    }
    public function getTabLabel()
    {
        return $this->__('Custom Tab');
    }
    public function getTabTitle()
    {
        return $this->__('Custom Tab');
    }
    public function isHidden()
    {
        return false;
    }
    public function getTabUrl()
    {
        return $this->getUrl('*/*/customtab', array('_current' => true));
    }
    public function getTabClass()
    {
        return 'ajax';
    }
} 

Not:
Arka uç gelişimi hakkında çok az belge var, Magento Devs gibi hissediyorum. bu alan hakkındaki bilgileri paylaşmaktan utangaçtırlar (ve bu yüzden yukarıdaki sorunun nedeni budur.)

Kaynak:
Bu teknik burada bulunabilir:
- http://www.webspeaks.in/2012/02/create-custom-tab-in-magento-product-addedit-page.html ve ayrıca bu Inchoo makalesinin yorumlarında :
- http://inchoo.net/ecommerce/magento/how-to-add-custom-product-relations-in-magento/


4

İşte böyle yapıyorum.

Etkinlik için bir gözlemci oluşturun core_block_abstract_prepare_layout_after. Yine de en iyi olay olup olmadığından emin değilim.

<adminhtml>
    ...
    <events>
       <core_block_abstract_prepare_layout_after>
            <observers>
                <[namespace]_[module]_product>
                    <type>singleton</type>
                    <class>[module]/adminhtml_observer</class>
                    <method>addProductTabBlock</method>
                </[namespace]_[module]_product>
            </observers>
       </core_block_abstract_prepare_layout_after>
    </events>
    ....
</adminhtml>

Sonra gözlemciyi yarat

class [Namespace]_[Module]_Model_Adminhtml_Observer {
    //this checks if the tab can be added. You don't want to add the tab when selecting the product type and attribute set or when selecting the configurable attributes.
    protected function _canAddTab($product){
        if ($product->getId()){
            return true;
        }
        if (!$product->getAttributeSetId()){
            return false;
        }
        $request = Mage::app()->getRequest();
        if ($request->getParam('type') == 'configurable'){
            if ($request->getParam('attributes')){
                return true;
            }
        }
        return false;
    }
    //the method that actually adds the tab
    public function addProductTabBlock($observer){
        $block = $observer->getEvent()->getBlock();
        $product = Mage::registry('product');
        //if on product tabs block and the tab can be added...
        if ($block instanceof Mage_Adminhtml_Block_Catalog_Product_Edit_Tabs && $this->_canAddTab($product)){
            //in case there is an ajax tab
            $block->addTab('some_identifier_here', array(
                'label' => Mage::helper('catalog')->__('Some Label here'),

                'url'   => Mage::helper('adminhtml')->getUrl('adminhtml/some_url/here', array('_current' => true)),
                'class' => 'ajax', 
            ));
            //in case it's a simple content tab
            $block->addTab('other_identifier_here', array(
                 'label'     => Mage::helper('catalog')->__('Label here'),
                'content'   => $this->getLayout()->createBlock('[module]/block_alias')->toHtml(),
            )); 
        }
        return $this;
    }
}

Sadece emin Değiştirmek yapmak [namespace]ve [module]size modül için var değerlerle.


Bu iyi bir uygulama değil
Fra

2
@Fra öyle olduğunu söylemedim. Cevap "İşte böyle yapıyorum." Ve çalışıyor. Challange, değiştirmek veya daha iyi bir alternatif ile çekinmeyin.
Marius

bu yaklaşıma sahip olmak iyidir, böylece bu sayfada mümkün olan tüm çözümleri toplayabiliriz. (cevabımı daha "Magento" yolu için kontrol edin)
Fra

@Fra. İlginç. Deneyeceğim.
Marius

@Marius, katalog-> ürünleri yönetmek gibi yeni bir menü oluşturmak istiyorum. Herhangi bir yolu var mı? Katalogun tam kopyasını-> ürünleri yönetmek.
Mücahid

2

config.xmlDosyanıza aşağıdaki kodu ekleyin

<blocks>
...
    <modulename>
        <class>Company_ModuleName_Block</class>
    </modulename>
    <adminhtml>
        <rewrite>
             <catalog_product_edit_tabs>Company_ModuleName_Block_Adminhtml_Tabs</catalog_product_edit_tabs>
         </rewrite>
     </adminhtml>
...
</blocks>

Bundan sonra yeni bir dosya oluşturmalısınız: Company/ModuleName/Block/Adminhtml/Tabs.php

<?php

class Company_ModuleName_Block_Adminhtml_Tabs extends Mage_Adminhtml_Block_Catalog_Product_Edit_Tabs
{
    private $parent;

    protected function _prepareLayout()
    {
        //get all existing tabs
        $this->parent = parent::_prepareLayout();
        //add new tab
        $this->addTab('tabid', array(
                     'label'     => Mage::helper('catalog')->__('New Tab'),
                     'content'   => $this->getLayout()
             ->createBlock('modulename/adminhtml_tabs_tabid')->toHtml(),
        ));
        return $this->parent;
    }
}

Ardından, bir dosya oluşturun: Company/ModuleName/Block/Adminhtml/Tabs/Tabid.php

<?php

class Company_ModuleName_Block_Adminhtml_Tabs_Tabid extends Mage_Adminhtml_Block_Widget
{
    public function __construct()
    {
        parent::__construct();
        $this->setTemplate('modulename/newtab.phtml');
    }
}

Uygulamanın / kod / yerel / Büyücü / Adminhtml / Blok / Katalog / Ürün / Düzenleme / Tabs.php

) ekleyin ve işleve aşağıdaki snippet'i ekleyin _prepareLayout()

$this->addTab('tabid', array(
              'label'     => Mage::helper('catalog')->__('New Tab'),
              'content'   => $this->_translateHtml($this->getLayout()
     ->createBlock('modulname/adminhtml_tabs_tabid')->toHtml()),
));

Her zaman herhangi bir çekirdek dosyanın yerel dosyasını oluşturabilirsiniz.


yeniden yazma hoş karşılanmadı, yine de bu yaklaşıma sahip olmak iyi, bu yüzden burada tüm olası çözümlere sahibiz
Fra

Yerel favori oluşturarak her zaman yeniden yazmayı önleyebiliriz, yine de kişisel favoriniz olduğunda, buna devam etmek daha iyidir. İyi Şanslar
TBI Infotech

bu son cevap gerçekten iyi değil ... yerel sadece son çözüm olarak kullanılmalı, bir yeniden yazma kullanmaktan çok daha kötü
Fra

Lütfen yeniden yazma işleminin nasıl daha kötü bir yerel oluşturulacağını önerin?
TBI Infotech

hiç eflatun geliştirdin mi? local hiç kullanılmamalıdır, bu en iyi uygulamadır ... local neredeyse çekirdek dosyayı düzenlemek gibidir.
Fra
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.