0

Folder Structure:

Companyname/Products/Block/Adminhtml/Products.php

class Companyname_Products_Block_Adminhtml_Products extends Mage_Adminhtml_Block_Widget_Grid_Container {

    public function __construct() {
        $this->_controller = 'adminhtml_products';
        $this->_blockGroup = 'companyname_products';
        $this->_headerText = Mage::helper('companyname_products')->__('Books Manager');
        $this->_addButtonLabel = Mage::helper('companyname_products')->__('Add Book');

        parent::__construct();
    }

}

Companyname/Products/Block/AdminHtml/Products/Grid.php

class Companyname_Products_Block_Adminhtml_Products_Grid extends Mage_Adminhtml_Block_Widget_Grid {

    public function __construct() {
        parent::__construct();
        $this->setId('booksGrid');
        $this->setDefaultSort('product_id');
        $this->setDefaultDir('ASC');
        $this->setSaveParametersInSession(true);
    }

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

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

    protected function _prepareColumns() {



        $this->addColumn('product_id', array(
            'header' => Mage::helper('companyname_products')->__('ID'),
            'align' => 'left',
            'width' => '10px',
            'index' => 'product_id',

        ));

        $this->addColumn('updated_at', array(
            'header' => Mage::helper('companyname_products')->__('Updated At'),
            'align' => 'left',
            'index' => 'updated_at',
            'width' => '20px',

        ));


        $this->addColumn('format', array(
            'header' => Mage::helper('companyname_products')->__('Format'),
            'width' => '10px',
            'index' => 'format',

        ));


        $this->addColumn('sku', array(
            'header' => Mage::helper('companyname_products')->__('Sku'),
            'width' => '30px',
            'index' => 'sku',

        ));

        $this->addExportType('*/*/exportCsv', Mage::helper('companyname_products')->__('CSV'));

        return parent::_prepareColumns();
    }

    protected function _prepareMassaction() {

    }

    public function getRowUrl($row) {
        return $this->getUrl('*/*/edit', array('id' => $row->getProductId()));
    }

}

etc/config.xml

<config>
    <modules>
        <companyname_Products>
            <version>0.1.0</version>
        </companyname_Products>
    </modules>
    <global>
        <helpers>
            <companyname_products>
                <class>companyname_Products_Helper</class>
            </companyname_products>    
        </helpers>
        <blocks>
            <companyname_products>
                <class>companyname_Products_Block</class>
            </companyname_products>
        </blocks>
        <models>
            <companyname_products>
                <class>companyname_Products_Model</class>
                <resourceModel>companyname_products_mysql4</resourceModel>
            </companyname_products>
            <companyname_products_mysql4>
                <class>companyname_Products_Mysql4</class>
                <entities>
                    <books>
                        <table>companyname_products_books</table>
                    </books>
                </entities>
            </companyname_products_mysql4>   
        </models>
        <resources>
            <companyname_products_setup>
                <setup>
                    <module>companyname_Products</module>
                    <class>companyname_Products_Model_Resource_Setup</class>
                </setup>
                <connection>
                    <use>core_setup</use>
                </connection>
            </companyname_products_setup>
            <companyname_products_write>
                <connection>
                    <use>core_write</use>
                </connection>
            </companyname_products_write>
            <companyname_products_read>
                <connection>
                    <use>core_read</use>
                </connection>
            </companyname_products_read>
        </resources>
    </global>
    <admin>
        <routers>
            <adminhtml>
                <args>
                    <modules>
                        <companyname_products before="Mage_Adminhtml">companyname_Products_Adminhtml</companyname_products>
                    </modules>
                </args>
            </adminhtml>
        </routers>
    </admin>
    <adminhtml>
        <layout>
            <updates>
                <companyname_products module="companyname_products">
                    <file>companyname_products.xml</file>
                </companyname_products>
            </updates>
        </layout>


    </adminhtml>
</config>

etc/adminhtml.xml

<config>
    <menu>
        <companyname_products translate="title" module="companyname_products">
            <title>Upload Books</title>
            <sort_order>71</sort_order>
            <children>
                <items module="companyname_products">
                    <title>Manage Books</title>
                    <sort_order>0</sort_order>
                    <action>adminhtml/books/index</action>
                </items>
            </children>
        </companyname_products>
    </menu>
    <acl>
        <resources>
            <admin>
                <children>
                    <companyname_products translate="title" module="companyname_products">
                        <title>Upload Books</title>
                        <sort_order>300</sort_order>
                        <children>
                            <items translate="title" module="companyname_products">
                                <title>Manage Books</title>
                                <sort_order>0</sort_order>
                            </items>
                        </children>
                    </companyname_products>
                </children>
            </admin>
        </resources>
    </acl>
</config>

If you see errors in the xml files that has to do with uppercase letters ignore them.They are correct in the original file.

My problem and my question is: The link Upload Books is there.The acl permissions are working fine.The database is created correctly.The grid container is created BUT not the grid itself. I get a page with the Add Book button and Manage Books label and not the grid.I also can echo through the function _prepareColumns() text..And i checked and the grid.phtml is loading and my Block. I use v1.8.1 magento on Xampp. Thanks a lot!

========================= EDIT ===========================

After many hours i realized that the problem is coming from the database. if i do that:

 protected function _prepareCollection() {
        $collection = Mage::getModel('companyname_books/books')->getCollection();
            var_dump($collection);

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

The result is bool(false). But from the way I am making a database I can't really find a problem. Here is how I am doing them.

Model/Products.php

class Companyname_Products_Model_Books extends Mage_Core_Model_Abstract
{
    public function __construct() {
        $this->_init('comapnyname_products/books');
        parent::_construct();
    } 

}

Model/Mysql4/Products.php

class Companyname_Books_Model_Mysql4_Products extends Mage_Core_Model_Mysql4_Abstract {

    public function _construct() {
        $this->_init('comapnyname_products/books', 'book_id');
    }

}

Collection.php

class Companyname_Books_Model_Mysql4_Products_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract {

    public function _construct() {
        $this->_init('comapnyname_products/books');
        parent::_construct();
    }

}
  • Not sure if this is the issue (most probably not) but rename the folder AdminHtml to Adminhtml – Marius Jan 14 '14 at 12:09
  • It is Adminhtml.My bad when i was making the post.As i mention everything apart from the grid itself is working. – vbak Jan 14 '14 at 12:10
  • I don't know that the issue is but here is how you can debug. Temporary create a method in your container block that looks like this: protected function _prepareLayout(){echo get_class($this->getLayout()->createBlock( $this->_blockGroup.'/' . $this->_controller . '_grid'); exit;} See what that echos. It should show Companyname_Products_Block_Adminhtml_Products_Grid if everything is correct. Also check the var/log for error messages. – Marius Jan 14 '14 at 12:14
0

I think this is preventing it from working.
In the config.xml you declared your resource node like this:

<companyname_products_mysql4>
    <class>companyname_Products_Mysql4</class>
    <entities>
        <books>
            <table>companyname_products_books</table>
        </books>
    </entities>
</companyname_products_mysql4> 

The <class> tag is wrong. It should be

<class>Companyname_Products_Model_Mysql4</class>
  • Yes,I found it too..Sharp eye though! – vbak Feb 22 '14 at 17:41

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.