आइए फिर से कोशिश करें कि मैंने आपके लिए पहले दिए गए अन्य समाधान पर :-), मैंने आपको ग्रिड टेबल में फ़ील्ड को जोड़ने का तरीका दिखाने के लिए पूर्ण एक्सटेंशन का निर्माण किया है। उसके बाद आपको केवल ग्रिड पेज को ऑर्डर करने के लिए कॉलम को जोड़ने के लिए एक लेआउट अपडेट फ़ाइल की आवश्यकता होती है।
मैंने विस्तारा example_SalesGrid को कॉल किया, लेकिन आप इसे अपनी आवश्यकताओं में बदल सकते हैं।
आइए / in/ etc / modules / Example_SalesGrid.x/ : में मॉड्यूल init xml बनाकर शुरू करें
<?xml version="1.0" encoding="UTF-8"?>
<!--
Module bootstrap file
-->
<config>
<modules>
<Example_SalesGrid>
<active>true</active>
<codePool>community</codePool>
<depends>
<Mage_Sales />
</depends>
</Example_SalesGrid>
</modules>
</config>
इसके बाद हम अपना मॉड्यूल config xml /app/code/community/Example/SalesGrid/etc/config.xml में बनाते हैं :
<?xml version="1.0" encoding="UTF-8"?>
<config>
<modules>
<Example_SalesGrid>
<version>0.1.0</version> <!-- define version for sql upgrade -->
</Example_SalesGrid>
</modules>
<global>
<models>
<example_salesgrid>
<class>Example_SalesGrid_Model</class>
</example_salesgrid>
</models>
<blocks>
<example_salesgrid>
<class>Example_SalesGrid_Block</class>
</example_salesgrid>
</blocks>
<events>
<!-- Add observer configuration -->
<sales_order_resource_init_virtual_grid_columns>
<observers>
<example_salesgrid>
<model>example_salesgrid/observer</model>
<method>addColumnToResource</method>
</example_salesgrid>
</observers>
</sales_order_resource_init_virtual_grid_columns>
</events>
<resources>
<!-- initialize sql upgrade setup -->
<example_salesgrid_setup>
<setup>
<module>Example_SalesGrid</module>
<class>Mage_Sales_Model_Mysql4_Setup</class>
</setup>
</example_salesgrid_setup>
</resources>
</global>
<adminhtml>
<layout>
<!-- layout upgrade configuration -->
<updates>
<example_salesgrid>
<file>example/salesgrid.xml</file>
</example_salesgrid>
</updates>
</layout>
</adminhtml>
</config>
अब हम /app/code/community/Example/SalesGrid/sql/example_salesgrid_setup/install-0.1.0.php में sql नवीनीकरण स्क्रिप्ट बनाते हैं :
<?php
/**
* Setup scripts, add new column and fulfills
* its values to existing rows
*
*/
$this->startSetup();
// Add column to grid table
$this->getConnection()->addColumn(
$this->getTable('sales/order_grid'),
'customer_group_id',
'smallint(6) DEFAULT NULL'
);
// Add key to table for this field,
// it will improve the speed of searching & sorting by the field
$this->getConnection()->addKey(
$this->getTable('sales/order_grid'),
'customer_group_id',
'customer_group_id'
);
// Now you need to fullfill existing rows with data from address table
$select = $this->getConnection()->select();
$select->join(
array('order'=>$this->getTable('sales/order')),
$this->getConnection()->quoteInto(
'order.entity_id = order_grid.entity_id'
),
array('customer_group_id' => 'customer_group_id')
);
$this->getConnection()->query(
$select->crossUpdateFromSelect(
array('order_grid' => $this->getTable('sales/order_grid'))
)
);
$this->endSetup();
अगले हम /app/design/adminhtml/default/default/layout/example/salesgrid.xml में लेआउट अपडेट फ़ाइल बनाते हैं:
<?xml version="1.0"?>
<layout>
<!-- main layout definition that adds the column -->
<add_order_grid_column_handle>
<reference name="sales_order.grid">
<action method="addColumnAfter">
<columnId>customer_group_id</columnId>
<arguments module="sales" translate="header">
<header>Customer Group</header>
<index>customer_group_id</index>
<type>options</type>
<filter>Example_SalesGrid_Block_Widget_Grid_Column_Customer_Group</filter>
<renderer>Example_SalesGrid_Block_Widget_Grid_Column_Renderer_Customer_Group</renderer>
<width>200</width>
</arguments>
<after>grand_total</after>
</action>
</reference>
</add_order_grid_column_handle>
<!-- order grid action -->
<adminhtml_sales_order_grid>
<!-- apply the layout handle defined above -->
<update handle="add_order_grid_column_handle" />
</adminhtml_sales_order_grid>
<!-- order grid view action -->
<adminhtml_sales_order_index>
<!-- apply the layout handle defined above -->
<update handle="add_order_grid_column_handle" />
</adminhtml_sales_order_index>
</layout>
अब हमें दो ब्लॉक फाइल चाहिए, एक फ़िल्टर विकल्प बनाने के लिए, /app/code/community/Example/SalesGrid/Block/Widget/Grid/Column/Customer/Group.php:
<?php
class Example_SalesGrid_Block_Widget_Grid_Column_Customer_Group extends Mage_Adminhtml_Block_Widget_Grid_Column_Filter_Select {
protected $_options = false;
protected function _getOptions(){
if(!$this->_options) {
$methods = array();
$methods[] = array(
'value' => '',
'label' => ''
);
$methods[] = array(
'value' => '0',
'label' => 'Guest'
);
$groups = Mage::getResourceModel('customer/group_collection')
->addFieldToFilter('customer_group_id', array('gt' => 0))
->load()
->toOptionArray();
$this->_options = array_merge($methods,$groups);
}
return $this->_options;
}
}
और दूसरा पंक्ति मानों को सही पाठ में अनुवाद करने के लिए जो प्रदर्शित किया जाएगा , /app/code/community/Example/SalesGrid/Block/Widget/Grid/Column/Renderer/Customer/Group.php :
<?php
class Example_SalesGrid_Block_Widget_Grid_Column_Renderer_Customer_Group extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract {
protected $_options = false;
protected function _getOptions(){
if(!$this->_options) {
$methods = array();
$methods[0] = 'Guest';
$groups = Mage::getResourceModel('customer/group_collection')
->addFieldToFilter('customer_group_id', array('gt' => 0))
->load()
->toOptionHash();
$this->_options = array_merge($methods,$groups);
}
return $this->_options;
}
public function render(Varien_Object $row){
$value = $this->_getValue($row);
$options = $this->_getOptions();
return isset($options[$value]) ? $options[$value] : $value;
}
}
अंतिम फ़ाइल की जरूरत केवल तभी होती है जब आप बिक्री / ऑर्डर (sales_flat_order) के अलावा किसी अन्य तालिका से एक अतिरिक्त कॉलम बनाते हैं। विक्रय / ऑर्डर_ग्रिड में बिक्री / ऑर्डर से कॉलम नाम से मेल खाने वाले सभी फ़ील्ड स्वचालित रूप से बिक्री / ऑर्डर_ग्रिड तालिका में अपडेट किए जाते हैं। यदि आपको उदाहरण के लिए भुगतान विकल्प जोड़ने की आवश्यकता है, तो आपको इस पर्यवेक्षक को क्वेरी में फ़ील्ड जोड़ने की आवश्यकता होगी ताकि डेटा को सही तालिका में कॉपी किया जा सके। इसके लिए इस्तेमाल किया गया पर्यवेक्षक /app/code/community/Example/SalesGrid/Model/Observer.php में है :
<?php
/**
* Event observer model
*
*
*/
class Example_SalesGrid_Model_Observer {
public function addColumnToResource(Varien_Event_Observer $observer) {
// Only needed if you use a table other than sales/order (sales_flat_order)
//$resource = $observer->getEvent()->getResource();
//$resource->addVirtualGridColumn(
// 'payment_method',
// 'sales/order_payment',
// array('entity_id' => 'parent_id'),
// 'method'
//);
}
}
यह कोड http://www.ecomdev.org/2010/07/27/adding-order-attribute-to-orders-grid-in-magento-1-4-1.html से उदाहरण पर आधारित है
आशा है कि ऊपर दिए गए उदाहरण से आपकी समस्या हल हो जाएगी।