Jump to content

[PHP] Page perso et affichage produits


Glidro

Recommended Posts

Bonjour,

 

J'ai créer ma page personnalisée sous Prestashop, avec mon template, mais je bloque sur l'affichage des produits.

 

J'ai juste besoin de récupérer les informations sur les produits par catégories etc, si je veux afficher que les noms de produits les avatars etc, bref en requête SQL je saurais faire mais les tables sont nombreuses et pas très claires, du coup j'aimerai m'appuyer sur des fonctions existantes (comme la classe Product & son controlleur).

 

Hélas je comprends pas trop le strict minimum necessaire à l'obtention de ces informations.

 

Par exemple si je veux afficher toutes les infos du produit ID 10 ou tous les produits de la catégorie 20.

 

Merci.

Edited by Glidro (see edit history)
Link to comment
Share on other sites

Bonjour,

 

si je ne me trompe pas.

 

Pour récupérer les données d'un produit vous pouvez créer un objet Product en indiquant son id.

 

si vous regardez la Classe Product vous verrez cela :

public function __construct($id_product = null, $full = false, $id_lang = null, $id_shop = null, Context $context = null)

ainsi vous pouvez créer un produit en faisant :

$product = new Product(id_produit, true, id_lang);

je vous laisse regarder pour les catégories

  • Like 1
Link to comment
Share on other sites

Merci !

 

Je n'arrive toujours pas à afficher les produits d'une catégorie / sous catégorie.

 

new Category(13,$this->context->language->id, $this->context->shop->id);

 

Quand je var dump, j'ai juste l'information de la catégorie mais pas les produits qui sont liés.

Link to comment
Share on other sites

Merci tout fonctionne :)

 

Dernière petite question.

 

Comment obtenir le $product.id_product_attribute en fonction de la combinaison (couleur / texture) ?

 

Quand on créer un produit, dans les combinaisons, sur la texture on peut également sélectionner une image du produit, quand on cliquera sur la texture l'image du produit changera en fonction de celle qu'on à choisie.

 

Du coup j'aimerai récupérer cette valeur, mais je ne sais pas comment faire.

 

En gros faudrait que je modifie ma fonction sql pour récupérer également le id_attribute de la table product_attribute_combination

 

Mais je suis coincé ..

SELECT ag.`id_attribute_group`, agl.`name` AS group_name, agl.`public_name` AS public_group_name, a.`id_attribute`, al.`name` AS attribute_name,
		a.`color` AS attribute_color, pa.`id_product_attribute`, pa.`quantity`, pa.`price`,pac.`id_attribute` AS wtfh, pa.`ecotax`, pa.`weight`, pa.`default_on`, pa.`reference`
		FROM `'._DB_PREFIX_.'product_attribute` pa
		LEFT JOIN `'._DB_PREFIX_.'product_attribute_combination` pac ON pac.`id_product_attribute` = pa.`id_product_attribute`
		LEFT JOIN `'._DB_PREFIX_.'attribute` a ON a.`id_attribute` = pac.`id_attribute`
		LEFT JOIN `'._DB_PREFIX_.'attribute_group` ag ON ag.`id_attribute_group` = a.`id_attribute_group`
		LEFT JOIN `'._DB_PREFIX_.'attribute_lang` al ON a.`id_attribute` = al.`id_attribute`
		LEFT JOIN `'._DB_PREFIX_.'attribute_group_lang` agl ON ag.`id_attribute_group` = agl.`id_attribute_group`
		WHERE pa.`id_product` = '.intval($id_product).'
		AND al.`id_lang` = '.intval($id_lang).'
		AND agl.`id_lang` = '.intval($id_lang).'
		ORDER BY pa.`id_product_attribute`
Edited by Glidro (see edit history)
Link to comment
Share on other sites

En gros là le soucis c'est que la requête me retourne une connerie pour mon id_attribute.

 

Je cherche le id_attribute de la table product_attribute_combination (pac), mais WTFH me retourne id_attribute de la table product_attribute (pa)

SELECT pac.`id_attribute` AS wtfh, ag.`id_attribute_group`, agl.`name` AS group_name, agl.`public_name` AS public_group_name, a.`id_attribute`, al.`name` AS attribute_name,
		a.`color` AS attribute_color, pa.`id_product_attribute`, pa.`quantity`, pa.`price`, pa.`ecotax`, pa.`weight`, pa.`default_on`, pa.`reference`
		FROM `'._DB_PREFIX_.'product_attribute` pa
		LEFT JOIN `'._DB_PREFIX_.'product_attribute_combination` pac ON pac.`id_product_attribute` = pa.`id_product_attribute`
		LEFT JOIN `'._DB_PREFIX_.'attribute` a ON a.`id_attribute` = pac.`id_attribute`
		LEFT JOIN `'._DB_PREFIX_.'attribute_group` ag ON ag.`id_attribute_group` = a.`id_attribute_group`
		LEFT JOIN `'._DB_PREFIX_.'attribute_lang` al ON a.`id_attribute` = al.`id_attribute`
		LEFT JOIN `'._DB_PREFIX_.'attribute_group_lang` agl ON ag.`id_attribute_group` = agl.`id_attribute_group`
		WHERE pa.`id_product` = '.intval($id_product).'
		AND al.`id_lang` = '.intval($id_lang).'
		AND agl.`id_lang` = '.intval($id_lang).'
		ORDER BY pa.`id_product_attribute`
