Magento - 尝试创建新的Adminhtml网格表页时出错

时间:2015-02-07 15:32:11

标签: php magento adminhtml

我正在使用Mangento 1.9.0.1。

我正在开发一个新的自定义扩展程序,这是我到目前为止所做的:

/app/code/community/VivasIndustries/SmsNotification/etc/config.xml:

<?xml version="1.0"?>
<config>
  <modules>
    <VivasIndustries_SmsNotification>
      <version>0.1.0</version>
    </VivasIndustries_SmsNotification>
  </modules>
  <global>
    <models>
        <smsnotification>
            <class>VivasIndustries_SmsNotification_Model</class>
            <resourceModel>vivasindustries_smsnotification_resource</resourceModel>
        </smsnotification>
    </models>
    <resources>
        <smsnotification_setup>
            <setup>
                <module>VivasIndustries_SmsNotification</module>
            </setup>
        </smsnotification_setup>
    </resources>    
    <events>
        <sales_order_save_after>
            <observers>
                <vivasindustries_smsnotification>
                    <class>smsnotification/observer</class>
                    <method>orderSaved</method>
                </vivasindustries_smsnotification>
            </observers>
        </sales_order_save_after>
    </events>
    <helpers>
        <smsnotification>
            <class>VivasIndustries_SmsNotification_Helper</class>
        </smsnotification>
    </helpers>
    <blocks>
        <smsnotification>
             <class>VivasIndustries_SmsNotification_Block</class>
        </smsnotification>
    </blocks>
  </global>
  <adminhtml>
    <acl>
        <resources>
            <all>
                <title>Allow Everything</title>
            </all>
            <admin>
                <children>
                    <system>
                        <children>
                            <config>
                                <children>
                                    <vivas>
                                        <title>Vivas - All</title>
                                    </vivas>
                                </children>
                            </config>
                        </children>
                    </system>
                </children>
            </admin>
        </resources>
    </acl>
    </adminhtml>
    <admin>
        <routers>
            <adminhtml>
                <args>
                    <modules>
                        <VivasIndustries_SmsNotification before="Mage_Adminhtml">VivasIndustries_SmsNotification_Adminhtml</VivasIndustries_SmsNotification>
                    </modules>
                </args>
            </adminhtml>
        </routers>
    </admin>
</config>  

以下是我在/app/code/community/VivasIndustries/SmsNotification/etc/adminhtml.xml中的内容:

<?xml version="1.0"?>
<config>
    <menu>
        <vivassms translate="title" module="smsnotification">
            <title>SMS Center</title>
            <sort_order>110</sort_order>
            <children>

                <settings>
                    <title>Settings</title>
                    <action>adminhtml/system_config/edit/section/vivas/</action>
                    <sort_order>10</sort_order>
                </settings>
                <smsorderstatuses translate="title" module="smsnotification">
                    <title>SMS on Order Statuses</title>
                    <action>adminhtml/smsorderstatuses</action>
                    <sort_order>11</sort_order>
                </smsorderstatuses>
                <about translate="title" module="smsnotification">
                    <title>About</title>
                    <action>adminhtml/about</action>
                    <sort_order>12</sort_order>
                </about>
            </children>
        </vivassms>
    </menu>
    <acl>
        <resources>
            <admin>
                <children>
                    <vivassms>
                        <title>SMS</title>
                        <children>
                            <sendsms translate="title" module="smsnotification">
                                <title>Send SMS</title>
                            </sendsms>
                            <settings>
                                <title>Settings</title>
                                <children>
                                    <smsprofile translate="title" module="smsnotification">
                                        <title>Edit user account</title>
                                    </smsprofile>
                                </children>
                            </settings>
                            <smsorderstatuses translate="title" module="smsnotification">
                                <title>SMS on Order Statuses</title>
                            </smsorderstatuses>
                            <about translate="title" module="smsnotification">
                                <title>About</title>
                            </about>
                        </children>
                    </vivassms>
                    <system>
                        <children>
                            <config>
                                <children>
                                    <vivassms translate="title" module="smsnotification">
                                        <title>Vivas SMS</title>
                                    </vivassms>
                                </children>
                            </config>
                        </children>
                    </system>
                </children>
            </admin>
        </resources>
    </acl>
</config>

