Knowband Blog | Ecommerce Modules

Erhalten Sie die neuesten Produkte ohne Sonderpreise (Opencart 2.3)

Ziele des Blogs

Nach dem Lesen dieses Blogs können Sie Produkte aus der Opencart-Datenbank auf der Grundlage von Parametern abrufen, die von der URL übergeben werden.

Anforderung

Die neuesten Produkte müssen auf der Grundlage der übergebenen Parameter in der URL angezeigt werden. Mit diesem Parameter müssen wir entscheiden, ob wir spezielle Produkte anzeigen müssen oder nicht.

Code-Implementierung

Um dies umzusetzen, müssen wir Änderungen an Controller und Modell vornehmen. Im Controller haben wir die Bedingung zum Übergeben von Parametern hinzugefügt, und im Modell nehmen wir entsprechend dem übergebenen Parameter Änderungen in der Abfrage vor. Um den Zustand zu behandeln, den wir verwenden show_special Parameter im Code. Unten ist der Code, den wir im Controller hinzufügen müssen (Katalog / Controller / Erweiterung / Modul / latest.php):

/ * Überprüfung des show_special-Schlüssels im get-Parameter * Dieser Schlüssel ($ show_special) wird zum bedingten Abrufen von Daten aus der Datenbank verwendet. * dh wenn $ show_special = 1 dann Produkte anzeigt, die speziell sind * $ show_special = 0, dann Produkte anzeigen, die nicht speziell sind * else * Alle Produkte anzeigen, unabhängig von speziellen * / if (isset ($ this-> request-> get [' show_special '])) {// Übergabe des Werts in Variable, wenn in der URL $ show_special = $ this-> request-> get [' show_special '] angegeben; } else {// Andernfalls wird ein leerer String übergeben. $ show_special = ''; } // Erstellen einer Variablen, die an das Modell übergeben werden soll $ filter_data = array ('start' => ($ page - 1) * $ limit, 'limit' => $ limit, 'show_special' => $ show_special); // Aufruf einer Modellfunktion zum Abrufen von Daten aus der Datenbank gemäß den im Array filter_data übergebenen Daten. $ results = $ this-> model_catalog_product-> getProductLatest ($ filter_data);

In diesem Code haben wir zuerst überprüft, ob 'show_special'Parameter ist in der URL festgelegt oder nicht. Wenn ja, dann setze den Wert des Parameters in einer Variablen $ show_special und wenn nein, dann Variable als leer setzen. Dann haben wir ein Array erstellt ($ default_data) mit den Werten, für die wir Produkte aus der Datenbank abrufen müssen. Dann haben wir die Modellfunktion aufgerufen getProductLatest () neueste Produkte entsprechend der übergebenen Variablen abrufen ($ filter_data) in der Funktion. Hier ist die Funktion, die wir in model hinzufügen müssen (Katalog / Modell / Katalog / Produkt):

public function getProductLatest ($ data = array ()) {// Parameter für $ join und $ condition setzen, um Daten von speziellen Produkten abzurufen, wenn ($ data ['show_special'] == '1') {$ join = "LEFT JOIN" . DB_PREFIX. "product_special ps ON (ps.product_id = p.product_id)"; $ condition = "AND ps.customer_group_id = '". (int) $ this-> config-> get ('config_customer_group_id'). "'AND ((ps.date_start =' 0000-00-00 ') ODER ps.date_start <JETZT ()) AND (ps.date_end =' 0000-00-00 'ODER ps.date_end> JETZT () ODER ps.date_end = '0001-01-01')) "; } // Einstellung der Parameter $ join und $ condition, um Daten von Produkten abzurufen, die nicht spezifiziert sind elseif ($ data ['show_special'] == '0') {$ join = "LEFT JOIN". DB_PREFIX. "product_special ps ON (ps.product_id = p.product_id)"; $ condition = "AND ps.product_id ist NULL"; } else {// Einstellung von $ join- und $ condition-Parametern zum Abrufen von Daten aller Produkte unabhängig von speziellen $ join = ''; $ condition = ''; } // Abfrage zum Abrufen von Produktdaten aus der Datenbank. Hinzufügen von $ join- und $ condition-Parametern in der Abfrage, um Daten entsprechend abzurufen. $ Sql ​​= "SELECT DISTINCT p.product_id FROM". DB_PREFIX. "Produkt p LEFT JOIN". DB_PREFIX. "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN". DB_PREFIX. "product_to_store p2s ON (p.product_id = p2s.product_id) $ join WHERE p.status = '1' UND p.date_available <= NOW () AND p2s.store_id = '". (int) $ this-> config-> get ('config_store_id'). "'$ condition GROUP BY p.product_id ORDER BY p.product_id DESC"; // Grenzwert in Abfrage setzen, wenn LIMIT vom Controller übergeben wird. if (isset ($ data ['start']) || isset ($ data ['limit'])) {if ($ data ['start'] <0) {$ data ['start'] = 0; } if ($ data ['limit'] <1) {$ data ['limit'] = 20; } $ sql. = "LIMIT". (int) $ data ['start']. ",". (int) $ data ['limit']; } $ product_data = array (); // Abfrage ausführen $ query = $ this-> db-> query ($ sql); // Schleife zum Festlegen abgerufener Daten in der Variablen, die im Controller übergeben werden sollen. foreach ($ query-> lines as $ result) {$ product_data [$ result ['product_id']] = $ this-> getProduct ($ result ['product_id']); } // Liefert Produktdaten an den Controller. Rückgabe von $ product_data; }

Im Modell haben wir Variablen gesetzt $ join und $ Bedingung auf der Grundlage der folgenden drei Bedingungen:

  1. Wenn show_special 1 ist: In diesem Fall haben wir nur Produkte angezeigt, die speziell sind. Da in opencart die Daten von Spezialprodukten in der oc_product_special-Tabelle gespeichert sind, haben wir den Join der oc_product-Tabelle mit der oc_product_secial-Tabelle hinzugefügt, um nur Daten von Spezialprodukten abzurufen.
  2. Wenn show_special 0 ist: In diesem Fall haben wir Produkte angezeigt, die nicht als besonders gekennzeichnet sind. Um also Produkte zu finden, die nicht besonders sind, müssen wir Produkte abrufen, die sich in einer speziellen Tabelle befinden, aber in der oc_product_special-Tabelle. Dazu haben wir den LEFT-Join der oc_product-Tabelle mit der oc_product_secial-Tabelle hinzugefügt und die Bedingung "ps.product_id IS NULL" hinzugefügt.
  3. Wenn show_special nicht 0 und 1 ist: In diesem Fall müssen wir alle Produkte abrufen, ob sie speziell sind oder nicht. Deshalb haben wir Daten direkt aus der oc_product-Tabelle abgerufen.

Nachdem wir alle drei möglichen Bedingungen hinzugefügt haben, haben wir eine Abfrage geschrieben und ausgeführt. Dann haben wir alle abgerufenen Daten in gesetzt $ product_data Array und geben Sie das gleiche an den Controller zurück.

Hinweis: um die neuesten Produkte abzurufen, haben wir in der Abfrage 'Order by product_id DESC' verwendet. Wenn Sie Daten von Produkten abrufen möchten, die in den letzten Tagen hinzugefügt wurden, können Sie in der WHERE-Klausel eine weitere Bedingung hinzufügen, z. B. date_added> 'any date'.

Zusammenfassung

Nach dem oben beschriebenen Verfahren können Sie die neuesten Spezialprodukte auf der Grundlage der übergebenen Parameter für Spezialprodukte in der URL abrufen.