আপনার আগে উল্লিখিত অন্যান্য সমাধানগুলির সাথে এটি আবার চেষ্টা করুন :-), কীভাবে গ্রিড টেবিলের সাথে ক্ষেত্রটি যুক্ত করতে হয় তা দেখানোর জন্য আমি সম্পূর্ণ এক্সটেনশন তৈরি করেছি। এর পরে আপনার গ্রিড পৃষ্ঠার ক্রমটি কলামটি যুক্ত করতে আপনার কেবল একটি লেআউট আপডেট ফাইল দরকার।
আমি এক্সটেনশনকে উদাহরণ_ সেলস গ্রিড বলেছি, তবে আপনি এটি নিজের প্রয়োজনে পরিবর্তন করতে পারেন।
আসুন /app/etc/modules/Example_SalesGrid.xml এ মডিউল 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>
এরপরে আমরা আমাদের মডিউল কনফিগার এক্সএমএল / অ্যাপ্লিকেশন / কোড / কম্যুনিটি / উদাহরণ / বিক্রয় গ্রিড / সেটসি / কনফিগ.এক্সএমএল তৈরি করি :
<?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>
এখন আমরা / অ্যাপ্লিকেশন / কোড / কম্যুনিটি / উদাহরণ / বিক্রয় গ্রিড / এসকিএল / এক্সামাল_সলেসগ্রিড_সেটআপ / ইনস্টল-0.1.1 . php এ স্কেল আপগ্রেড স্ক্রিপ্ট তৈরি করি :
<?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>
এখন আমাদের দুটি ব্লক ফাইলের প্রয়োজন, একটি ফিল্টার অপশন তৈরি করতে, / অ্যাপ্লিকেশন / কোড / কম্যুনিটি / উদাহরণস্বরূপ / সেলস গ্রিড / ব্লক / উইজেট / গ্রিড / কলাম / কাস্টমারের / গ্রুপ.এফপি:
<?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 / commune / 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;
}
}
আপনি কেবল বিক্রয় / অর্ডার (বিক্রয়_ফ্ল্যাট_অর্ডার) ব্যতীত কোনও টেবিল থেকে অতিরিক্ত কলাম তৈরি করলেই কেবলমাত্র সর্বশেষ ফাইলটি প্রয়োজন। বিক্রয় / অর্ডার থেকে কলামের নামের সাথে মেলে বিক্রয় / অর্ডার_গ্রিডে সমস্ত ক্ষেত্রগুলি বিক্রয় / অর্ডার_গ্রিড টেবিলটিতে স্বয়ংক্রিয়ভাবে আপডেট হয়। উদাহরণস্বরূপ আপনার যদি অর্থ প্রদানের বিকল্পটি যুক্ত করতে হয় তবে ক্যোয়ারিতে ক্ষেত্রটি যুক্ত করার জন্য আপনার এই পর্যবেক্ষকের প্রয়োজন হবে যাতে সঠিক টেবিলে ডেটা অনুলিপি করা যায়। এর জন্য ব্যবহৃত পর্যবেক্ষকটি / অ্যাপ্লিকেশন / কোড / কম্যুনিটি / উদাহরণ / বিক্রয় গ্রিড / মডেল / অবজারভার.এফপিতে রয়েছে :
<?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 এর উদাহরণের ভিত্তিতে তৈরি
আশা করি উপরের উদাহরণটি আপনার সমস্যার সমাধান করে।