Sales_flat_order öğesine özel alanlar ekleme


14

Oldukça fazla googling, deneme yanılma yapıyorum ama soruna bir çözüm bulamıyorum.

  1. Sales_order_grid alanlarını ve sırasını değiştirme yeteneği; ve
  2. Bu ızgarada iki özel alan görüntüleme (filtrelenebilir).

İlk (nokta 1), Mage_Adminhtml_Block_Widget_Gridözel modülümde genişletilerek çözüldü (gözlemcileri biliyorum, ancak diğer kurulu modüller gözlemcilerimle yaptığım değişiklikleri geçersiz kılıyorlardı).

Ne olursa olsun, ikincisi şu anki sorunum, aşağıda beni başarısızlığa uğratan iki yöntem var.

Yöntem 1

<?php
/*  @var $this Mage_Sales_Model_Mysql4_Setup  */
$this->startSetup();
$connection = $this->getConnection();

/**
 * Create the payment method dropdown field, because this field _may_ be
 * used for searching we will create an index for it.
 */
$connection->addColumn(
    $this->getTable('sales/order_grid'),
    'x_payment_method',
    "ENUM('PayPal', 'SagePay') DEFAULT NULL"
);
$connection->addKey($this->getTable('sales/order_grid'), 'x_payment_type', 'x_payment_type');

/**
 * Create the order channel field to identify where the order was originally
 * generated from. Also add an index for this field for additional filtering.
 */
$connection->addColumn(
    $this->getTable('sales/order_grid'),
    'x_sale_channel',
    "ENUM('Amazon', 'Play', 'eBay', 'Website') NOT NULL DEFAULT 'Website'"
);
$connection->addKey($this->getTable('sales/order_grid'), 'x_sale_channel','x_sale_channel');

$this->endSetup();

Yöntem 2

Bu noktada yardım etmeyen aynı 7 makaleyi okumaktan bıktım, bu yüzden BİR alanın çalışmasını sağlamaya çalıştım; Ben de Magento hata günlükleri kontrol ve "$ this-> getTable ()" errornous bulundu, bu yüzden kaldırdım.

<?php
/*  @var $this Mage_Sales_Model_Mysql4_Setup  */
$this->startSetup();
$connection = $this->getConnection();

/**
 * Create the payment method dropdown field, because this field _may_ be
 * used for searching we will create an index for it.
 */
$this->addAttribute('sales_flat_order', 'x_test_option', array(
    'label' => 'X Test Option',
    'type' => 'varchar',
    'input' => 'select',
    'visible' => true,
    'required' => false,
    'position' => 1,
    'visible_on_front'  => false,
    'option' => array('value' => array('web', 'test 1', 'test 2')),
    'default' => array('web'),
));

$this->endSetup();

Hangisi soruyu yalvarır, bir sütun ve bir özellik arasındaki fark nedir? İlk varsayım, EAV_ * tablolarına bir öznitelik eklenirken ve uygun şekilde ilişkilendirilirken mevcut bir çekirdek tabloya bir sütun eklendiğiydi.


Bu tablo düz olsa da, bunun için kaynak modeli EAV'dir, bu nedenle niteliğin yazılacak EAV yapılandırmasına kaydedilmesi gerekir. Çeşitli satış kişiler için kullanılan EAV olabilir ama performans nedenleriyle dümdüz edildi.
benmarks

Yanıtlar:


11

Varsayımınız doğru.
Ancak sales_tablo için bir ve aynılar.
Başlangıçta satış varlıkları EAV idi. 1.4.0.1 sürümünden başlayarak düz tablolara dönüştüler (sanırım). Geriye dönük uyumluluk için her iki yöntem de korunmuştur.
Diğer düz tablo varlıkları (cms sayfaları, bloklar, anketler) için addAttributeyalnızca kullanamazsınız addColumn, ancak satış için her iki şekilde de çalışır.
1.4'ten önceki sürümlerle uyumlu olması gereken bir uzantı yapmayı planlıyorsanız, kullanın addAttribute, aksi takdirde bunun hiçbir anlamı yoktur.


Bilgi için teşekkürler, bu gerçekten yararlı buluyorum. Aslında, şimdi düşünüyorum, doğru yolu addColumnyöntemi kullanmak olduğunu varsayalım ? Aynı zamanda sales_flat_order olarak 'getTable'ı kullanmamak da budur. Kısa bir süre sonra deneyeceğim ve bir virdict ile döneceğim :)
kül

2
Görünüşe göre iki problemim vardı (biri gözden kaçırdım); Bunlardan biri $this->getTable('sales/flat_order')de şu şekilde ayarlanabilir sales_flat_order; ikincisi $connection->addKey($this->getTable('sales/order_grid'), 'x_payment_type', 'x_payment_type');; x_payment_typeolması gerekirdi x_payment_method.
ash
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.