Jump to content

Comment récupérer la variable id_product dans Product.php


Recommended Posts

Bonjour à tous,

 

Comment puis-je récupérer la variable id_product ?

 

Voici ce que je souhaite faire :

 

Récupérer dans Product.php l'équivalent de {$product.id_product} dans product-list.tpl, donc si je comprend bien c'est impossible de lire cette variable sans créer une fonction, mais je ne sais pas bien par quoi commencer ?

 

J'ai vue cette fonction :

 

public static function getShopsByProduct($id_product)
{

 

Je pense que le but est de faire de même et ensuite de faire appel à cette fonction dans mon TPL en lui indiquant un value={$product.id_product} , non ? Le problème est que je ne sais absolument pas comment faire... Avez-vous un début de quelques choses à me partager s.v.p ?

 

 

Merci beaucoup d'avance !

Link to comment
Share on other sites

Bonjour,

 

Je suis sur la version 1.5.0.17, j'ai bien compris la différence et justement je souhaite créer une fonction dans Product.php qui récupère l'id_produit quand je ferais un assign dans mon TPL avec un value={$product.id_product} (Je t'expose ce que je crois avoir compris :unsure:) mais le problème c'est que je n'ai aucune piste à suivre.

 

D'ailleurs en passant est-ce normal que sur 1.5.0.17 {PHP} & {/PHP} ne fonctionne pas ?

 

 

Merci de ta réponse !!

Link to comment
Share on other sites

Bonjour Glopsyo,

 

Tout cela me semble assez confus.

Je ne suis pas (encore :P) au point sur la 1.0.5, donc ce sont des suppositions / questions sur ce que je connais déjà sur les anciennes versions, néanmoins :

 

- Quel est le besoin précis, la fonctionnalité finale ?

- Dans quelle template veux-tu pouvoir récupérer cet ID ?

-> Étonnant par ailleurs, quand tu instancies le produit (que ce soit dans la liste ou dans le détail), l'identifiant (ou les identifiants) sont déjà passés dans smarty, regarde du coté du débug smarty si ce que tu cherches ne s'y trouve pas déjà.

 

Sinon :

 

D'ailleurs en passant est-ce normal que sur 1.5.0.17 {PHP} & {/PHP} ne fonctionne pas ?

 

Oui depuis le passage en smarty 3 qui date de la 1.4 en fait.

Et c'est normal... dans un modèle MVC selon les Best Practices, on est pas censé invoquer des méthodes des classes/controllers depuis la vue...

Même si par commodité, ça reste possible, ce n'est pas ce qu'il y a de plus propre.

Link to comment
Share on other sites

Bonjour,

 

Merci de ta réponse,

 

Alors la fonctionnalité finale est : (je m'explique)

 

Je switch ma version Magento vers Prestashop :

 

Magento : j'ai des attributs spécifique dont 1 qui m’intéresse : "Prix public", je retrouve bien cette infos sur prestashop (caché dans les caractéristiques) je retrouve cette infos dans ma base de donnée prestashop ici : ps_feature_value_lang

 

Ensuite je me retrouve sur mon product-list.tpl de là j'ai un "Prix" affiché, je souhaite maintenant mettre "Prix" au lieu de "Prix public" ("Pourcentage "Prix" / "Prix public" - 1" %), pour ce faire la meilleurs solution pour moi est de créer une fonction dans Product.php impliquant une requête SQL pour rechercher tout mon schmilblick, par contre j'ai un problème héhé, comment récupérer l'id_product de ma liste, puisque ma requête ce fait en amont, je suppose donc que dans ma fonction je lui ajoute un attribut reprenant la variable $id_product, puis dans mon product-list.tpl quand j'assign() ma fonction je lui donne un value de $product.id_product.

 

 

Le template est product-list.tpl , et la class Product.php.

 

Alors peut être qu'il existe déjà une fonction MAGIQUE qui me ferait éliminer ma fonction du style $products->ProductFeature (Je rêve bien évidemment).

 

J'ai regarder le débug de smarty j'ai évidemment tout ce que je cherche : "$products" mais comment l'utiliser ?

 

J'ai bien essayé un truc à l'arrache dans Product.php

 

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

 

à la fin de cette fonction, j'ai effectué mes requêtes etc.. ça fonctionne niquel il me prend bien $id_product, sauf que ! ce qui est logique, il me le fait seulement sur UN SEUL produit (le dernier de ma requête), si je while ma requête je passe à 0 sur tous mes produits.

 

 

Voici ma requête : (Oui c'est ignoble, en + du php4 :ph34r: c'était juste un bidouillement rapide, je ne suis pas encore à l'aise avec presta)

 

 

global $smarty;

$id_product_feature = $id_product;

$req1 = mysql_query("SELECT * FROM ps_feature_product WHERE id_product='$id_product_feature' LIMIT 1, 2");
while ($rep = mysql_fetch_array($req1) )
{

$id_feature_value = $rep['id_feature_value'];


$req2 = mysql_query("SELECT * FROM ps_feature_value_lang WHERE id_feature_value='$id_feature_value'");
$rep = mysql_fetch_array($req2);

$name_feature = $rep['value'];


$name_feature_num = substr($name_feature,0,-3);

// $pourcentage_name_feature = $this->price / $name_feature -1;

$smarty->assign('name_feature_num', $name_feature_num);

$smarty->assign('name_feature', $name_feature);

$smarty->assign('pourcentage_name_feature', $pourcentage_name_feature);

}

 

Si quelqu'un arrive à me dépatouiller cette chose :wub:

 

 

Sinon je pensais à utiliser le champ "PRIX D'ACHAT HT" vue que celui-ci est transparent client, et de notre côté nous ne l'utilisons pas, je pensais plutôt à basculer mon attribut "Prix public" sur "Prix d'achat HT" puis de là il doit y avoir une fonction prédéfinis pour le récupérer non ? si oui, la connaissez-vous ? :rolleyes:

 

 

{PHP}{/PHP} : Merde.

 

 

Merci pour ta réponse qui ma quand même vachement éclairer sur certain point.

Link to comment
Share on other sites

Je crois simplement que tu cherches au mauvais endroit en fait ;)

 

Si ton template est product-list.tpl (et si ça n'a pas changé depuis la 1.0.4.x), Prestashop passe tout d'abord par les classes/controlleurs de Catégories avant d'appeler des méthodes du produit, c'est à mon avis là que tu devrais regarder.

 

Aller, étant un peu limité par le temps aujourd'hui pour une résolution de problème, voilà quelques pistes de méthodes.

 

Dans la classe "Product" :

 

public function getFeatures (qui appelle : public static function getFeaturesStatic)

...et oui, la magie existe :P

 

Dans Categories :

 

Controlleur : Tu as la méthode "assignProductList" avec notamment "catProducts" qui devrais contenir tout ce dont tu as besoin. Elle passe par l'appel de...

 

Classe :

public function getProducts -> qui contient la requête générale des données de chaque produit sur une catégorie.

 

Avec l'override des controlleurs et des classes, tu devrais pouvoir surcharger tout ça à ta sauce sans compromettre le cœur de Prestashop (je te laisse le soin de chercher dans le wiki, ce n'est pas très compliqué à mettre en place et c'est un bon réflexe à prendre dès le début ;) ).

 

Bon dev !

  • Like 1
Link to comment
Share on other sites

Salut,

 

Merci de ta réponse,

 

j'ai trouvé:

{foreach from=$product.features item=feature}
				 <span>{$feature.name|escape:'htmlall':'UTF-8'}</span> {$feature.value|escape:'htmlall':'UTF-8'}
			  {/foreach}

 

donc je me débrouille avec ça pour récupérer la valeur de mon premier champs d'attribut "Prix public" , ceci est RESOLU !

 

Cependant, pendant que je tiens des devs sous le coude :wub:

 

Si tu es en mesure de me répondre bien sûr, peux tu me dire comment afficher les tailles disponible sur product-list.tpl ?

 

J'ai trouvé 278 458 réponses génial ! pour la 1.4 hors sur la 1.5 aucun dev ne fonctionne !

 

La fonctionnalité :

 

Sur mon site, on peut cliquer sur "Commander" et il m'ajoute directement le produit au panier, chouette ! mais il ajoute une taille au pif, j'aimerai pouvoir faire un menu déroulant sur mon bouton "Commander" qui affiche une liste déroulante des tailles dispo puis une fois choisis, il clique sur un bouton "OK" et Paff, ça fait des.. 'bref j'suis encore complètements perdu et sans réponse ! j'ai trouvé un module : http://www.coeos.pro/boutique/fr/modules-prestashop/83-affichage-des-attributs-15.html

 

Mais ce n'est pas EXACTEMENT le résultat attendu, mais le principe est là !

 

Merci d'avance pour vos aides.

Link to comment
Share on other sites

non je te confirme que ce n'est pas exactement ce que tu veux, mon module (celui que tu cites) ne fait qu'afficher les attributs, pour les déclinaisons il vaut mieux s'orienter sur http://www.coeos.pro/boutique/fr/modules-prestashop/78-liste-des-declinaisons.html qui permet de mettre au panier la déclinaison souhaitée, mais le résultat est affiché sous forme de tableau et non sous forme de liste comme tu le souhaites...

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