0

Please help! I'm completely lost in creating Magento Admin Grid. It's been a week now.

I have created a module coming from this tutorial http://ecommerce.eglobeits.com/blog/magento-admin-module-development-with-grid-and-tab/. The problem was, the grid won't show up. I have successfully created database table via install script.

Question:

How do I make the grid work?

Can you spot the problem?

These are the codes.

app/code/local/Rts/Pmadmin/etc/config.xml

<config>
<modules>
    <Rts_Pmadmin>
        <version>0.1.0</version>
    </Rts_Pmadmin>
</modules>
<global>
    <models>
        <Rts_Pmadmin>
            <class>Rts_Pmadmin_Model</class>
            <resourceModel>pmadmin_resource</resourceModel>
        </Rts_Pmadmin>
        <pmadmin_resource>
            <class>Rts_Pmadmin_Model_Resource</class>
            <entities>
                <pricematrix>
                    <table>pricematrix</table>
                </pricematrix>
            </entities>
        </pmadmin_resource>
    </models>
    <resources>
        <pricematrix_setup>
            <setup>
                <module>Rts_Pmadmin</module>
                <class>Rts_Pmadmin_Model_Resource_Mysql4_Setup</class>
            </setup>
            <connection>
                <use>core_setup</use>
            </connection>
        </pricematrix_setup>
        <pricematrix_write>
            <connection>
                <use>core_write</use>
            </connection>
        </pricematrix_write>
        <pricematrix_read>
            <connection>
                <use>core_read</use>
            </connection>
        </pricematrix_read>
    </resources>
    <helpers>
        <Rts_Pmadmin>
            <class>Rts_Pmadmin_Helper</class>
        </Rts_Pmadmin>
    </helpers>
</global>
<admin>
    <routers>
        <adminhtml>
            <args>
                <modules>
                    <Rts_Pmadmin after="Mage_Adminhtml">Rts_Pmadmin</Rts_Pmadmin>
                </modules>
            </args>
        </adminhtml>
    </routers>
</admin>
</config>

app/code/local/Rts/Pmadmin/etc/adminhtml.xml

<config>
<menu>
    <customer>
        <children>
            <pmadmin>
                <title>Price Matrix</title>
                <sort_order>9999</sort_order>
                <action>adminhtml/pmadmin/index</action>
            </pmadmin>
        </children>
    </customer>
</menu>
<acl>
    <resources>
        <admin>
            <children>
                <customer>
                    <children>
                        <padmin>
                            <title>Price Matrix</title>
                            <sort_order>9999</sort_order>
                        </padmin>
                    </children>
                </customer>
            </children>
        </admin>
    </resources>
</acl>
<layout>
    <updates>
        <pmadmin>
            <file>rts/pricematrix.xml</file>
        </pmadmin>
    </updates>
</layout>
</config>

app/design/adminhtml/default/default/layout/rts/pricematrix.xml

<layout version="0.1.0">
<adminhtml_pmadmin_index>
    <reference name="content">
        <block type="pmadmin/pmadmincontainer" name="pmadmincontainer"></block>
    </reference>
</adminhtml_pmadmin_index>

app/code/local/Rts/Pmadmin/controllers/PmadminController.php

class Rts_Pmadmin_PmadminController extends Mage_Adminhtml_Controller_Action {
public function indexAction() {
    $this->loadLayout();
    $this->renderLayout();
}

public function newAction(){
    $this->loadLayout();
    $this->_addContent($this->getLayout()->createBlock('pmadmin/adminhtml_pricematrix_edit'))
            ->_addLeft($this->getLayout()->createBlock('pmadmin/adminhtml_pricematrix_edit_tabs'));
    $this->renderLayout();
}

public function deleteAction() {
    if ($this->getRequest()->getParam('id') > 0) {
        try {
            $model = Mage::getModel('pmadmin/pricematrix');

            $model->setId($this->getRequest()->getParam('id'))
                    ->delete();

            Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('adminhtml')->__('Item was successfully deleted'));
            $this->_redirect('*/*/');
        } catch (Exception $e) {
            Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
            $this->_redirect('*/*/edit', array('id' => $this->getRequest()->getParam('id')));
        }
    }
    $this->_redirect('*/*/');
}

