2015-02-07 3 views
0

Я использую Magento 1.9.0.1!Magento - Как получить данные из пользовательской таблицы MySQL в таблице сетки Adminhtml

Сейчас я работаю над пользовательским расширением magento. Я хочу отображать данные из пользовательской таблицы MySQL на мою пользовательскую страницу в таблице таблицы HTML.

Вот все файлы, которые я создал для этого.

В моей /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> 
     <vivasindustries_smsnotification_resource> 
     <class>VivasIndustries_SmsNotification_Model_Resource</class> 
     <entities> 
      <smsnotification> 
      <table>VivasIndustries_SmsNotification</table> 
      </smsnotification> 
     </entities> 
     </vivasindustries_smsnotification_resource> 
    </models> 
    <resources> 
     <smsnotification_setup> 
      <setup> 
       <module>VivasIndustries_SmsNotification</module> 
      </setup> 
      <connection> 
       <use>core_setup</use> 
      </connection> 
     </smsnotification_setup> 
     <smsnotification_read> 
      <connection> 
       <use>core_read</use> 
      </connection> 
     </smsnotification_read> 
     <smsnotification_write> 
      <connection> 
       <use>core_write</use> 
      </connection> 
     </smsnotification_write> 
    </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>  

В моем/приложение/код/​​сообщества/VivasIndustries/SmsNotification/Block/Adminhtml/Продажи/Статус .php:

<?php 

class VivasIndustries_SmsNotification_Block_Adminhtml_Sales_Status extends Mage_Adminhtml_Block_Widget_Grid_Container 
{ 
    public function __construct() 
    { 
     $this->_blockGroup = 'smsnotification'; 
     $this->_controller = 'adminhtml_sales_status'; 
     $this->_headerText = Mage::helper('smsnotification')->__('Send SMS on Order Status Changes'); 

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

В моей /app/code/community/VivasIndustries/SmsNotification/Block/Adminhtml/Sales/Status/Grid.php:

<?php 

class VivasIndustries_SmsNotification_Block_Adminhtml_Sales_Status_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)); 
    } 
} 

Этот Grid.php файл взят из руководства здесь: http://inchoo.net/magento/how-to-create-a-custom-grid-from-scratch/ и некоторые правки из этого ответа: https://magento.stackexchange.com/questions/54897/how-to-get-data-from-custom-mysql-table-into-your-adminhtml-grid-table/54898#54898

Позвольте мне показать вам структуру и данные я хочу показать в таблице сетки:

enter image description here

следующие 3 файлы создаются, потому что мне сказали, так что в этом ответе: https://magento.stackexchange.com/questions/54897/how-to-get-data-from-custom-mysql-table-into-your-adminhtml-grid-table/54898#54898

Вот что я имею в:/приложение/код/​​сообщества/VivasIndustries/SmsNotifi Катион/Модель/SmsNotification.php:

<?php 
class VivasIndustries_SmsNotification_Model_Smsnotification extends extends Mage_Core_Model_Abstract 
{ 
    public function _construct() 
    { 
     $this->_init('smsnotification/smsnotification'); 
    } 

} 

В моей /app/code/community/VivasIndustries/SmsNotification/Model/Resource/Smsnotification.php:

<?php 
class VivasIndustries_SmsNotification_Model_Resource_Smsnotification extends Mage_Core_Model_Resource_Db_Abstract 
{ 
    /** 
    * Initialize resource model 
    * 
    * @return void 
    */ 
    public function _construct() 
    { 
     $this->_init('smsnotification/smsnotification','id'); 
    } 
} 

В моем/приложение/код/сообщество/VivasIndustries/SmsNotification/Модель/Resource/Smsnotification/Collection.php:

<?php 
class VivasIndustries_SmsNotification_Model_Resource_Smsnotification_Collection extends Mage_Core_Model_Resource_Db_Collection_Abstract{ 
    protected function _constuct(){ 
     $this->_init('smsnotification/smsnotification');  
    } 
} 

Мой вопрос: что я должен изменить в моем Grid.php файл, так эта таблица будет показывать данные п rom только VivasIndustries_SmsNotification?

Заранее благодарен!

+0

Какие данные он, показывая в настоящее время, что не в таблица 'VivasIndustries_SmsNotification'? – tsHunter

ответ

0

В вашей /app/code/community/VivasIndustries/SmsNotification/Block/Adminhtml/Sales/Status/Grid.php изменить функцию _prepareCollection:

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