Alle Produkte anzeigen, wenn die Suche leer ist (Opencart 2.3.x)

Ziele des Blogs

Nachdem Sie diesen Blog gelesen haben, können Sie alle Produkte anzeigen, wenn die Suche leer ist.

Problem Statement

Wenn der Benutzer derzeit in Opencart nach einer Zeichenfolge mit der Suchfunktion sucht, werden keine Produkte zurückgegeben, wenn kein Suchprodukt in der Datenbank gefunden wurde. Wir möchten, dass alle Produkte zurückgegeben werden, wenn die Suche leer ist.

Code-Implementierung

Um dies zu erreichen, müssen wir einige Änderungen an der Modellfunktion vornehmen, die wir zum Abrufen von Produkten aus der Datenbank anhand des eingegebenen Suchbegriffs verwenden. Hier nehmen wir Änderungen vor getProducts () ?function of model Katalog / Modell / Katalog / Produkt.php da wir diese Funktion verwenden, um Ergebnisse auf Basis des Suchbegriffs anzuzeigen.

Hinweis: Sie können dieselben Änderungen in der Modellfunktion vornehmen, mit der Sie Produkte abrufen. Hier ist der Code, den wir im Modell hinzugefügt haben:

/ * Überprüft, ob das Ergebnis leer ist (betroffene Zeilen 0) der Abfrage, die ausgeführt wird, um Daten anhand des Suchbegriffs abzurufen. * Wenn ja, dann neue Abfrage hinzugefügt, um neu hinzugefügte Produkte abzurufen und gleich auszuführen. * Auf diese Weise zeigen wir unsere neuen Produkte auf der Suchseite an, anstatt eine leere Seite anzuzeigen. * / if ($ query-> num_rows == 0) {$ 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) WHERE p.status = '1' UND p.date_available <= NOW () AND p2s.store_id = '". (int) $ this-> config-> get ('config_store_id'). "'GROUP BY p.product_id ORDER BY p.product_id DESC LIMIT 20"; $ query = $ this-> db-> query ($ sql); }

Fügen Sie diesen Code unmittelbar nach der Ausführung der Hauptabfrage oder direkt nach der Zeile ein ($ query = $ this-> db-> query ($ sql)). In diesem Code haben wir zunächst die Anzahl der betroffenen Zeilen durch die Hauptabfrage (zum Abrufen von Daten anhand des Suchbegriffs) überprüft. Wenn die betroffene Zeile 0 ist ($ query-> num_rows == 0) fügte dann unsere Abfrage hinzu, um neue hinzugefügte Produkte abzurufen. Auf diese Weise zeigen wir unsere neuen Produkte auf der Suchseite an, anstatt eine leere Seite anzuzeigen.

Hinweis: Hier haben wir eine Anfrage geschrieben, um neu hinzugefügte Produkte aus der Datenbank abzurufen, wenn die Suche leer ist. Sie können auch eine Abfrage hinzufügen, um Sonder- oder Bestsellerprodukte entsprechend Ihrer Anforderung abzurufen.

Zusammenfassung

Nachdem Sie die folgenden Änderungen in der Modelldatei vorgenommen haben, werden neu hinzugefügte Produkte angezeigt, wenn die Suche leer ist.


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.