public function saveAction() {

    if ($data = $this->getRequest()->getPost())
    {
        $model = Mage::getModel('pmadmin/pricematrix');
        $id = $this->getRequest()->getParam('id');
        foreach ($data as $key => $value)
        {
            if (is_array($value))
            {
                    $data[$key] = implode(',',$this->getRequest()->getParam($key));
            }
        }

        if ($id) {
            $model->load($id);
        }
        $model->setData($data);

        Mage::getSingleton('adminhtml/session')->setFormData($data);
        try {
            if ($id) {
                $model->setId($id);
            }

            $model->save();

            if (!$model->getId()) {
                Mage::throwException(Mage::helper('pricematrix')->__('Error saving news details'));
            }

            Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('pricematrix')->__('Details was successfully saved.'));

            Mage::getSingleton('adminhtml/session')->setFormData(false);

            // The following line decides if it is a "save" or "save and continue"
            if ($this->getRequest()->getParam('back')) {
                $this->_redirect('*/*/edit', array('id' => $model->getId()));
            } else {
                $this->_redirect('*/*/');
            }

        } catch (Exception $e) {
            Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
            if ($model && $model->getId()) {
                $this->_redirect('*/*/edit', array('id' => $model->getId()));
            } else {
                $this->_redirect('*/*/');
            }
        }

      return;
    }
    Mage::getSingleton('adminhtml/session')->addError(Mage::helper('pricematrix')->__('No data found to save'));
    $this->_redirect('*/*/');
}


public function editAction() {

    $id = $this->getRequest()->getParam('pricematrix_id', null);

    $model = Mage::getModel('pmadmin/pricematrix');
    if ($id) {
        $model->load((int) $id);
        if ($model->getId()) {
            $data = Mage::getSingleton('adminhtml/session')->getFormData(true);
            if ($data) {
                $model->setData($data)->setId($id);
            }
        } else {
            Mage::getSingleton('adminhtml/session')->addError(Mage::helper('pricematrix')->__('matrix does not exist'));
            $this->_redirect('*/*/');
        }
    }
    Mage::register('pricematrix_data', $model);

    $this->_title($this->__('pricematrix'))->_title($this->__('Edit Matrix'));
    $this->loadLayout();
    $this->getLayout()->getBlock('head')->setCanLoadExtJs(true);

    $this->_addContent($this->getLayout()->createBlock('pmadmin/adminhtml_pricematrix_edit'))
            ->_addLeft($this->getLayout()->createBlock('pmadmin/adminhtml_pricematrix_edit_tabs'));
    $this->renderLayout();
}    
} 

app/code/local/Rts/Pmadmin/Block/Adminhtml/Pmadmincontainer.php

class Rts_Pmadmin_Block_Adminhtml_Pmadmincontainer extends Mage_Adminhtml_Block_Widget_Grid_Container {

public function __construct() {
    $this->_controller = 'pmadmin_pmadmin';
    $this->_blockGroup = 'pmadmin';
    $this->_headerText = Mage::helper('pricematrix')->__('Price Matrix Manager');
    $this->_addButtonLabel = Mage::helper('pricematrix')->__('Add New Matrix');
    parent::__construct();
}
}

app/code/local/Rts/Pmadmin/Block/Adminhtml/Pricematrix/Grid.php

class Rts_Pmadmin_Block_Adminhtml_Pricematrix_Grid extends Mage_Adminhtml_Block_Widget_Grid {

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

protected function _prepareCollection() {
    $collection = Mage::getModel('pmadmin/pricematrixcollection')->getCollection();
    $this->setCollection($collection);
    return parent::_prepareCollection();
}

protected function _prepareColumns() {
    $this->addColumn('pricematrix_id', array(
        'header' => Mage::helper('pricematrix')->__('ID'),
        'align' => 'right',
        'width' => '10px',
        'index' => 'pricematrix_id',
    ));

    $this->addColumn('title', array(
        'header' => Mage::helper('pricematrix')->__('Title'),
        'align' => 'left',
        'index' => 'title',
        'width' => '50px',
    ));


    $this->addColumn('short_description', array(
        'header' => Mage::helper('pricematrix')->__('Description'),
        'width' => '150px',
        'index' => 'short_description',
    ));

    $this->addColumn('file_path', array(
        'header' => Mage::helper('pricematrix')->__('File Path'),
        'width' => '150px',
        'index' => 'file_path',
    ));


    $this->addColumn('customer_group', array(
        'header' => Mage::helper('pricematrix')->__('Customer Group'),
        'width' => '150px',
        'index' => 'customer_group',
    ));


    $this->addColumn('creation_time', array(
        'header' => Mage::helper('pricematrix')->__('Posted On'),
        'width' => '150px',
        'index' => 'creation_time',
    ));

    return parent::_prepareColumns();
}


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

app/code/local/Rts/Pmadmin/Block/Adminhtml/Pricematrix/Edit.php

class Rts_Pmadmin_Model_Pricematrixcollection extends Mage_Core_Model_Mysql4_Collection_Abstract {
public function _construct()
{
    parent::_construct();
    $this->_init('pmadmin/pricematrix');
}
}

app/code/local/Rts/Pmadmin/Block/Adminhtml/Pricematrix/Edit/Form.php

