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:
- 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.
- 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".
- 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.