Magento Aggiungere tab

Da Andreabont's Wiki.

Aggiungere un tab alla Customer Edit Page

Per aggiungere un tab è necessario lavorare su un proprio modulo, nel nostro caso il modulo si chiamerà miomodulo e sarà localizzato in app/code/local/miomodulo

1° config.xml

Bisogna compilare correttamente il file config.xml del modulo, localizzato in app/code/local/Miomodulo/etc/config.xml

Nella sezione "global" aggiungere la classe che gestirà il nuovo tab chiamato miotab:

<global>
   <blocks>
      <miomodulo>
         <class>Miomodulo_Block</class>
      </miomodulo>
   </blocks>
</global>

Nella sezione "adminhtml" aggiungere:

<adminhtml>
   <layout>
      <updates>
         <miomodulo>
            <file>miotab.xml</file>
         </miomodulo>
      </updates>
   </layout>
</adminhtml>

2° La classe gestore

Ora possiamo creare la classe Miomodulo_Block_Adminhtml_Customer_Edit_Tab_Miaclasse in app/code/local/Miomodulo/Block/Adminhtml/Customer/Edit/Tab/Miaclasse.php.

<?php 
class Miomodulo_Block_Adminhtml_Customer_Edit_Tab_Miaclasse
 extends Mage_Adminhtml_Block_Template
    implements Mage_Adminhtml_Block_Widget_Tab_Interface
{

    public function __construct()
    {
        $this->setTemplate('miotab/action.phtml');
        $this->setId('customer_edit_tab_history');
    }

    /**
     * Return Tab label
     *
     * @return string
     */
    public function getTabLabel()
    {
        return $this->__('Action Center');
    }

    /**
     * Return Tab title
     *
     * @return string
     */
    public function getTabTitle()
    {
        return $this->__('Action Tab');
    }

    /**
     * Can show tab in tabs
     *
     * @return boolean
     */
    public function canShowTab()
    {
        $customer = Mage::registry('current_customer');
        return (bool)$customer->getId();
    }

    /**
     * Tab is hidden
     *
     * @return boolean
     */
    public function isHidden()
    {
        return false;
    }

     /**
     * Defines after which tab, this tab should be rendered
     *
     * @return string
     */
    public function getAfter()
    {
        return 'tags';
    }

}
?>

3° Layout file

In app/design/adminhtml/default/default/layout/miotab.xml:

<?xml version="1.0"?>
<layout version="0.1.0">
    <adminhtml_customer_edit>
         <reference name="customer_edit_tabs">
            <action method="addTab">
               <name>customer_edit_tab_miaclasse</name>
               <block>miomodulo/adminhtml_customer_edit_tab_miaclasse</block>
            </action>
        </reference>
   </adminhtml_customer_edit>
</layout>

4° Template file

In app/design/adminhtml/default/default/template/miotab/action.phtml aggiungere:

<div id="customer_info_tabs_customer_edit_tab_action_content">
    <div class="entry-edit">
        <div class="entry-edit-head">
            <h4 class="icon-head head-edit-form fieldset-legend">Action Tab</h4>
        </div>
        <div id="group_fields4" class="fieldset fieldset-wide">
            <div class="hor-scroll">
                <table class="form-list" cellspacing="0">
                    <tbody>
                    <tr>
                        <td>Custom Action Tab Contents Here</td>
                    </tr>
                    </tbody>
                </table>
            </div>
        </div>
    </div>
</div>

5° Collegare il tab alle ACL (opzionale)

In app/code/local/Miomodulo/etc/adminhtml.xml aggiungere:

<?xml version="1.0"?>
<config>
    <acl>
        <resources>
            <admin>
                <children>
                    <customer>
                        <children>
                            <manage translate="title" >
                                <children>
                                    <miotab translate="title" module="miomodulo">
                                        <title>miotab</title>
                                        <sort_order>50</sort_order>
                                    </miotab>
                                </children>
                            </manage>
                        </children>
                    </customer>
                </children>
            </admin>
        </resources>
    </acl>
</config>

In app/code/local/Miomodulo/Block/Adminhtml/Customer/Edit/Tab/Miaclasse.php modificare canShowTab() in questo modo:

public function canShowTab() 
{
   $customer = Mage::registry('current_customer');
   return $customer->getId()
       && Mage::helper('enterprise_reward')->isEnabled()
       && Mage::getSingleton('admin/session')->isAllowed("admin/customer/manage/miotab");
}

Visualizzare una tabella al Tab nel Customer Edit Menu

1° Modifica la classe gestore

La classe Miomodulo_Block_Adminhtml_Customer_Edit_Tab_Miaclasse in app/code/local/Miomodulo/Block/Adminhtml/Customer/Edit/Tab/Miaclasse.php, dovrà essere modificata in questo modo:

class Miomodulo_Block_Adminhtml_Customer_Edit_Tab_Miaclasse
    extends Miomodulo_Block_Adminhtml_Customer_Edit_Tab_Miagriglia_Grid
    implements Mage_Adminhtml_Block_Widget_Tab_Interface
{

    public function __construct()
    {
       parent::__construct();
       $this->setId('customer_edit_tab_history');
    }

...

}

2° Creare la classe generatrice della tabella

Creaeìre Miomodulo_Block_Adminhtml_Customer_Edit_Tab_Miagriglia_Grid in app/code/local/Miomodulo/Block/Adminhtml/Customer/Edit/Tab/Miagriglia/Grid.php con dentro:

class Miomodulo_Block_Adminhtml_Customer_Edit_Tab_Miagriglia_Grid
    extends Mage_Adminhtml_Block_Widget_Grid 
{
    public function __construct()
    {
        parent::__construct();
        $this->setId('miagriglia_grid');
        $this->setSaveParametersInSession(true);
    }

    protected function _getCollectionClass()
    {
        // NB: Ricordarsi di dichiararlo in config.xml
        return 'miomodulo/miomodel';
    }

    protected function _prepareCollection()
    {
        $collection = Mage::getModel('miomodulo/miomodel')->getCollection();

        // Qui eventualmente manipolare la select.

        $this->setCollection($collection);
        return parent::_prepareCollection();
    }

    protected function _prepareColumns()
    {

        $this->addColumn('campo_db', array(
            'header'    => 'Nome Colonna',
            'index'     => 'campo_db',
            'type'      => 'tipo',
        ));

        ...

        return parent::_prepareColumns();
    }


}