Link to comment
Share on other sites

Houla je ne comprends rien :)

 

Explique ce que tu veux faire à quel endroit ? sur quelle page ?

 

Ouai j'avoue l'explication est un peut étrange.

 

Bon du coup, on peut créer des attributs de produits, par exemple des couleurs ou textures.

 

Exemple je créer un produit Chaussure 1, dans ce produit je vais lui rajouter des Combinaisons exemple Texture 1 / 2 / 3 / 4.

 

Une fois sur la boutique, je clique sur la chaussure, et je vois les miniatures de mes textures, quand je cliquerai sur une de ces miniatures, j'afficherai une nouvelle image en grand sur le produit, cette image je la renseigne également dans la création du produit et de sa combinaison (exemple Texture 1 aura l'image 1, texture 2 image 2 etc).

 

Du coup moi sur ma page personnalisée j'affiche tout ce dont j'ai besoin au niveau de mes produits, et j'arrive même à afficher les attributs.

 

J'ai mon code javascript qui va changer l'image du produit quand je cliquerai sur une miniature, faut que je lui renseigne l'id de l'image du produit correspondant a la Texture en gros désormais.

Link to comment
Share on other sites

Si j'ai bien compris, tu veut ça :

 

Quand t'es sur la gestion de ton produit.

- T'as un nouvel onglet "Texture".

- Quand tu clique dessus, tu peut gérer les textures associé à un produit : ajouter, supprimer etc...

- Quand t'en ajoute un nouveau t'as une liste déroulante avec "Texture 1", "Texture 2". Tu choisis ce que tu veut, puis tu valide.

 

Côté front end, dans la page d'un produit, tu verras les différente texture disponible.

 

Pour gérer cette association en BDD, tu créer une nouvelle table association avec 2 champs primaires :

id_produit - id_texture.

 

Dans la gestion des textures, quand tu valide une texture cela créer un nouvelle enregistrement avec l'id du produit en cours et l'id de la texture.

 

 

Est-ce bien ça?

Link to comment
Share on other sites

Si j'ai bien compris, tu veut ça :

 

Quand t'es sur la gestion de ton produit.

- T'as un nouvel onglet "Texture".

- Quand tu clique dessus, tu peut gérer les textures associé à un produit : ajouter, supprimer etc...

- Quand t'en ajoute un nouveau t'as une liste déroulante avec "Texture 1", "Texture 2". Tu choisis ce que tu veut, puis tu valide.

 

Côté front end, dans la page d'un produit, tu verras les différente texture disponible.

 

Pour gérer cette association en BDD, tu créer une nouvelle table association avec 2 champs primaires :

id_produit - id_texture.

 

Dans la gestion des textures, quand tu valide une texture cela créer un nouvelle enregistrement avec l'id du produit en cours et l'id de la texture.

 

 

Est-ce bien ça?

 

Et bien non pas besoin de rajouter de table ni rien, prestashop fait déjà tout celà.

 

Quand on modifie un produit, on peut avoir des combinaisons de produits, et chaque combinaison de produit peut influer sur le produit lui même genre le prix, la photo ou autre.

 

Dans mon cas c'est des couleurs / textures de produits donc la photo doit changer, ainsi quand je change ma combinaison, y a plusieurs photos du produit en questions disponibles genre Chaussure Bleue / Verte / Rouge, et dans mon attribut Texture 1 sur le produit, je lui donne la photo Chaussure Bleue quoi par exemple.

 

Tout est déjà géré par prestashop.

Link to comment
Share on other sites

Ah dans ce cas faut modifier la vue.

 

Récupérer l'id couleur texture dans la vue et faire un truc du style :

<img src="img/texture/{id_texture}.png" />

avec un foreach pour récuperer toute les valeurs/images.

 

 

Mais le problème c'est que tu n'arrive pas à récuperer les id texture/couleurs au niveau du controleur?

Link to comment
Share on other sites

Bon bah en fait je viens de capter ...

 

Je cherchais l'id de l'image dans product_attribute_combination alors que c'était absolument pas là qu'il fallait chercher.

 

Du coup juste à modifier ma requête sql avec ceci:

 

LEFT JOIN `'._DB_PREFIX_.'product_attribute_image` pai ON (pai.`id_product_attribute` = pa.`id_product_attribute`)

 

et ça fonctionne :D

 

Merci quand même pour l'aide apportée :)

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...