Jump to content

afficher l'id des packs


Recommended Posts

  • 1 month later...

Bonjour à tous,

 

dans product.tpl,

 

{$packs}

 

affiche Array,

 

{$packs->id_product}

 

ne renvoie rien alors que la variable est bien visible dans la console debug.....

 

Je ne comprends rien! HELP !!!!

 

Merci d'avance au pro qui passera par là...

 

Fred

marchand sur 1.5.2

Link to comment
Share on other sites

Pas de souci ;)

 

A noter, pour connaître la structure d'une variable, en plus du debug tu peux utiliser print_r de cette façon:

{$ma_variable|print_r}

 

Si tu obtiens un résultat du type:

array([0]=>([champs_1]=>valeur_01,[champs_2]=>valeur_02...[champs_n]=>valeur_0n),[1]=>([champs_1]=>valeur_11,[champs_2]=>valeur_12...[champs_n]=>valeur_1n),...,[N]=>[champs_1]=>valeur_N1,[champs_2]=>valeur_N2...[champs_n]=>valeur_Nn))

 

Alors c'est que tu as un tableau multidimensionnel où tu devras utiliser foreach pour le lister.

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

Bon je bug complet!

 

Mon objectif est d'afficher les packs dans un onglet de la fiche produit. Je sais faire un nouvel onglet, là-dessus pas de souci.

 

Pour l'instant en utilisant juste:

{include file="$tpl_dir./product-list.tpl" products=$packs}

 

lorsqu'on est sur une page produit,le premier pack dans lequel le produit apparaît s'affiche........mais pas les suivants.

 

Cela est normal étant donné que dans la console debug pour la variable $packs n'est chargé que la première ligne [0]

 

Au cas où je ne suis pas clair, le code:

{$packs.0.id_product}

affiche bien quelque chose mais:

{$packs.1.id_product}

n'affiche rien...

 

Je pense qu'il faut rajouter quelque chose au fichier product.php en l'overridant mais je ne sais pas quoi...

Quelqu'un peut-il m'aider?

Merci d'avance pour votre aide!

 

Fred D.

Link to comment
Share on other sites

Je comprends que ce que je dois ajouter doit ressembler à la fonction isPacked de pack.php )... je n'ai pas assez de connaissances encore pour continuer seul...

 



/**
* Is product in a pack?
*
* @static
* @param $id_product
* @return bool
*/
public static function isPacked($id_product)
{
if (!Pack::isFeatureActive())
return false;

if (!array_key_exists($id_product, self::$cacheIsPacked))
{
$result = Db::getInstance()->getValue('SELECT COUNT(*) FROM '._DB_PREFIX_.'pack WHERE id_product_item = '.(int)$id_product);
self::$cacheIsPacked[$id_product] = ($result > 0);
}
return self::$cacheIsPacked[$id_product];
}

Edited by Frédéric D. (see edit history)
Link to comment
Share on other sites

J'ai trouvé un truc qui marche: dans le fichier ProductController.php, à la ligne 207:

$this->context->smarty->assign('packs', Pack::getPacksTable($this->product->id, $this->context->language->id, true, 1));

Je supprime le dernier paramètre (ou je le mets à 100..) et les packs suivant dans lequel le produit se retrouve s'affichent!

 

Franckm1000, si tu es toujours dans le coin, pourrais-tu me confirmer que cette solution qui marche tient la route d'un point de vue "developper" ?

Merci d'avance pour ton aide!!

 

Fred.

Marchand sur la 1.5.2

Edited by Frédéric D. (see edit history)
Link to comment
Share on other sites

Tu regardes dans le fichier classes/packs.php et la fonction getPacksTable. Le dernier paramètre est $limit donc elle est située à 1. En la mettant à 100 tu récupères les 100 premières valeurs par exemple.

 

Le souci est que la variable que tu changes ici influence certainement à d'autres endroits et tu risques de faire quelques dommages collatéraux...

 

Le mieux est de re-créer une variable smarty et de l'utiliser ensuite.

 

Genre:

$is_packs=Pack::getPacksTable($this->product->id, $this->context->language->id, true, 100);
 $this->context->smarty->assign('is_pack',$is_packs);

 

Et côté TPL tu récupères avec {îs_pack}

 

Mais bon je vois pas très bien ce que tu veux faire et comment y faire donc...

Parce que cette variable va te lister les packs mais en amont si je comprends ce que tu veux faire il faudra d'abord sélectionner les packs contenant le produit dans lequel tu te trouves c'est ça ?

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

Bonjour Franckm1000 et merci pour ta nouvelle réponse!

 

Je cherche à faire en sorte que lorsqu'un internaute tombe sur une page produit, on lui propose également en plus des accessoires des packs qui contiennent le produit en question.

 

Exemple:

Sur la fiche produit de l'appareil photo Canon 650D, je veux proposer un pack numéro 1 contenant cet appareil et une carte mémoire et un pack numéro 2 contenant l'appareil + la carte mémoire + une sacoche adaptée.

 

J'espère être clair...

Du coup il faut bien sélectionner les packs contenant le produit.

 

La modification que j'ai effectué dans le fichier ProductController.php associée à la consigne d'affichage dans le product.tpl citée plus haut me donne bien les packs sélectionnés. J'avais trouvé cette piste en analysant les paramètres de la variable $packs dans la console debug.

 

Mais je me doutais qu'il était dangereux de modifier un Controller et c'est pour ça que je voulais avoir ton avis...

Je vais essayer de partir de tes derniers conseils et voir comment sélectionner les bons packs ensuite.

 

Fred.

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