我正在使用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/
你能帮我解决这个问题并帮助我理解我的错误吗?
我正在发布我尝试打开此页面时出现的错误图片:
答案 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>
希望这会有所帮助。如果这对您有用,请告诉我。
快乐编码......