 class Rts_Pmadmin_Block_Adminhtml_Pricematrix_Edit extends Mage_Adminhtml_Block_Widget_Form_Container{
    public function __construct()
  {
    parent::__construct();
    //vwe assign the same blockGroup as the Grid Container
    $this->_blockGroup = 'pmadmin';
    //and the same controller
    $this->_controller = 'Pmadmin_Pmadmin';
    //define the label for the save and delete button
    $this->_updateButton('save', 'label','save reference');
    $this->_updateButton('delete', 'label', 'delete reference');
}
   /* Here, we're looking if we have transmitted a form object,
      to update the good text in the header of the page (edit or add) */
public function getHeaderText()
{
    if( Mage::registry('matrix_data')&&Mage::registry('matrix_data')->getId())
     {
          return 'Edit reference '.$this->htmlEscape(
          Mage::registry('matrix_data')->getTitle()).'<br />';
     }
     else
     {
         return 'Add a contact';
     }
}
 }

app/code/local/Rts/Pmadmin/Block/Adminhtml/Pricematrix/Edit/Tabs.php

class Rts_Pmadmin_Block_Adminhtml_Pricematrix_Edit_Tabs extends Mage_Adminhtml_Block_Widget_Tabs {

public function __construct() {
    parent::__construct();
    $this->setId('pricematrix_grid');
    $this->setDestElementId('edit_form'); // this should be same as the form id define above
    $this->setTitle(Mage::helper('pricematrix')->__('Matrix Information'));
}

protected function _beforeToHtml() {
    $this->addTab('form_section', array(
        'label' => Mage::helper('pricematrix')->__('Matrix Information'),
        'title' => Mage::helper('pricematrix')->__('Matrix Information'),
        'content' => $this->getLayout()->createBlock('pmadmin/adminhtml_pricematrix_edit_tab_form')->toHtml(),
    ));

    $this->addTab('form_section1', array(
        'label' => Mage::helper('pricematrix')->__('Content'),
        'title' => Mage::helper('pricematrix')->__('Content'),
        'content' => $this->getLayout()->createBlock('pmadmin/adminhtml_pricematrix_edit_tab_content')->toHtml(),
    ));

    return parent::_beforeToHtml();
}
}

app/code/local/Rts/Pmadmin/Block/Adminhtml/Pricematrix/Edit/Tab/Form.php

class Rts_Pmadmin_Block_Adminhtml_Pricematrix_Edit_Tab_Form extends Mage_Adminhtml_Block_Widget_Form {

protected function _prepareForm() {

    if (Mage::registry('matrix_data')) {
        $data = Mage::registry('matrix_data')->getData();
    } else {
        $data = array();
    }

    $form = new Varien_Data_Form();
    $this->setForm($form);
    $fieldset = $form->addFieldset('news_news', array('legend' => Mage::helper('pricematrix')->__('news information')));

    $fieldset->addField('title', 'text', array(
        'label' => Mage::helper('pricematrix')->__('Matrix Title'),
        'class' => 'required-entry',
        'required' => true,
        'name' => 'title',
    ));

    $fieldset->addField('tag', 'text', array(
        'label' => Mage::helper('pricematrix')->__('Tag'),
        'class' => 'required-entry',
        'required' => true,
        'name' => 'tag',
    ));

    $form->setValues($data);

    return parent::_prepareForm();
}
}

app/code/local/Rts/Pmadmin/Block/Adminhtml/Pricematrix/Edit/Tab/Content.php

class Rts_Pmadmin_Block_Adminhtml_Pricematrix_Edit_Tab_Content extends Mage_Adminhtml_Block_Widget_Form {

protected function _prepareForm() {

    if (Mage::registry('matrix_data')) {
        $data = Mage::registry('matrix_data')->getData();
    } else {
        $data = array();
    }

    $form = new Varien_Data_Form();
    $this->setForm($form);
    $fieldset = $form->addFieldset('news_news', array('legend' => Mage::helper('news')->__('More information')));

    /*
     * Editing the form field in wysiwyg editor.
     */

    $wysiwygConfig = Mage::getSingleton('cms/wysiwyg_config')->getConfig();
    $wysiwygConfig->addData(array('add_variables' => false,
        'add_widgets' => true,
        'add_images' => true,
        'directives_url' => Mage::getSingleton('adminhtml/url')->getUrl('adminhtml/cms_wysiwyg/directive'),
        'directives_url_quoted' => preg_quote(Mage::getSingleton('adminhtml/url')->getUrl('adminhtml/cms_wysiwyg/directive')),
        'widget_window_url' => Mage::getSingleton('adminhtml/url')->getUrl('adminhtml/widget/index'),
        'files_browser_window_url' => Mage::getSingleton('adminhtml/url')->getUrl('adminhtml/cms_wysiwyg_images/index'),
        'files_browser_window_width' => (int) Mage::getConfig()->getNode('adminhtml/cms/browser/window_width'),
        'files_browser_window_height' => (int) Mage::getConfig()->getNode('adminhtml/cms/browser/window_height')
    ));


    $fieldset->addField('description', 'editor', array(
        'name' => 'description',
        'label' => Mage::helper('news')->__('Description'),
        'title' => Mage::helper('news')->__('Description'),
        'style' => 'width:800px; height:500px;',
        'config' => $wysiwygConfig,
        'required' => false,
        'wysiwyg' => true
    ));

    $form->setValues($data);
}
}

I don't know were the problem is.

Please help!

Thanks

UPDATE: Screenshot

The page display the header, update messages, and footer but no grid.

screen shot

rodge
  • 264
  • 2
  • 4
  • 21

2 Answers2

1

In your config.xml you have not defined <blocks> </blocks> tag inside <global> </global> tag.

For more details please follow below tutorial :

http://navaneeth.me/creating-magento-extension-with-custom-database-table/#.VklzCHwrLOR

