Я использую 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/
Можете ли вы помочь мне решить эту проблему и помочь понять, где моя ошибка?
Я публикую изображение ошибки, полученной при попытке открыть эту страницу:
Из ошибки, которую вы вставили:
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>
Надеюсь это поможет. Дайте мне знать, если это работает для вас.
Удачного кодирования …
Других решений пока нет …