Sales_flat_order_grid में नया कॉलम जोड़ें


14

मैं sales_flat_order_gridतालिका में एक नया कॉलम कैसे जोड़ सकता हूं और यह सुनिश्चित कर सकता हूं कि मूल्य वहां ठीक से डाले गए हैं?

नए कॉलम के लिए "स्रोत" एक कस्टम कॉलम है जिसे हमने जोड़ा है sales_flat_order, इसे कहते हैं foo। AFAICT, fooमुख्य आदेश ग्रिड में प्रदर्शित होने के तीन तरीके हैं :

  1. JOINपर sales_flat_order_gridसंग्रह sales_flat_order
    • समस्या: अस्पष्ट कॉलम के कारण फ़िल्टर काम नहीं करते हैं (क्योंकि दोनों तालिकाओं में समान स्तंभ नाम हैं)
  2. sales_flat_orderइसके बजाय डेटा के लिए ग्रिड का उपयोग करें sales_flat_order_grid
    • समस्या: स्तंभों को अनुक्रमित नहीं किया जाता है, इसलिए फ़िल्टरिंग बहुत धीमी गति से होती है। यह अप्रयुक्त sales_flat_order_gridतालिका में अनुक्रमित समान डेटा सूचकांक को जोड़ने के लिए मूर्खतापूर्ण लगता है ।
  3. इसमें एक नया कॉलम जोड़ें sales_flat_order_grid और वहां वैल्यू अपडेट सुनिश्चित करें

मैं यह पता नहीं लगा सकता कि sales_flat_order_gridअपडेट कैसे किया जा रहा है, इसलिए मुझे नहीं पता कि इस नए कॉलम को कैसे जोड़ा जाए। कोई विचार?

जवाबों:


18

sales_flat_order_gridतालिका कार्रवाई को बचाने के हर आदेश पर अद्यतन किया जाता है। आप अपने स्वयं के एक्सटेंशन में टेबल पर कस्टम कॉलम जोड़ सकते हैं, यदि आप एक स्तंभ नाम जोड़ते हैं जो पहले से ही बिक्री_फ्लैट_ऑर्डर टेबल में उपयोग किया जाता है तो आपको हर ऑर्डर-एक्शन पर कुछ अतिरिक्त जोड़ने की आवश्यकता नहीं है, कॉलम अपडेट किए गए हैं (यदि आवश्यक हो) । यदि आप किसी भिन्न तालिका से डेटा सम्मिलित करना चाहते हैं, तो आपको sales_order_resource_init_virtual_grid_columnsईवेंट को इकट्ठा करने और तैयार करने के लिए एक पर्यवेक्षक बनाने की आवश्यकता होगी ।

अधिक विवरण और एक कामकाजी उदाहरण के लिए ऐड उत्तर कॉलम में एक ग्रिड (ऑब्जर्वर) - कॉलम _ store_id ’में मेरा उत्तर देखें जहां क्लॉज अस्पष्ट मुद्दा है


क्या आप निश्चित हैं कि यह अद्यतन केवल स्तंभ नाम पर आधारित है? मेरे मामले में, यह तब तक काम नहीं आया जब तक मैंने "ग्रिड" => के साथ विशेषता को हटा दिया और फिर से बनाया। बस एक समान कॉलम जोड़ने के लिए दोनों तालिकाओं को बदलना पर्याप्त नहीं था, और न ही मौजूदा विशेषता पर अद्यतन () को कॉल कर रहा था। (मुझे इस सवाल का विचार मिला: stackoverflow.com/a/11254067/884734 )
एरिक सस्टैंडैंड

ग्रिड = असली विशेषता के साथ सेटअप स्क्रिप्ट slas_flat_order और sales_flat_order_grid तालिका को इनबिल्ट बनाता है। यह एक आदेश के अपडेट को दोनों तालिकाओं में सहेज देगा।
व्लादिमीर केर्खॉफ

9

मैंने एक ही काम किया है। क्रम में 'order_type' फ़ील्ड जोड़ा गया और इसे ग्रिड में प्रदर्शित किया। यह पूरी तरह से Magento ver 1.7.0.2 में काम कर रहा है

व्यवस्थापक में विक्रय आदेश ग्रिड में ऑर्डर प्रकार फ़ील्ड कैसे जोड़ें?