  • Thanks @PHP Weblineindia! I have already added it however still no grid displaying. I believe that the layout.xml has the problem. – rodge Nov 16 '15 at 06:23
  • I think there is problem with your helper class in that you have used helper as "Mage::helper('pricematrix')" Replace as below. Mage::helper('pricematrix'); with Mage::helper('pmadmin'); –  Nov 16 '15 at 06:40
  • Thanks again for reply. I tried to change the helpers to pmadmin however still the same. The page display the header, update messages, and footer however the grid was not displayed. I'll try to put screen shot. – rodge Nov 16 '15 at 07:15
  • I have checked your code in that i found there is some of changes required. I suggest you please follow the URL that i already given you in answer. I am sure that will help you to get complete custom module working with admin grid also :) –  Nov 16 '15 at 07:43
  • Thanks! I'll try tofollow it. – rodge Nov 16 '15 at 08:24
  • I followed the tutorial from the link you have given however on the admin page the grid title and the add button is present, the table grid itself is not displayed. – rodge Nov 17 '15 at 05:25
  • Ok rodge so is it possible that i can see your full source code? –  Nov 17 '15 at 05:29
  • Sure, I'll create another one and send you a link. – rodge Nov 17 '15 at 05:38
  • This is the new post I have created. http://stackoverflow.com/questions/33750164/magento-admin-grid-was-not-displaying-only-header-title-and-add-button-are-prese – rodge Nov 17 '15 at 06:03
0

the problem with you admin router change it to pmadmin as you calling it.

<admin>
    <routers>
        <adminhtml>
            <args>
                <modules>
                    <Rts_Pmadmin after="Mage_Adminhtml">pmadmin</Rts_Pmadmin>
                </modules>
            </args>
        </adminhtml>
    </routers>
</admin>
Qaisar Satti
  • 2,742
  • 2
  • 18
  • 36