Ich habe viel gegoogelt, probiert und geirrt, aber ich kann keine Lösung für das Problem finden.
- Die Möglichkeit, die Felder und die Reihenfolge von sales_order_grid zu ändern. und
- Die Möglichkeit, zwei benutzerdefinierte Felder in diesem Raster anzuzeigen (filterbar).
Ersteres (Punkt 1) wurde gelöst, indem das Mage_Adminhtml_Block_Widget_Grid
Modul in meinem benutzerdefinierten Modul erweitert wurde (ich weiß über Beobachter Bescheid, aber andere installierte Module haben meine Änderungen mit ihren Beobachtern überschrieben).
Unabhängig davon, letzteres ist mein aktuelles Problem, im Folgenden sind die beiden Methoden aufgeführt, die mich bisher gescheitert sind.
Methode 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();
Methode 2
Zu diesem Zeitpunkt hatte ich es satt, die gleichen 7 Artikel zu lesen, die mir nicht weitergeholfen haben, und versuchte, EIN Feld zum Laufen zu bringen. Ich habe auch die Fehlerprotokolle in Magento überprüft und festgestellt, dass "$ this-> getTable ()" fehlerhaft war. Daher habe ich es entfernt.
<?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();
Was wirft die Frage auf, was ist der Unterschied zwischen einer Spalte und einem Attribut? Meine ursprüngliche Annahme war, dass eine Spalte zu einer vorhandenen Kerntabelle hinzugefügt wird, während ein Attribut zu den EAV_ * -Tabellen hinzugefügt und entsprechend verknüpft wird.
quelle
Antworten:
Ihre Vermutung ist richtig.
Aber für den
sales_
Tisch sind sie ein und dasselbe.Ursprünglich waren die Vertriebsgesellschaften EAV. Sie haben sich ab Version 1.4.0.1 in flache Tabellen verwandelt (glaube ich). Aus Gründen der Abwärtskompatibilität wurden beide Methoden beibehalten.
Für alle anderen Objekte mit flachen Tabellen (CMS-Seiten, Blöcke, Abstimmungen) können Sie nicht
addAttribute
nur verwendenaddColumn
, sondern für Verkäufe funktioniert es in beide Richtungen.Wenn Sie vorhaben, eine Erweiterung zu erstellen, die mit Versionen vor 1.4 kompatibel sein muss, dann verwenden Sie
addAttribute
, sonst sehe ich keinen Sinn darin.quelle
addColumn
Methode anzuwenden ? Auch wenn 'getTable' nicht als sales_flat_order verwendet wird, ist dies genau das. Ich werde das gleich ausprobieren und mit einem Verrückten zurückkehren :)$this->getTable('sales/flat_order')
genauso gut eingestellt werdensales_flat_order
; der zweite war$connection->addKey($this->getTable('sales/order_grid'), 'x_payment_type', 'x_payment_type');
;x_payment_type
hätte sein sollenx_payment_method
.