Jump to content

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. 

 

Link to comment
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

Link to comment
Share on other sites

  • 1 year later...
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

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