Jump to content
maxime_k

Liste d'attributs sur la page product-list.tpl

Recommended Posts

Bonjour, 

 

Mes produits utilisent un attribut de taille. Chaque taille donne un prix différent. 

Sur la page produit le comportement est parfait. 

 

Je souhaite ajouter la liste de choix directement sur les pages de catégorie sans devoir forcer l'utilisateur à entrer dans l'aperçu rapide ou sur la page produit. 

 

La version utilisée est 1.6.1.10.

Merci de votre retour. 

 

Share this post


Link to post
Share on other sites

Ça avance. 

L'affichage de la liste déroulante des déclinaisons de produit (taille par exemple) se fait correctement sur la page catégorie. 

 

Voici le code ajouté. 

 

En override de CategoryController.php

<?php
class CategoryController extends CategoryControllerCore
{
    /* function to get all necessary data of products combinations
     * @param $products An array of products data
     * return array products combinations
     */
    public function getProductAttributeCombinations($products) {
        $combinations = array();

        foreach($products as $product)
        {
            // load product object
            $product = new Product ($product['id_product'], $this->context->language->id);

            // get the product combinations data
            // create array combinations with key = id_product
            $combinations[$product->id] = $product->getAttributeCombinations($this->context->language->id);
        }

        return $combinations;
    }

    public function initContent()
    {
        parent::initContent();
        $products = $this->category->getProducts($this->context->language->id, (int)$this->p, (int)$this->n, $this->orderBy, $this->orderWay);
        $combinations = $this->getProductAttributeCombinations($products);
        $this->context->smarty->assign('combinations', $combinations);
    }
}

Et dans le product-list.tpl, à l'intérieur de la boucle pour chaque produit : 

{foreach from=$combinations key=k item=comb}
   {if $k == $product.id_product}
      <select name="attribute_combination_{$product.id_product}" id="attribute_combination_{$product.id_product}" class="form-control attribute_select" ref="{$product.id_product}">
      {foreach from=$comb item=attr}
         <option value="{$attr.id_attribute}">{$attr.attribute_name|escape:'html':'UTF-8'}</option>
      {/foreach}
      </select>
   {/if}
{/foreach}

Donc niveau résultat, j'obtiens bien la liste de choix des attributs. 

 

Maintenant, comment faire pour communiquer le choix sélectionné pour l'ajout au panier et la mise à jour de l'affichage du prix ? (même comportement de base que la page produit)

 

Merci d'avance de vos réponses

Share this post


Link to post
Share on other sites

Sur le thème par défaut tu as comme url pour un bouton ajouter au panier :

panier?add=1&id_product=2&ipa=7&token=845aa2dce7558760d48d8a52aa56e008

Quand tu cliques ça fait un POST comme ça

controller: cart
add: 1
ajax: true
qty: 1
id_product: 2
token: 845aa2dce755d48d8a52aa56e008 
ipa: 7

Ce dont tu as besoin c'est de modifier l'ipa donc tu pourrais au changement de ton select modifier l'url avec ipa=ton_nouvelle_ipa

 

C'est une idée et le principe après il y a surement mieux ^^

Edited by okom3pom (see edit history)

Share this post


Link to post
Share on other sites

Ne confondez pas id_attribute et id_product_attribute, cette erreur arrive souvent chez ceux qui n'ont qu'un type d'attribut par produit

Share this post


Link to post
Share on other sites
Le 22/02/2017 à 10:54 PM, maxime_k a dit :

Ça avance. 

L'affichage de la liste déroulante des déclinaisons de produit (taille par exemple) se fait correctement sur la page catégorie. 

 

Voici le code ajouté. 

 

En override de CategoryController.php


<?php
class CategoryController extends CategoryControllerCore
{
    /* function to get all necessary data of products combinations
     * @param $products An array of products data
     * return array products combinations
     */
    public function getProductAttributeCombinations($products) {
        $combinations = array();

        foreach($products as $product)
        {
            // load product object
            $product = new Product ($product['id_product'], $this->context->language->id);

            // get the product combinations data
            // create array combinations with key = id_product
            $combinations[$product->id] = $product->getAttributeCombinations($this->context->language->id);
        }

        return $combinations;
    }

    public function initContent()
    {
        parent::initContent();
        $products = $this->category->getProducts($this->context->language->id, (int)$this->p, (int)$this->n, $this->orderBy, $this->orderWay);
        $combinations = $this->getProductAttributeCombinations($products);
        $this->context->smarty->assign('combinations', $combinations);
    }
}

Et dans le product-list.tpl, à l'intérieur de la boucle pour chaque produit : 


{foreach from=$combinations key=k item=comb}
   {if $k == $product.id_product}
      <select name="attribute_combination_{$product.id_product}" id="attribute_combination_{$product.id_product}" class="form-control attribute_select" ref="{$product.id_product}">
      {foreach from=$comb item=attr}
         <option value="{$attr.id_attribute}">{$attr.attribute_name|escape:'html':'UTF-8'}</option>
      {/foreach}
      </select>
   {/if}
{/foreach}

 

Bonjour,

dans quel endroit de chacun de ces 2 fichiers vous mettez ces morceaux de code ? Je suis sur une version de prestashop 1.6.1.0.

Merci de votre aide

Share this post


Link to post
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...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More