1
votes

I'm trying to add a custom tab in catalog, I'm following FishPig's tutorial.

So I want to achieve something like this

enter image description here

I have followed every instructions in the tutorial but still can't get it right.

I have disabled the catching and enabled debugging. I have checked the logs but I don't get any errors related this module.

My code

app/etc/modules/Fishpig_Customtabs.xml

<config>
    <modules>
        <Fishpig_Customtabs>
            <active>true</active>
            <codePool>local</codePool>
        </Fishpig_Customtabs>
    </modules>
</config>

app/code/local/Fishpig/Customtabs/etc/config.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Fishpig_CustomTabs>
            <version>0.1.0</version>
        </Fishpig_CustomTabs>
    </modules>
    <global>
        <blocks>
            <customtabs>
                <class>Fishpig_Customtabs_Block</class>
            </customtabs>
        </blocks>
        <models>
            <customtabs>
                <class>Fishpig_Customtabs_Model</class>
            </customtabs>
        </models>
    </global>
    <adminhtml>
        <layout>
            <updates>
                <customtabs>
                    <file>customtabs.xml</file>
                </customtabs>
            </updates>
        </layout>
        <events>
            <catalog_product_save_after>
                <observers>
                    <fishpig_save_product_data>
                        <type>singleton</type>
                        <class>customtabs/observer</class>
                        <method>saveProductTabData</method>
                    </fishpig_save_product_data>
                </observers>
            </catalog_product_save_after>
        </events>
    </adminhtml>
</config>

app/code/local/Fishpig/Customtabs/Block/Adminhtml/Catalog/Product/Tab.php

<?php

class Fishpig_Customtabs_Block_Adminhtml_Catalog_Product_Tab 
extends Mage_Adminhtml_Block_Template
implements Mage_Adminhtml_Block_Widget_Tab_Interface {

    /**
     * Set the template for the block
     *
     */
    public function _construct()
    {
        parent::_construct();

        $this->setTemplate('customtabs/catalog/product/tab.phtml');
    }

    /**
     * Retrieve the label used for the tab relating to this block
     *
     * @return string
     */
    public function getTabLabel()
    {
        return $this->__('My Custom Tab');
    }

    /**
     * Retrieve the title used by this tab
     *
     * @return string
     */
    public function getTabTitle()
    {
        return $this->__('Click here to view your custom tab content');
    }

    /**
     * Determines whether to display the tab
     * Add logic here to decide whether you want the tab to display
     *
     * @return bool
     */
    public function canShowTab()
    {
        return true;
    }

    /**
     * Stops the tab being hidden
     *
     * @return bool
     */
    public function isHidden()
    {
        return false;
    }


    /**
     * AJAX TAB's
     * If you want to use an AJAX tab, uncomment the following functions
     * Please note that you will need to setup a controller to recieve
     * the tab content request
     *
     */
    /**
     * Retrieve the class name of the tab
     * Return 'ajax' here if you want the tab to be loaded via Ajax
     *
     * return string
     */
#   public function getTabClass()
#   {
#       return 'my-custom-tab';
#   }

    /**
     * Determine whether to generate content on load or via AJAX
     * If true, the tab's content won't be loaded until the tab is clicked
     * You will need to setup a controller to handle the tab request
     *
     * @return bool
     */
#   public function getSkipGenerateContent()
#   {
#       return false;
#   }

    /**
     * Retrieve the URL used to load the tab content
     * Return the URL here used to load the content by Ajax 
     * see self::getSkipGenerateContent & self::getTabClass
     *
     * @return string
     */
#   public function getTabUrl()
#   {
#       return null;
#   }

}

app/design/adminhtml/default/default/layout/customtabs.xml

<?xml version="1.0"?>
<layout>
    <adminhtml_catalog_product_edit>
        <reference name="product_tabs">
            <action method="addTab">
                <name>my_custom_tab</name>
                <block>customtabs/adminhtml_catalog_product_tab</block>
            </action>
        </reference>
    </adminhtml_catalog_product_edit>
