Sales_flat_order_grid'e yeni sütun ekle


14

Tabloya nasıl yeni bir sütun ekleyebilir sales_flat_order_gridve değerlerin buraya düzgün bir şekilde eklenmesini nasıl sağlayabilirim ?

Yeni sütun için "kaynak", eklediğimiz özel bir sütundur sales_flat_order, diyelim foo. AFAICT, fooana sipariş tablosunda görünmenin üç yolu vardır :

  1. JOINsales_flat_order_gridüzerine toplanması sales_flat_order.
    • Sorun: Filtreler artık belirsiz sütunlar nedeniyle çalışmıyor (çünkü her iki tabloda da benzer sütun adları var)
  2. Kılavuzun sales_flat_orderveri yerine kullanmasını sağlayın sales_flat_order_grid.
    • Sorun: Sütunlar dizine eklenmediğinden, filtreleme son derece yavaştır. Kullanılmayan sales_flat_order_gridtabloda dizinlenmiş aynı verilerin dizinini eklemek aptalca görünüyor .
  3. Yeni bir sütun ekleyin sales_flat_order_grid ve orada değer güncellemelerini sağlayın

Nasıl sales_flat_order_gridgüncellenmekte olduğunu anlayamıyorum, bu nedenle bu yeni sütunu nasıl ekleyeceğimi bilmiyorum. Düşüncesi olan var mı?

Yanıtlar:


18

sales_flat_order_gridTablo eylem tasarrufu her sipariş güncellenir. Kendi uzantınızdaki tabloya özel sütunlar ekleyebilirsiniz, zaten sales_flat_order tablosunda kullanılan bir sütun adı eklerseniz fazladan bir şey eklemenize gerek yoktur, her sipariş kaydetme eyleminde sütunlar güncellenir (gerekirse) . Farklı bir tablodan veri eklemek istiyorsanız, sales_order_resource_init_virtual_grid_columnsetkinliğin birleştirmeyi toplaması ve hazırlaması için bir gözlemci oluşturmanız gerekir .

Daha fazla ayrıntı ve çalışan bir örnek için bir ızgaraya Sütun Ekleme (gözlemci) - yan tümcesinin belirsiz bir konu olduğu 'store_id' sütunu kısmına bakın.


Bu güncelleştirmenin yalnızca sütun adını temel aldığından emin misiniz? Benim durumumda, "grid" => true ile özniteliği silip yeniden oluşturana kadar çalışmadı. Her iki tabloyu da aynı sütun eklemek için ALTERing yapmak yeterli değildi ve varolan öznitelikte updateAttribute () öğesini çağırıyordu. (Bu sorudan bir fikrim var: stackoverflow.com/a/11254067/884734 )
Eric Seastrand

Grid = true özniteliği ile kurulum komut dosyası, özniteliği slas_flat_order ve sales_flat_order_grid tablosundan oluşturur. Bu, bir siparişin güncellenmesini her iki tabloya da kaydedecektir.
Vladimir Kerkhoff

9

Ben de aynı şeyi yaptım. 'Order_type' alanı sırayla eklendi ve ızgarada görüntülendi. Magento ver 1.7.0.2'de mükemmel çalışıyor

Yönetici'de müşteri siparişi ızgarasına Sipariş Türü alanı nasıl eklenir?

1) Aşağıdaki kod ile bir yükleme sql dosyası oluşturmak zorundayız.

<?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 dosyasını geçersiz kılın ve içine aşağıdaki kodu ekleyin.

<?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) Sipariş türü alan değeri eklemek / güncellemek için bir gözlemci olayı oluşturun

/ Etc / config.xml modülünüzü açın

<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 sınıfından bir gözlemci dosyası oluşturun

<?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

Benzer kodu takip ettim. İyi çalışıyor.

$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();
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.