以下是我所拥有的:/app/code/community/VivasIndustries/SmsNotification/Block/Adminhtml/Sales/Grid.php:

<?php

class VivasIndustries_SmsNotification_Block_Adminhtml_Sales_Order_Grid extends Mage_Adminhtml_Block_Widget_Grid
{
    public function __construct()
    {
        parent::__construct();
        $this->setId('smsnotification_grid');
        $this->setDefaultSort('increment_id');
        $this->setDefaultDir('DESC');
        $this->setSaveParametersInSession(true);
        $this->setUseAjax(true);
    }

    protected function _prepareCollection()
    {
        $collection = Mage::getResourceModel('sales/order_collection')
            ->join(array('a' => 'sales/order_address'), 'main_table.entity_id = a.parent_id AND a.address_type != \'billing\'', array(
                'city'       => 'city',
                'country_id' => 'country_id'
            ))
            ->join(array('c' => 'customer/customer_group'), 'main_table.customer_group_id = c.customer_group_id', array(
                'customer_group_code' => 'customer_group_code'
            ))
            ->addExpressionFieldToSelect(
                'fullname',
                'CONCAT({{customer_firstname}}, \' \', {{customer_lastname}})',
                array('customer_firstname' => 'main_table.customer_firstname', 'customer_lastname' => 'main_table.customer_lastname'))
            ->addExpressionFieldToSelect(
                'products',
                '(SELECT GROUP_CONCAT(\' \', x.name)
                    FROM sales_flat_order_item x
                    WHERE {{entity_id}} = x.order_id
                        AND x.product_type != \'configurable\')',
                array('entity_id' => 'main_table.entity_id')
            )
        ;

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

    protected function _prepareColumns()
    {
        $helper = Mage::helper('smsnotification');
        $currency = (string) Mage::getStoreConfig(Mage_Directory_Model_Currency::XML_PATH_CURRENCY_BASE);

        $this->addColumn('increment_id', array(
            'header' => $helper->__('Order #'),
            'index'  => 'increment_id'
        ));

        $this->addColumn('purchased_on', array(
            'header' => $helper->__('Purchased On'),
            'type'   => 'datetime',
            'index'  => 'created_at'
        ));

        $this->addColumn('products', array(
            'header'       => $helper->__('Products Purchased'),
            'index'        => 'products',
            'filter_index' => '(SELECT GROUP_CONCAT(\' \', x.name) FROM sales_flat_order_item x WHERE main_table.entity_id = x.order_id AND x.product_type != \'configurable\')'
        ));

        $this->addColumn('fullname', array(
            'header'       => $helper->__('Name'),
            'index'        => 'fullname',
            'filter_index' => 'CONCAT(customer_firstname, \' \', customer_lastname)'
        ));

        $this->addColumn('city', array(
            'header' => $helper->__('City'),
            'index'  => 'city'
        ));

        $this->addColumn('country', array(
            'header'   => $helper->__('Country'),
            'index'    => 'country_id',
            'renderer' => 'adminhtml/widget_grid_column_renderer_country'
        ));

        $this->addColumn('customer_group', array(
            'header' => $helper->__('Customer Group'),
            'index'  => 'customer_group_code'
        ));

        $this->addColumn('grand_total', array(
            'header'        => $helper->__('Grand Total'),
            'index'         => 'grand_total',
            'type'          => 'currency',
            'currency_code' => $currency
        ));

        $this->addColumn('shipping_method', array(
            'header' => $helper->__('Shipping Method'),
            'index'  => 'shipping_description'
        ));

        $this->addColumn('order_status', array(
            'header'  => $helper->__('Status'),
            'index'   => 'status',
            'type'    => 'options',
            'options' => Mage::getSingleton('sales/order_config')->getStatuses(),
        ));

        $this->addExportType('*/*/exportInchooCsv', $helper->__('CSV'));
        $this->addExportType('*/*/exportInchooExcel', $helper->__('Excel XML'));

        return parent::_prepareColumns();
    }

    public function getGridUrl()
    {
        return $this->getUrl('*/*/grid', array('_current'=>true));
    }
}

以下是我所拥有的:/public_html/store/app/code/community/VivasIndustries/SmsNotification/Block/Adminhtml/Sales/Order.php:

<?php

class VivasIndustries_SmsNotification_Block_Adminhtml_Sales_Order extends Mage_Adminhtml_Block_Widget_Grid_Container
{
    public function __construct()
    {
        $this->_blockGroup = 'smsnotification';
        $this->_controller = 'adminhtml_sales_order';
        $this->_headerText = Mage::helper('smsnotification')->__('Orders - Inchoo');

        parent::__construct();
        $this->_removeButton('add');
    }
}

当我进入管理面板并点击SMS on Order Statuses时,我收到以下错误报告:

a:5:{i:0;s:51:"Controller file was loaded but class does not exist";i:1;s:1078:"#0 /home/superweb/public_html/store/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(327): Mage::exception('Mage_Core', 'Controller file...')
#1 /home/superweb/public_html/store/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(294): Mage_Core_Controller_Varien_Router_Standard->_includeControllerClass('/home/superweb/...', 'VivasIndustries...')
#2 /home/superweb/public_html/store/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(196): Mage_Core_Controller_Varien_Router_Standard->_validateControllerClassName('VivasIndustries...', 'smsorderstatuse...')
#3 /home/superweb/public_html/store/app/code/core/Mage/Core/Controller/Varien/Front.php(172): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http))
#4 /home/superweb/public_html/store/app/code/core/Mage/Core/Model/App.php(354): Mage_Core_Controller_Varien_Front->dispatch()
#5 /home/superweb/public_html/store/app/Mage.php(684): Mage_Core_Model_App->run(Array)
#6 /home/superweb/public_html/store/index.php(87): Mage::run('', 'store')
#7 {main}";s:3:"url";s:77:"/index.php/admin/smsorderstatuses/index/key/1eb60b827b45e2c2a28bc73d31b1ba27/";s:11:"script_name";s:10:"/index.php";s:4:"skin";s:7:"default";}

我完成了本指南的所有内容:http://inchoo.net/magento/how-to-create-a-custom-grid-from-scratch/

你能帮我解决这个问题并帮助我理解我的错误吗?

我正在发布我尝试打开此页面时出现的错误图片:

enter image description here

1 个答案:

答案 0 :(得分:0)

根据您粘贴的错误:

a:5:{i:0;s:51:"Controller file was loaded but class does not exist";i:1;s:1078:"#0 /home/superweb/public_html/store/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(327): Mage::exception('Mage_Core', 'Controller file...')
#1 /home/superweb/public_html/store/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(294): Mage_Core_Controller_Varien_Router_Standard->_includeControllerClass('/home/superweb/...', 'VivasIndustries...')
#2 /home/superweb/public_html/store/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(196): Mage_Core_Controller_Varien_Router_Standard->_validateControllerClassName('VivasIndustries...', 'smsorderstatuse...')
#3 /home/superweb/public_html/store/app/code/core/Mage/Core/Controller/Varien/Front.php(172): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http))
#4 /home/superweb/public_html/store/app/code/core/Mage/Core/Model/App.php(354): Mage_Core_Controller_Varien_Front->dispatch()
#5 /home/superweb/public_html/store/app/Mage.php(684): Mage_Core_Model_App->run(Array)
#6 /home/superweb/public_html/store/index.php(87): Mage::run('', 'store')
#7 {main}";s:3:"url";s:77:"/index.php/admin/smsorderstatuses/index/key/1eb60b827b45e2c2a28bc73d31b1ba27/";s:11:"script_name";s:10:"/index.php";s:4:"skin";s:7:"default";}

它清楚地说出“控制器文件已加载但类不存在”

这意味着基于URL:/ admin / smsorderstatuses / index

您需要创建一个文件: /app/code/community/VivasIndustries/SmsNotification/controllers/Adminhtml/SmsorderstatusesController.php

在这里编写以下函数进行测试:

public function indexAction()
{
  $this->loadLayout()->renderLayout();
}

完成上述操作后,请确保此文件: /app/code/community/VivasIndustries/SmsNotification/etc/config.xml 包含<frontend><routers></routers></frontend>,如下所示:

<frontend>
<!-- ... -->

<routers>
    <smsnotification>
        <use>standard</use>
        <args>
            <module>VivasIndustries_SmsNotification</module>
            <frontName>smsorderstatuses</frontName>
        </args>
    </smsnotification>
</routers>

<!-- ... -->
</frontend>

希望这会有所帮助。如果这对您有用,请告诉我。

快乐编码......