Knowband Blog | Ecommerce Modules

Ricevi gli ultimi prodotti senza prezzi speciali (Opencart 2.3)

Obiettivi del blog

Dopo aver letto questo blog, potrai recuperare i prodotti dal database Opencart sulla base del parametro che viene passato dall'URL.

Requisito

Dobbiamo visualizzare gli ultimi prodotti sulla base del parametro passato nell'URL. Usando questo parametro dobbiamo decidere se dobbiamo mostrare prodotti speciali o no.

Implementazione del codice

Per implementarlo dobbiamo apportare modifiche al nostro controller e modello. Nel controller abbiamo aggiunto la condizione per passare il parametro e nel modello apporteremo delle modifiche nella query in base al parametro passato. Per gestire la condizione che stiamo usando show_special parametro nel codice. Di seguito è riportato il codice che dobbiamo aggiungere nel controller (Catalogo / regolatore / estensione / modulo / latest.php):

/ * Verifica della chiave show_special nel parametro get * Questa chiave ($ show_special) verrà utilizzata per recuperare i dati dal database in modo condizionale. * cioè se $ show_special = 1 quindi visualizza i prodotti speciali * $ show_special = 0 quindi visualizza prodotti che non hanno speciali * else * visualizza tutti i prodotti indipendentemente da speciali * / if (isset ($ this-> request-> get [' show_special '])) {// passaggio del valore nella variabile se impostato nell'URL $ show_special = $ this-> request-> get [' show_special ']; } else {// Altrimenti verrà passata la stringa vuota $ show_special = ''; } // Creazione di una variabile da passare al modello $ filter_data = array ('start' => ($ page - 1) * $ limit, 'limit' => $ limit, 'show_special' => $ show_special); // Chiamata alla funzione modello per recuperare i dati dal database in base ai dati passati nell'array filter_data. $ results = $ this-> model_catalog_product-> getProductLatest ($ filter_data);

In questo codice per prima cosa abbiamo controllato che se 'show_special'il parametro è impostato nell'URL o no. Se sì, imposta il valore del parametro in una variabile $ show_special e se no, quindi impostare la variabile come vuota. Quindi abbiamo creato un array ($ default_data) con i valori per conto dei quali dobbiamo recuperare i prodotti dal database. Quindi abbiamo chiamato la funzione del modello getProductLatest () per recuperare gli ultimi prodotti in base alla variabile passata ($ filter_data) nella funzione. Ecco la funzione che dobbiamo aggiungere nel modello (Catalogo / modello / catalogo / prodotto):

funzione pubblica getProductLatest ($ data = array ()) {// Impostazione $ join e $ condition parametri per recuperare i dati di prodotti speciali if ($ 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 'OR ps.date_start <NOW ()) AND (ps.date_end =' 0000-00-00 'OR ps.date_end> NOW () O ps.date_end = '0001-01-01')) "; } // Impostazione dei parametri $ join e $ condition per il recupero dei dati di prodotti che non sono specil 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 È NULL"; } else {// Impostazione dei parametri $ join e $ condition per il recupero dei dati di tutti i prodotti, indipendentemente dallo speciale $ join = ''; $ condizione = ''; } // Query per recuperare i dati dei prodotti dal database. Aggiunto $ join e $ condition parametro nella query per recuperare i dati di conseguenza $ sql = "SELECT DISTINCT p.product_id FROM". DB_PREFIX. "Prodotto p SINISTRA". 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' AND p.date_available <= NOW () AND p2s.store_id = '". (int) $ this-> config-> get ('config_store_id'). "$ condizione GROUP BY p.product_id ORDER BY p.product_id DESC"; // Impostazione del limite in query se superato LIMIT dal controller. if (isset ($ data ['start']) || isset ($ data ['limite'])) {if ($ data ['start'] <0) {$ data ['start'] = 0; } if ($ data ['limit'] <1) {$ data ['limit'] = 20; } $ sql. = "LIMIT". (int) $ data ['start']. ",". (int) $ dati [ 'limite']; } $ product_data = array (); // Esegui query $ query = $ this-> db-> query ($ sql); // Loop per impostare i dati recuperati nella variabile da passare nel controller. foreach ($ query-> rows as $ result) {$ product_data [$ result ['product_id']] = $ this-> getProduct ($ result ['product_id']); } // Restituisci i dati dei prodotti al controller. return $ product_data; }

Nel modello abbiamo impostato delle variabili $ unirsi e $ condizione sulla base delle seguenti tre condizioni:

  1. Se show_special è 1: In questo caso abbiamo mostrato solo i prodotti che sono speciali. Come in opencart, i dati di prodotti speciali sono memorizzati nella tabella oc_product_special, quindi abbiamo aggiunto join della tabella oc_product con la tabella oc_product_secial per recuperare solo i dati di prodotti speciali.
  2. Se show_special è 0: In questo caso abbiamo visualizzato prodotti che non sono impostati come speciali. Quindi per trovare prodotti che non sono speciali dobbiamo recuperare i prodotti che sono nella tabella speciale ma nella tabella oc_product_special. Per questo abbiamo aggiunto il join LEFT della tabella oc_product con la tabella oc_product_secial e la condizione aggiunta "ps.product_id IS NULL".
  3. Se show_special è diverso da 0 e 1: In questo caso dobbiamo recuperare tutti i prodotti, siano essi speciali o meno. Quindi per questo abbiamo recuperato direttamente i dati dalla tabella oc_product.

Dopo aver aggiunto tutte e tre le possibili condizioni, abbiamo scritto una query e l'abbiamo eseguita. Quindi abbiamo impostato tutti i dati recuperati $ product_data array e restituire lo stesso al controller.

Nota: qui per recuperare gli ultimi prodotti abbiamo appena usato 'Ordina per product_id DESC' nella query. Se si desidera recuperare i dati dei prodotti che sono stati aggiunti negli ultimi giorni, è possibile aggiungere un'altra condizione nella clausola WHERE, ad esempio date_added> 'any date'.

sommario

Dopo aver seguito la procedura precedente, sarà possibile recuperare gli ultimi prodotti speciali sulla base del parametro passato per i prodotti speciali nell'URL.