Otrzymuj najnowsze produkty bez specjalnych cen (OpenCart 2.3)

Cele bloga

Po przeczytaniu tego bloga będziesz mógł pobierać produkty z bazy danych Opencart na podstawie parametru przekazywanego z adresu URL.

Wymaganie

Musimy wyświetlić najnowsze produkty na podstawie przekazanego parametru w adresie URL. Korzystając z tego parametru, musimy zdecydować, czy musimy wyświetlać specjalne produkty, czy nie.

Implementacja kodu

Aby to zaimplementować, musimy wprowadzić zmiany w naszym kontrolerze i modelu. W kontrolerze dodaliśmy warunek do przekazania parametru, aw modelu dokonamy zmian w zapytaniu zgodnie z przekazanym parametrem. Aby obsłużyć warunek, z którego korzystamy show_special parametr w kodzie. Poniżej znajduje się kod, który musimy dodać do kontrolera (katalog / kontroler / rozszerzenie / moduł / latest.php):

/ * Sprawdzanie klucza show_special w parametrze get * Ten klucz ($ show_special) zostanie użyty do warunkowego pobrania danych z bazy danych. * tzn. jeśli $ show_special = 1 wyświetli produkty, które specjalne * $ show_special = 0, a następnie wyświetla produkty, które nie mają specjalnego * innego * wyświetlają wszystkie produkty bez względu na specjalne * / if (isset ($ this-> request-> get [' show_special '])) {// przekazanie wartości zmiennej, jeśli ustawiono w URL $ show_special = $ this-> request-> get [' show_special ']; } else {// W przeciwnym razie pusty łańcuch zostanie przekazany $ show_special = ''; } // Tworzenie zmiennej do przekazania do modelu $ filter_data = array ('start' => ($ strona - 1) * limit $, 'limit' => limit $, show_special = = $ show_special); // Wywołanie funkcji modelu w celu pobrania danych z bazy danych zgodnie z danymi przekazanymi w tablicy filter_data. $ results = $ this-> model_catalog_product-> getProductLatest ($ filter_data);

W tym kodzie najpierw sprawdziliśmy, czy "show_specialParametr jest ustawiony w adresie URL lub nie. Jeśli tak, ustaw wartość parametru w zmiennej $ show_special a jeśli nie, ustaw zmienną jako pustą. Następnie stworzyliśmy tablicę ($ default_data) z wartościami, w imieniu których musimy pobrać produkty z bazy danych. Następnie nazwaliśmy funkcję modelu getProductLatest () aby pobrać najnowsze produkty zgodnie ze zmienną ($ filter_data) w funkcji. Oto funkcja, którą musimy dodać w modelu (katalog / model / katalog / produkt):

public function getProductLatest ($ data = array ()) {// Ustawianie parametrów $ join i $ condition w celu pobrania danych produktów specjalnych, jeśli ($ data ['show_special'] == '1') {$ join = "LEWE DOŁĄCZ" . 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 'LUB ps.date_start <NOW ()) AND (ps.date_end =' 0000-00-00 'LUB ps.date_end> NOW () LUB ps.date_end = '0001-01-01')) "; } // Ustawianie parametrów $ join i $ condition w celu pobrania danych produktów, które nie są 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 IS NULL"; } else {// Ustawianie parametrów $ join i $ condition w celu pobrania danych wszystkich produktów bez względu na specjalne $ join = ''; $ condition = ''; } // Zapytanie do pobrania danych produktów z bazy danych. Dodano parametr $ join i $ condition w zapytaniu, aby pobrać dane odpowiednio $ sql = "SELECT DISTINCT p.product_id FROM". DB_PREFIX. "product 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' I 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"; // Ustawianie limitu w zapytaniu, jeśli przekazano LIMIT z kontrolera. 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 (); // Wykonaj zapytanie $ query = $ this-> db-> query ($ sql); // Pętla do ustawienia pobranych danych w zmiennej do przekazania w kontrolerze. foreach ($ zapytanie-> wiersze jako wynik $) {$ product_data [$ result ['product_id']] = $ this-> getProduct ($ result ['product_id']); } // Zwróć dane produktów do kontrolera. return $ product_data; }

W modelu ustawiliśmy zmienne $ join i $ warunek na podstawie następujących trzech warunków:

  1. Jeśli show_special ma wartość 1: W tym przypadku wyświetliliśmy tylko produkty, które są wyjątkowe. Podobnie jak w opencart, dane specjalnych produktów są przechowywane w oc_product_special table, więc dodaliśmy join z tabeli oc_product do tabeli oc_product_secial, aby pobrać dane tylko z produktów specjalnych.
  2. Jeśli show_special ma wartość 0: W tym przypadku wyświetliliśmy produkty, które nie są ustawione jako specjalne. Aby znaleźć produkty, które nie są wyjątkowe, musimy pobrać produkty, które są w specjalnej tabeli, ale w tabeli oc_product_special. W tym celu dodaliśmy LEWE sprzężenie do tabeli oc_product z tabelą oc_product_secial i dodano warunek "ps.product_id IS NULL".
  3. Jeśli show_special jest inne niż 0 i 1: W takim przypadku musimy pobrać wszystkie produkty, niezależnie od tego, czy są specjalne, czy nie. W związku z tym pobraliśmy bezpośrednio dane z tabeli oc_product.

Po dodaniu wszystkich trzech możliwych warunków pisaliśmy zapytanie i wykonywaliśmy je. Następnie ustawiliśmy wszystkie pobrane dane $ product_data array i zwróć to samo do kontrolera.

Uwaga: tutaj, aby pobrać najnowsze produkty, które właśnie wykorzystaliśmy w zapytaniu "Zamów przez id_produktu DESC". Jeśli chcesz pobrać dane produktów, które zostały dodane w ciągu ostatnich kilku dni, możesz dodać jeszcze jeden warunek w klauzuli WHERE, np. Date_added> "any date".

Podsumowanie

Po wykonaniu powyższej procedury będziesz mógł pobrać najnowsze produkty specjalne na podstawie przekazanego parametru dla specjalnych produktów w adresie URL.


Shivika Tomar

Shivika Tomar

Shivika Tomar is a passionate PHP developer. Her area of interest is website development. She loves to bring healing to stressful and sad peoples.

Leave a Reply

Your email address will not be published. Required fields are marked *