1) हमें नीचे कोड के साथ एक स्थापित sql फ़ाइल बनाना होगा।

<?php 
/* @var $installer Mage_Sales_Model_Entity_Setup */
$installer = $this;
$installer->startSetup();
$installer->run(" 
ALTER TABLE `{$installer->getTable('sales/order')}` ADD `order_type` VARCHAR(255) NOT NULL;
ALTER TABLE `{$installer->getTable('sales/order_grid')}` ADD `order_type` VARCHAR(255) NOT NULL;
ALTER TABLE `{$installer->getTable('sales/quote')}` ADD `order_type` VARCHAR(255) NOT NULL; 
");
$installer->endSetup();
?>

2) Mage_Adminhtml_Block_Sales_Order_Grid फ़ाइल को ओवरराइड करें और इसमें नीचे कोड जोड़ें।

<?php

class Mycompany_Mymodule_Block_Adminhtml_Sales_Order_Grid extends Mage_Adminhtml_Block_Sales_Order_Grid
{
    protected function _prepareColumns()
    {

        $options = array(
        'ordertypeID1' => 'order type label1',
        'ordertypeID2' => 'order type label2',
        'ordertypeID3' => 'order type label3',
        ); 
        $this->addColumn('order_type', array(
            'header'    =>  Mage::helper('customer')->__('Order Type'),
            'width'     =>  '100',
            'index'     =>  'order_type',
            'type'      =>  'options',
            'options'   =>   $options
        ));
        $this->addColumnsOrder('order_type', 'grand_total');
        return parent::_prepareColumns();
    }
}
?>

3) आदेश प्रकार फ़ील्ड मान जोड़ने / अपडेट करने के लिए एक पर्यवेक्षक घटना बनाएं

अपना मॉड्यूल / etc / config.xml खोलें

<config>
    <adminhtml> 
         <events>
            <adminhtml_sales_order_create_process_data>
                <observers>
                    <modulename>
                        <class>Mycompany_Mymodule_Model_Adminhtml_Observer</class>
                        <method>adminhtml_sales_order_create_process_data</method>
                    </modulename>
                </observers>
            </adminhtml_sales_order_create_process_data>
            <sales_convert_quote_to_order>
                <observers>
                    <modulename>
                        <type>model</type>
                        <class>Mycompany_Mymodule_Model_Adminhtml_Observer</class>
                        <method>sales_convert_quote_to_order</method> 
                    </modulename>
                </observers>
            </sales_convert_quote_to_order>
        </events>  
    </adminhtml>
</config>

4) वर्ग Mycompany_Mymodule_Model_Adminhtml_Observer की एक पर्यवेक्षक फ़ाइल बनाएं

<?php
class Mycompany_Mymodule_Model_Adminhtml_Observer 
{
    public function adminhtml_sales_order_create_process_data(Varien_Event_Observer $observer)
    { 
        try {
            $requestData = $observer->getEvent()->getRequest();

            if (isset($requestData['order']['order_type'])) {
                $observer->getEvent()->getOrderCreateModel()->getQuote()
                    ->addData($requestData['order']) 
                    ->save();
            } 

        } catch (Exception $e) {
            Mage::logException($e);
        }
        return $this;
    }


    /** 
     *
     * @param Varien_Event_Observer $observer
     * @return Mycompany_Mymodule_Model_Adminhtml_Observer
     */
    public function sales_convert_quote_to_order(Varien_Event_Observer $observer)
    {
        if ($ordertype = $observer->getEvent()->getQuote()->getOrderType()) {
            try {  
                $observer->getEvent()->getOrder()
                    ->setOrderType($ordertype);

            } catch (Exception $e) {
                Mage::logException($e);
            }
        }       

        return $this;
    }
}
?>

2

मैं इसी तरह के कोड का पालन करता था। यह ठीक काम कर रहा है।

$installer = $this;
$installer->startSetup();

$installer->run("ALTER TABLE  sales_flat_order ADD COLUMN barcode  VARCHAR(255) NOT NULL;");

$installer->run("ALTER TABLE  sales_flat_order_grid ADD COLUMN barcode  VARCHAR(255) NOT NULL;");

$installer->run("ALTER TABLE  sales_flat_quote ADD COLUMN barcode  VARCHAR(255) NOT NULL;");

$installer->endSetup();
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.