Jump to content

Ajout de variables dans le récapitulatif de la commande


Recommended Posts

Bonjour à tous,
Dans le récapitulatif de la commande,
je souhaiterais rajouter la variable "catégorie" correspond au produit du caddie, de la même façon qu'on y trouve le produit et ces caractéristiques.
Est ce quelqu'un a déjà fait une chose dans le genre ?
Ou une piste à soumettre ?

Merci à tous

Link to comment
Share on other sites

  • 1 month later...

Dans la classe Cart /classes/cart.php , recherche la fonction:

public function getProducts($refresh = false, $id_product = false)
   {
       if (!$this->id)
           return array();
       if ($this->_products AND !$refresh)
           return $this->_products;
       $sql = '
       SELECT cp.`id_product_attribute`, cp.`id_product`, cp.`quantity` AS cart_quantity, pl.`name`, cp.`id_custome`,
       pl.`description_short`, pl.`available_now`, pl.`available_later`, p.`id_product`, p.`id_category_default`, p.`id_supplier`, p.`id_manufacturer`, p.`id_tax`, p.`on_sale`, p.`ecotax`,
       p.`quantity`, p.`price`, p.`reduction_price`, p.`reduction_percent`, p.`reduction_from`, p.`reduction_to`, p.`weight`, p.`out_of_stock`, p.`active`, p.`date_add`, p.`date_upd`,
       t.`id_tax`, tl.`name` AS tax, t.`rate`, pa.`price` AS price_attribute, pa.`quantity` AS quantity_attribute, 
       pa.`ecotax` AS ecotax_attr, i.`id_image`, il.`legend`, pl.`link_rewrite`, cl.`link_rewrite` AS category, CONCAT(cp.`id_product`, cp.`id_product_attribute`) AS unique_id,
       IF (IFNULL(pa.`reference`, \'\') = \'\', p.`reference`, pa.`reference`) AS reference, 
       IF (IFNULL(pa.`supplier_reference`, \'\') = \'\', p.`supplier_reference`, pa.`supplier_reference`) AS supplier_reference, 
       IF (IFNULL(pa.`weight`, 0) = \'\', p.`weight`, pa.`weight`) AS weight_attribute,
       IF (IFNULL(pa.`ean13`, \'\') = \'\', p.`ean13`, pa.`ean13`) AS ean13
       FROM `'._DB_PREFIX_.'cart_product` cp
       LEFT JOIN `'._DB_PREFIX_.'product` p ON p.`id_product` = cp.`id_product`
       LEFT JOIN `'._DB_PREFIX_.'product_lang` pl ON (p.`id_product` = pl.`id_product` AND pl.`id_lang` = '.intval($this->id_lang).')
       LEFT JOIN `'._DB_PREFIX_.'product_attribute` pa ON (pa.`id_product_attribute` = cp.`id_product_attribute`)
       LEFT JOIN `'._DB_PREFIX_.'tax` t ON (t.`id_tax` = p.`id_tax`)
       LEFT JOIN `'._DB_PREFIX_.'tax_lang` tl ON (t.`id_tax` = tl.`id_tax` AND tl.`id_lang` = '.intval($this->id_lang).')
       LEFT JOIN `'._DB_PREFIX_.'product_attribute_image` pai ON (pai.`id_product_attribute` = cp.`id_product_attribute`)
       LEFT JOIN `'._DB_PREFIX_.'image` i ON (i.`id_product` = cp.`id_product` AND (IF(pai.`id_image`, pai.`id_image` = i.`id_image`, i.`cover` = 1)))
       LEFT JOIN `'._DB_PREFIX_.'image_lang` il ON (i.`id_image` = il.`id_image` AND il.`id_lang` = '.intval($this->id_lang).')
       LEFT JOIN `'._DB_PREFIX_.'category_lang` cl ON (p.`id_category_default` = cl.`id_category` AND cl.`id_lang` = '.intval($this->id_lang).')
       WHERE `id_cart` = '.intval($this->id).'
       '.($id_product ? ' AND cp.`id_product` = '.intval($id_product) : '').'
       AND p.`id_product` IS NOT NULL
       GROUP BY unique_id
       ORDER BY cp.date_add ASC';

       // ...
       return $this->_products;
   }


après IF (IFNULL(pa.`ean13`, \'\') = \'\', p.`ean13`, pa.`ean13`) AS ean13
ajouter: , cl.name as categoryname

dans shopping-cart.tpl oi shopping-cart-line.tpl, utiliser:
{$products.categoryname}

@++

Link to comment
Share on other sites

Cool ça marche nickel.

Et si je voulais récupérer qu'une seule valeur d'une des caractéristiques (dans mon cas la valeur de la caractéristique "metrage" pour l'inserer dans une formule simple genre {$product.cart_quantity*$feature.id_feature_value} si et seulement si cette caractéristique existe pour le produit ????

Un grand merci Cedric

Link to comment
Share on other sites

soit $product.features[0].id_feature_value, où 0 correspond à l'index de votre métrage



soit

{assign name=myvalue value=0 }
{foreach from=$product.features item=feature}
{if $feature.id_feature==} 
  {assign name=myvalue value=$feature.id_feature_value}
{/if}
{/foreach}



ex: = 1[/code]

Link to comment
Share on other sites

Je sens bien ce truc !!!

{$product.cart_quantity*$product.features[11].id_feature_value}



Le problème c'est que ça me divise par l'ID de ma caractéristique et non pas par la valeur de celle ci
J'ai essayé avec

 $product.features[11].feature_value

et

$product.features[11].value_feature_value

mais ça marche pas aussi bien :-(

Je brûle

En tout cas la piste est magique

MERCI

Link to comment
Share on other sites

oui ca devient plus compliqué, désolé de pas vérifier les valeurs avant de les soumettre par manque de temps.

Dans Product.php (/classes/product.php) cherche la fonction:

   static public function getFeaturesStatic($id_product)
   {
       return Db::getInstance()->ExecuteS('
       SELECT id_feature, id_product, id_feature_value
       FROM `'._DB_PREFIX_.'feature_product`
       WHERE `id_product` = '.intval($id_product));
   }



que tu remplaces par

   static public function getFeaturesStatic($id_product)
   {
       return Db::getInstance()->ExecuteS('
       SELECT fp.id_feature, fp.id_product, fp.id_feature_value, fv.custom
       FROM `'._DB_PREFIX_.'feature_product` fp, `'._DB_PREFIX_.'feature_value` fv
       WHERE fp.id_feature_value=fv.id_feature_value and  fp.`id_product` = '.intval($id_product));
   }



ensuite, au lieu d'appeler id_feature_value, tu appelles custom.

Mais bon ca marchera que si tu utilises des valeurs particulières dans des fiches.
Sinon c'est

   static public function getFeaturesStatic($id_product)
   {
       global $cookie;
       return Db::getInstance()->ExecuteS('
       SELECT fp.id_feature, fp.id_product, fp.id_feature_value, fv.value
       FROM `'._DB_PREFIX_.'feature_product` fp, `'._DB_PREFIX_.'feature_value_lang` fv
       WHERE fv.id_lang='.$cookie->id_lang.' and fp.id_feature_value=fv.id_feature_value and fp.`id_product` = '.intval($id_product));
   }


ensuite, au lieu d'appeler id_feature_value, tu appelles value.

Link to comment
Share on other sites

Dommage

ça m'allait bien cette formule, je vais essayé la tienne.

Sinon avec un truc du genre :

{if $features}
  {foreach from=$features item=feature}
      {if $feature.name=='metrage' && $feature.value!='' }

{if $product.active AND ($product.allow_oosp OR $product.stock_quantity > 0)}

Soit  {$product.cart_quantity*$feature.value} m²
    {else} ND


qu'est-ce qui cloche ???

Link to comment
Share on other sites

Houla ce que tu me propose ça ressemble pas à ça chez moi. Et quelles implication il y aura ailleurs ?
Si je pouvais faire sans toucher au core ça m'irai bien !!!

Voilà ma classe Product, je vais quand m^me essayer

static public function getFeaturesStatic($id_product)
   {
       return Db::getInstance()->ExecuteS('
       SELECT id_feature, id_product, id_feature_value
       FROM `'._DB_PREFIX_.'feature_product`
       WHERE `id_product` = '.intval($id_product));
   }

Link to comment
Share on other sites

{$product.cart_quantity*$custom[11]} ça marche pas après ta modif de classe.
{$product.cart_quantity*$product.custom[11]} marche pas non plus

{$product.cart_quantity*$product.custom[11].custom} Nada

Je suis sur que ta methode précédente est une bonne solution. Il faudrait juste pour voir récupérer ces "lhgqljhgfdjqhg" de variable quelque part. Là elles sont pas présentes dans le tpl meme après ta modif

ou j'ai rien compris (ce qui est ma foi fort possible ;-) )

Merci encore

Link to comment
Share on other sites

YESSSSSSS Merci Cedric, t'es un as !

Alors the good solution pour intégrer une caractéristique dans le panier récapitulatif

TUTORIEL


1/ incorporer ce code dans /classe/Product.php

static public function getFeaturesStatic($id_product)
   {
       global $cookie;
       return Db::getInstance()->ExecuteS('
       SELECT fp.id_feature, fp.id_product, fp.id_feature_value, fv.value
       FROM `'._DB_PREFIX_.'feature_product` fp, `'._DB_PREFIX_.'feature_value_lang` fv
       WHERE fv.id_lang='.$cookie->id_lang.' and fp.id_feature_value=fv.id_feature_value and fp.`id_product` = '.intval($id_product));
   } 



à la place de celui placé en dessous de

static public function getFeaturesStatic($id_product)



2/ ensuite il faut aller dans
/theme/votretheme/shopping-cart-product-line.tpl

et incorporer un code du genre

{$product.cart_quantity*$product.features[3].value}

avec comme numéro l'ID de votre caractéristique.

Chez moi ça donne ça:

   {if $product.active AND ($product.allow_oosp OR $product.stock_quantity > 0)}

{l s='pour'}  {$product.cart_quantity*$product.features[3].value} {l s=' m²'}{l s='(attention aux coupes : prévoir  ±5 à 10%)'}{else}{l s=''}{/if}




3) si vous voulez créer une colonne pour incorporer votre résultat ça se passe dans shopping-cart.tpl

et c'est TROP COOL de la part de Cédric.

mille mercis

Link to comment
Share on other sites

AU SECOUUUUUUUUUUUUUUUUUUUURS 8

En fait ça marche pas !
Je m'en suis aperçu en testant sur de nombreux produits

Voilà ou le bas blesse :

Avec

$product.features[4].value

il affiche par exemple le 2.1 de la feature 13 ET NON PAS LA VALEURS DE MON id_feature => "21"

Dans les variables (qui s'affichent avec {debug} )

PRODUIT "1"

features => Array (14)
   0 => Array (4)
     id_feature => "8"
     id_product => "1"
     id_feature_value => "33"
     value => "Stratifié HDF-3L "
   1 => Array (4)
     id_feature => "7"
     id_product => "1"
     id_feature_value => "29"
     value => "Densifié"
   2 => Array (4)
     id_feature => "9"
     id_product => "1"
     id_feature_value => "52"
     value => "Flottante"
   3 => Array (4)
     id_feature => "6"
     id_product => "1"
     id_feature_value => "27"
     value => "Ambre"
4 => Array (4)
     id_feature => "11"
     id_product => "1"
     id_feature_value => "41"
     value => "1.58"
   5 => Array (4)
     etc...
13 => Array (4)
     id_feature => "21"
     id_product => "1"
     id_feature_value => "122"
     value => "2.1"



MAIS AVEC UN AUTRE PRODUIT "2"

features => Array (3)
   0 => Array (4)
     id_feature => "15"
     id_product => "13"
     id_feature_value => "61"
     value => "seau de 6 kg"
   1 => Array (4)
     id_feature => "11"
     id_product => "13"
     id_feature_value => "114"
     value => "6"
   2 => Array (4)
     id_feature => "21"
     id_product => "13"
     id_feature_value => "123"
     value => "12

"

LA VALEUR est bien présente mais pas dans la même feature. J'ai essayé avec

$product.id_features[21].value



Et ça ne fonctionne pas.

Merci si vous me sortez de ce mauvais pas ! ou expliquez moi pourquoi ça ne fonctionne pas !!!!!


a+

Link to comment
Share on other sites

Salut à tous,

La solution a été donnée en privée, du fait de la complexité de la situation et surtout de la spécificité.

Dans Product.php (/classes/product.php) cherche la fonction:

   static public function getFeaturesStatic($id_product)
   {
       global $cookie;
       return Db::getInstance()->ExecuteS('
       SELECT fp.id_feature, fp.id_product, fp.id_feature_value, fv.value, fv.custom, fl.name
       FROM `'._DB_PREFIX_.'feature_product` fp, `'._DB_PREFIX_.'feature_value_lang` fv, `'._DB_PREFIX_.'feature_lang` fl
       WHERE fv.id_lang='.$cookie->id_lang.' and fp.id_feature_value=fv.id_feature_value and fp.`id_product` = '.intval($id_product).' and fl.id_feature=fp.id_feature and fl.id_lang=2');

   /*
       return Db::getInstance()->ExecuteS('
       SELECT id_feature, id_product, id_feature_value
       FROM `'._DB_PREFIX_.'feature_product`
       WHERE `id_product` = '.intval($id_product));
   */
   }


On obtient donc un tableau de caractéristique avec pour chacune des caractéristiques associées au produit:
son nom, sa valeur par defaut et sa valeur personnalisée.

Ensuite dans le tpl, utiliser le code suivant par exemple, la caractéristique qui sert ici c'est metrage. Cette méthode permet en plus de ne pas avoir la même liste pour tous les produits.

{assign name=myvalue value=0 }
{foreach from=$product.features item=feature}
{if $feature.name=='metrage'}  
  {assign name=myvalue value=$feature.value}
{/if}
{/foreach} 
ici on exploite {$myvalue}



@++

Link to comment
Share on other sites

  • 4 years later...

bonjour Cedric

 

je suis tombé sur ce sujet et vos discussion m'interesse beaucoup.

je suis sur 1.6.0.9, je veux simplement de replacer le colonne "disponibilité" par une caractéristique que j'ai crée (marque par ex.)

j'ai essayé de regarder les fichiers tpl et php mais je n'arrive pas de trouver le meme chose...

pouvez vous me donner un peu de detail?

 

merci. 

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