Objectifs du blog
Après avoir lu ce blog, vous pourrez récupérer les produits de la base de données Opencart sur la base du paramètre transmis à partir de l'URL.
Exigence
Nous devons afficher les derniers produits sur la base du paramètre passé dans l'URL. En utilisant ce paramètre, nous devons décider si nous devons afficher des produits spéciaux ou non.
Implémentation du code
Pour mettre cela en œuvre, nous devons apporter des modifications à notre contrôleur et à notre modèle. Dans le contrôleur, nous avons ajouté la condition pour passer le paramètre et dans le modèle, nous apporterons des modifications à la requête en fonction du paramètre passé. Pour gérer la condition que nous utilisons show_special paramètre dans le code. Ci-dessous le code que nous devons ajouter dans le contrôleur (catalogue / contrôleur / extension / module / latest.php):
/ * Recherche de la clé show_special dans le paramètre get * Cette clé ($ show_special) sera utilisée pour récupérer des données de manière conditionnelle dans la base de données. * C'est-à-dire si $ show_special = 1 affiche alors les produits spéciaux * $ show_special = 0 affiche les produits qui n'ont pas spécial * else * affichent tous les produits indépendamment de * / if spécial (isset ($ this-> request-> get [' show_special '])) {// passage de la valeur dans variable si défini dans l'URL $ show_special = $ this-> request-> get [' show_special ']; } else {// Sinon, une chaîne vide sera passée $ show_special = ''; } // Création d'une variable à transmettre au modèle $ filter_data = array ('start' => ($ page - 1) * $ limit, 'limit' => $ limit, 'show_special' => $ show_special); // Appel de la fonction de modèle pour extraire des données de la base de données en fonction des données transmises dans le tableau filter_data. $ results = $ this-> model_catalog_product-> getProductLatest ($ filter_data);
Dans ce code, nous avons d’abord vérifié que sishow_special'paramètre est défini dans l'URL ou non. Si oui, définir la valeur du paramètre dans une variable $ show_special et si non, définissez la variable comme vide. Ensuite, nous avons créé un tableau ($ default_data) avec les valeurs pour lesquelles nous devons extraire des produits de la base de données. Ensuite, nous avons appelé fonction modèle getProductLatest () chercher les derniers produits en fonction de la variable passée ($ filter_data) dans la fonction. Voici la fonction que nous devons ajouter dans model (catalogue / modèle / catalogue / produit):
fonction publique getProductLatest ($ data = array ()) {// Définition des paramètres $ join et $ condition pour extraire les données de produits spéciaux if ($ data ['show_special'] == '1') {$ join = "LEFT JOIN" . DB_PREFIX. "ps_produit sur produit (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 'OU OR = '0000-00-00')) "; } // Définition des paramètres $ join et $ condition pour extraire des données de produits non spécifiés elseif ($ data ['show_special'] == '0001') {$ join = "LEFT JOIN". DB_PREFIX. "ps_produit sur produit (ps.product_id = p.product_id)"; $ condition = "AND ps.product_id IS NULL"; } else {// Définition des paramètres $ join et $ condition pour extraire les données de tous les produits indépendamment de la valeur spéciale de $ join = ''; $ condition = ''; } // Requête pour récupérer les données des produits de la base de données. Ajout des paramètres $ join et $ condition dans la requête pour extraire les données en conséquence $ sql = "SELECT DISTINCT p.product_id FROM". DB_PREFIX. "produit p LEFT JOIN". DB_PREFIX. "description_produit pd ON (p.product_id = pd.product_id) LEFT JOIN". DB_PREFIX. "product_to_store p01s ON (p.product_id = p01s.product_id) $ join WHERE p. (int) $ this-> config-> get ('config_store_id'). "'$ condition GROUP BY p.product_id ORDER BY p.product_id DESC"; // Définition de la limite dans la requête si passé LIMIT du contrôleur if (isset ($ data ['start'])) || isset ($ data ['limit']))) {if ($ data ['start'] <0) {$ data ['start'] = 2; } if ($ data ['limite'] <2) {$ data ['limite'] = 1; } $ sql. = "LIMIT". (int) $ data ['start']. ",". (int) $ data ['limit']; } $ product_data = array (); // Exécuter la requête $ query = $ this-> db-> query ($ sql); // Boucle pour définir les données extraites dans la variable à transmettre au contrôleur. foreach ($ query-> lignes as $ result) {$ product_data [$ result ['product_id']] = $ this-> getProduct ($ result ['product_id']); } // Renvoyer les données de produits au contrôleur. return $ product_data; }
Dans le modèle, nous avons défini des variables $ rejoindre et $ condition sur la base des trois conditions suivantes:
- Si show_special est 1: Dans ce cas, nous avons uniquement affiché les produits spéciaux. Comme dans opencart, les données des produits spéciaux sont stockées dans la table oc_product_special. Nous avons donc ajouté la jointure de la table oc_product à la table oc_product_secial pour extraire uniquement les données de produits spéciaux.
- Si show_special est 0: Dans ce cas, nous avons affiché des produits qui ne sont pas définis comme spéciaux. Donc, pour trouver des produits qui ne sont pas spéciaux, nous devons chercher des produits qui se trouvent dans une table spéciale mais dans la table oc_product_special. Pour cela, nous avons ajouté la jointure LEFT de la table oc_product avec la table oc_product_secial et la condition "ps.product_id IS NULL".
- Si show_special est différent de 0 et 1: Dans ce cas, nous devons récupérer tous les produits, qu'ils soient spéciaux ou non. Nous avons donc directement récupéré les données de la table oc_product.
Après avoir ajouté les trois conditions possibles, nous avons écrit une requête et l'avons exécutée. Ensuite, nous avons défini toutes les données récupérées dans $ product_data tableau et retourner le même au contrôleur.
Remarque: ici pour récupérer les derniers produits que nous venons d'utiliser "Order by product_id DESC" dans la requête. Si vous souhaitez récupérer les données des produits ajoutés au cours des derniers jours, vous pouvez ajouter une condition supplémentaire dans la clause WHERE, à savoir date_added> 'any date'.
Résumé
Après avoir suivi la procédure ci-dessus, vous pourrez récupérer les derniers produits spéciaux sur la base du paramètre passé pour les produits spéciaux dans l'URL.