Hallo liebes Forum, kann mir einer von euch verraten, wie ich in der Bestellübersicht im Backend eine zusätzliche Spalte in die Tabelle bekomme? Ich würde gerne die Kundennummer hinzufügen. Welche Datei müsste ich dafür anpassen? Vielen Dank und Grüße Cedric
Schau mal hier rein: https://developers.gambio.de/tutorials.html?v=3.7.1.0&p=erweitern-der-bestellübersicht-(tabelle)
Hallo Kai, ich habe mir das Tutorial einmal zu Gemüte geführt und umgesetzt. Leider bekomme ich noch nicht die Kundennummer angezeigt. Mal schauen wo mein Fehler liegt Meine Dateien sehen folgendermaßen aus: GXUserComponents/overloads/OrdersOverviewController/CustomColumnOrdersOverviewController.inc.php PHP: <?phpclass CustomColumnOrdersOverviewController extends CustomColumnOrdersOverviewController_parent{ protected function _getAssetsArray() { $assetsArray = parent::_getAssetsArray(); $assetsArray[] = MainFactory::create('Asset', DIR_WS_CATALOG.'GXUserComponents/modules/add_custom_column.js'); return $assetsArray; }} GXUserComponents/overloads/OrdersOverviewColumns/CustomColumnOrdersOverviewColumns.inc.php PHP: <?phpclass CustomColumnOrdersOverviewColumns extends CustomColumnOrdersOverviewColumns_parent{ public function __construct() { parent::__construct(); // Custom $this->columns[] = MainFactory::create('DataTableColumn') ->setTitle(new StringType('KdNr')) ->setName(new StringType('KdNr')) ->setType(new DataTableColumnType(DataTableColumnType::NUMBER)); }} GXUserComponents/overloads/OrdersOverviewAjaxController/CustomColumnOrdersOverviewAjaxController.inc.php PHP: <?phpclass CustomColumnOrdersOverviewAjaxController extends CustomColumnOrdersOverviewAjaxController_parent{ protected function _getTableData() { $tableData = parent::_getTableData(); foreach($tableData as &$row) { $row['KdNr'] = $row->getCustomerId(); } return $tableData; }} GXUserComponents/modules/add_custom_column.js Code: $(function() { 'use strict'; // Be careful to not overwrite existing object definitions. jse.libs.orders_overview_columns = jse.libs.orders_overview_columns || {}; // Custom column definition. jse.libs.orders_overview_columns.KdNr = { data: 'KdNr', minWidth: '75px', widthFactor: 0.9 }; }); Viele Grüße Cedric
Hallo zusammen, leider bekomme ich noch nicht die Kundennummer angezeigt. Kann mir jemand sagen, wo mein Fehler liegt? GXUserComponents/overloads/OrdersOverviewAjaxController/CustomColumnOrdersOverviewAjaxController.inc.php PHP: <?phpclass CustomColumnOrdersOverviewAjaxController extends CustomColumnOrdersOverviewAjaxController_parent{ protected function _getTableData() { $tableData = parent::_getTableData(); foreach($tableData as &$row) { $row['KdNr'] = $row->getCustomerId(); } return $tableData; }} Viele Grüße Cedric
Hi, bitte probiere mal folgendes: PHP: <?phpclass CustomColumnOrdersOverviewAjaxController extends CustomColumnOrdersOverviewAjaxController_parent{ protected function _getTableData() { $tableData = parent::_getTableData(); foreach($tableData as $row=>$values) { $tableData[$row]['KdNr'] = $values['DT_RowData']['customerId']; } return $tableData; }} Ist ungetestet
Hallo Till, das hat funktioniert, vielen Dank! Also wie ich es jetzt verstanden habe, sind die Rohdaten auch in dem $tableData-Array gespeichert, Das war mir nicht so bewusst. Aber klappt ja jetzt Viele Grüße
Folgende Daten sind bereits vorhanden: PHP: 'comment' 'customerEmail' 'customerId' 'customerMemos' 'customerName' 'id' 'mailStatus' 'purchaseDate' 'statusId' 'trackingLinks' 'withdrawalIds' 'paymentMethod' 'shippingMethod' 'country' 'invoiceNumbers' 'latestInvoiceId' 'latestInvoiceNumber' Weitere Daten müssen manuell beschafft werden.
Ah wunderbar, danke für die Aufklärung. Leider funktioniert die Filterfunktion noch nicht richtig. Da es ein Integer ist, wollte ich es mit "Number" filtern. PHP: ->setType(new DataTableColumnType(DataTableColumnType::NUMBER)); Aber irgendwie klappt das nicht und er zeigt mir immer alle Datensätze an. Auch wenn ich genau eine Nummer eingebe (ohne Wildcards)... Hast du eine Idee?
Ja, sorry, hatte es nochmal angepasst und dann hier geradegezogen gehabt Das hatte noch zu dem Versuch gehört, die richtige Kundennummer auszugeben.
Es fehlt vermutlich in der Datei GXUserComponents/overloads/OrdersOverviewColumns/CustomColumnOrdersOverviewColumns.inc.php noch das Feld was mit ->setField(new StringType('orders.customers_id)) zugewiesen werden muss. PHP: <?phpclass CustomColumnOrdersOverviewColumns extends CustomColumnOrdersOverviewColumns_parent{ public function __construct() { parent::__construct(); // Custom $this->columns[] = MainFactory::create('DataTableColumn') ->setTitle(new StringType('KdNr')) ->setName(new StringType('KdNr'))->setField(new StringType('orders.customers_id')) ->setType(new DataTableColumnType(DataTableColumnType::NUMBER)); }}
Das war's leider noch nicht :-/ PHP: class CustomColumnOrdersOverviewColumns extends CustomColumnOrdersOverviewColumns_parent{ public function __construct() { parent::__construct(); // Custom $this->columns[] = MainFactory::create('DataTableColumn') ->setTitle(new StringType('KdNr')) ->setName(new StringType('KdNr')) ->setField(new StringType('orders.customers_id')) ->setType(new DataTableColumnType(DataTableColumnType::NUMBER)); }}
Das wird sicherlich das Problem sein. Von der Theorie dürfte orders.customers_id nicht funktionieren. Ohne es zu testen. Muss man da nicht mit customerId auf die ID zugreifen, weil sie ja darüber verfügbar ist!? Aus der Funktion _getRowData sehe ich ja auch, was zur Verfügung steht. Aber mit orders. dürfte es ja nicht funktionieren. Gerade auch noch eine andere Sache. Die Kundennummer ist eigentlich die customers_cid und nicht die customers_id.
@Developer Das ist schon richtig so, es muss nur noch ein Overload für GXUserComponents/overloads/OrderListGenerator/CustomersIdOrderListGenerator.inc.php erstellt werden. PHP: <?phpclass CustomersIdOrderListGenerator extends CustomersIdOrderListGenerator_parent{ protected function _setFilterArguments(array $filterParameters, IntType $startIndex = null, IntType $maxCount = null, StringType $orderBy = null) { parent::_setFilterArguments($filterParameters,$startIndex,$maxCount,$orderBy); // Filter by customer. if(!empty($filterParameters['KdNr'])) { if(strpos($filterParameters['KdNr'], '#') === 0) { $this->db->where('orders.customers_id', substr($filterParameters['KdNr'], 1)); } else { $this->db->where('orders.customers_id', $filterParameters['KdNr']); } } return $this; }}
Also jetzt funktioniert das Filtern schon mal direkt auf einen Wert Mit Wildcards zu filtern funktioniert leider noch nicht hmmmm.... Die beiden IDs sind bei den Datensätzen bei mir immer dieselben. Von daher macht das denke ich keinen Unterschied.
Nur eine kleine Anpassung an der GXUserComponents/overloads/OrderListGenerator/CustomersIdOrderListGenerator.inc.php und das Filtern mit Wildcards klappt dann auch: PHP: <?phpclass CustomersIdOrderListGenerator extends CustomersIdOrderListGenerator_parent{ protected function _setFilterArguments(array $filterParameters, IntType $startIndex = null, IntType $maxCount = null, StringType $orderBy = null) { parent::_setFilterArguments($filterParameters,$startIndex,$maxCount,$orderBy); // Filter by customer. if(!empty($filterParameters['KdNr'])) { $this->db->group_start(); if(strpos($filterParameters['KdNr'], '#') === 0) { $this->db->where('orders.customers_id', substr($filterParameters['KdNr'], 1)) ->or_where('orders.customers_cid', substr($filterParameters['KdNr'], 1)); } else { $this->db->where('orders.customers_id', $filterParameters['KdNr']) ->or_like('orders.customers_cid', $filterParameters['KdNr']) ->or_like('orders.customers_id', $filterParameters['KdNr']); } $this->db->group_end(); } return $this; }} Bei dieser Änderung muss man keine Wildcards eingeben. Es findet immer eine Wildcard-Suche statt. Wenn man eine ganz genaue Kundennummer suchen möchten, muss man jetzt #1 eingeben um eine exakte Übereinstimmung zu suchen.
Also, ich habe das mal überflogen und wenn ich das jetzt bei mir auch implementieren wollen würde, hätte ich keinen blassen Schimmer, was alles wohin kopiert werden müsste.