</layout>

app/design/adminhtml/default/default/template/customtabs/catalog/product/tab.phtml

<div class="input-field">
 <label for="custom_field">Custom Field</label>
 <input type="text" class="input-text" name="custom_field" id="custom_field" />
</div>

I have checked the code twice still the tab does not appear, am I missing something? How do I check if I have made a mistake in my module?

To be sure I have also added the model code

app/code/local/Fishpig/Customtabs/Model/Observer.php

class Fishpig_Customtabs_Model_Observer
{
    /**
     * Flag to stop observer executing more than once
     *
     * @var static bool
     */
    static protected $_singletonFlag = false;

    /**
     * This method will run when the product is saved from the Magento Admin
     * Use this function to update the product model, process the 
     * data or anything you like
     *
     * @param Varien_Event_Observer $observer
     */
    public function saveProductTabData(Varien_Event_Observer $observer)
    {
        if (!self::$_singletonFlag) {
            self::$_singletonFlag = true;

            $product = $observer->getEvent()->getProduct();

            try {
                /**
                 * Perform any actions you want here
                 *
                 */
                $customFieldValue =  $this->_getRequest()->getPost('custom_field');

                /**
                 * Uncomment the line below to save the product
                 *
                 */
                //$product->save();
            }
            catch (Exception $e) {
                Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
            }
        }
    }

    /**
     * Retrieve the product model
     *
     * @return Mage_Catalog_Model_Product $product
     */
    public function getProduct()
    {
        return Mage::registry('product');
    }

    /**
     * Shortcut to getRequest
     *
     */
    protected function _getRequest()
    {
        return Mage::app()->getRequest();
    }
}

Still it does not work. I'm new to magento and I have no idea what has gone wrong. Can someone please point out my mistake or a sample code?

My full code can be found here and the archive can be found here.

2
Did you flash cache of your system. Its working for me properly.Supravat Mondal
Yeah, I have disabled cache, flushed magento cache and flushed cache storage. Still it does not show in product information.Searock
I'm developing this on the local machine.Searock

2 Answers

1
votes

Your extension will not working because of the following points

1. Disable the Magento Compiler functionality

The Magento Compiler is found through System > Tools > Compilation. The compiler collects Magento's files and stores a compressed copy under /includes/src. Every time your files change, you must refresh the Compiler by clicking 'Run Compilation Process'. This both refreshes the compressed files as well as enable the Compiler.

Make sure the Compiler is disabled nefore continuing.

2. Check read/write permissions :

Although usually not necessary, in some cases you may need to verify the copied files permissions. On Unix/Linux systems you should set the files to readable by the server

3. Flush caches

Once you have disabled the compiler and copied the files it is time to flush the Magento caches. Go to System > Cache Management and flush all caches, including CSS, image and external caches.

3. Log out of Magento and log back in

Now it is necessary to log out of Magento's admin, and log back in. This is needed to enable any new permissions for the permission system.

**4 Confirm Extension Conflation **

Must be confirm your new extension whether conflict to another controller or no?

Look How to install an Appmerce Magento extension manually

0
votes

In order to register the custom tab in the new product and the edit product

I changed my code to

app/design/adminhtml/default/default/layout/customtabs.xml

<?xml version="1.0"?>
<layout>
    <adminhtml_catalog_product_new>
        <reference name="product_tabs">
            <action method="addTab">
                <name>my_custom_tab</name>
                <block>customtabs/adminhtml_catalog_product_tab</block>
            </action>
        </reference>
    </adminhtml_catalog_product_new>

    <adminhtml_catalog_product_edit>
        <reference name="product_tabs">
            <action method="addTab">
                <name>my_custom_tab</name>
                <block>customtabs/adminhtml_catalog_product_edit</block>
            </action>
        </reference>
    </adminhtml_catalog_product_edit>
</layout>

and added another block called Edit.php besides Tab.php