activ-developpement.net Posted April 30, 2011 Share Posted April 30, 2011 Bonjour,J'ai remarqué que plusieurs membres de la communauté souhaitaient afficher la listedes couleurs disponibles par produit dans la page catégorie, je vous propose donc une petite astuce pour la mise en œuvre de cette fonctionnalité dans prestashop 1.4.Cette fonctionnalité permet aussi au passage de la souris sur la couleur, d'afficher l'image associée.Modifier le fichier controllers/CategoryController.phpEn cas de mise à jour de prestashop vous perdrez la modification, il faudra donc la rajouter à la main.Après la ligne $cat_products = $this->category->getProducts((int)(self::$cookie->id_lang), (int)($this->p), (int)($this->n), $this->orderBy, $this->orderWay); Ajouter : /* @TODO VERU CORE PRESTASHOP */ foreach ($cat_products as $key => $cat_product) { $product = new Product(intval($cat_product['id_product']), true, intval(self::$cookie->id_lang)); $colors = array(); $attributesGroups = Db::getInstance()->ExecuteS(' SELECT pai.`id_image`, ag.`id_attribute_group`, ag.`is_color_group`, agl.`name` AS group_name, agl.`public_name` AS public_group_name, a.`id_attribute`, al.`name` AS attribute_name, a.`color` AS attribute_color, pa.`id_product_attribute`, pa.`quantity`, pa.`price`, pa.`ecotax`, pa.`weight`, pa.`default_on`, pa.`reference`, pa.`unit_price_impact`, pa.`minimal_quantity` FROM `ps_product_attribute` pa LEFT JOIN `ps_product_attribute_combination` pac ON pac.`id_product_attribute` = pa.`id_product_attribute` LEFT JOIN `ps_product_attribute_image` pai ON pai.`id_product_attribute` = pa.`id_product_attribute` LEFT JOIN `ps_attribute` a ON a.`id_attribute` = pac.`id_attribute` LEFT JOIN `ps_attribute_group` ag ON ag.`id_attribute_group` = a.`id_attribute_group` LEFT JOIN `ps_attribute_lang` al ON a.`id_attribute` = al.`id_attribute` LEFT JOIN `ps_attribute_group_lang` agl ON ag.`id_attribute_group` = agl.`id_attribute_group` WHERE pa.`id_product` = '.(int)($product->id).' AND al.`id_lang` = '.self::$cookie->id_lang.' AND agl.`id_lang` = '.self::$cookie->id_lang.' AND ag.`is_color_group` = 1 GROUP BY attribute_color ORDER BY agl.`public_name`, al.`name`'); if (Db::getInstance()->numRows()) { foreach ($attributesGroups AS $k => $row) { /* Color management */ if (isset($row['attribute_color']) AND $row['attribute_color'] AND $row['id_attribute_group'] == $product->id_color_default) { $colors[$row['id_attribute']]['value'] = $row['attribute_color']; $colors[$row['id_attribute']]['name'] = $row['attribute_name']; $colors[$row['id_attribute']]['id_image'] =(($row['id_image'] != NULL) ? intval($row['id_image']) : -1); } } } $cat_products[$key]['colors'] = $colors; } modifier le fichier product-list.tpl <!-- Affiche la liste des coloris disponibles pour le produit--> {if !empty($product.colors)} {foreach from=$product.colors key=id_attribute item=color} {/foreach} {/if} pour le onMouseover toujours dans le fichier product-list ajouter l'attribut id à l'image du produit: Link to comment Share on other sites More sharing options...
azurshop Posted April 30, 2011 Share Posted April 30, 2011 Bonjour,Merci de ce message et le partage de cette fonctionnalité très utile.Souhaitons que la TeamPresta décide d'intégrer directement dans son code natif cette fonctionnalité.Merci encore. Link to comment Share on other sites More sharing options...
Arnaud Drieux Posted May 2, 2011 Share Posted May 2, 2011 Tout dabord merci de t'être interressé à ce petit ajout qui pourrait nous rendre la vie plus facile.Je viens de tester en local et pas à pas ton code, mais problème, je n'ai rien d'afficher sur FO. J'ai bien ajouté le code dans Category Controller, et j'ai mis le second code dans le right block des produits de la liste, mais rien n'apparait...BizarreEn tout cas merci encore Link to comment Share on other sites More sharing options...
Arnaud Drieux Posted May 2, 2011 Share Posted May 2, 2011 Finalement j'ai un peu cherché et j'ai reussi ( en ce qui concerne l'affichage) Dans firebug le code était bien présent, mais les balises étaient cachée...bref du coup pour afficher les couleurs toujours dans product-list.tpl : <!-- Affiche la liste des coloris disponibles pour le produit--> {if !empty($product.colors)} {foreach from=$product.colors key=id_attribute item=color} {/foreach} {/if} maintenant je vais essayer aussi de mon coté pour que les couleurs soient prises en comptent lors du click et de l'envoie au panier, mais je promet rien, je suis pas dev :s Link to comment Share on other sites More sharing options...
Arnaud Drieux Posted May 2, 2011 Share Posted May 2, 2011 J'ai rajouté le onclick : <!-- Affiche la liste des coloris disponibles pour le produit--> {if !empty($product.colors)} {foreach from=$product.colors key=id_attribute item=color} {/foreach} {/if} mais lorsque je clique sur les couleurs, firebug mais met un jolie "updateColorSelect is not defined". Pourtant dans la fiche produit, c'est le même code....je comprend pas tout. Link to comment Share on other sites More sharing options...
Arnaud Drieux Posted May 4, 2011 Share Posted May 4, 2011 Quelqu'un aurait-il une idée?Up Link to comment Share on other sites More sharing options...
MaartenPol Posted May 21, 2011 Share Posted May 21, 2011 Toute une idée pourquoi il ne fonctionne pas dans 1.4.1.0? Link to comment Share on other sites More sharing options...
AkrOpad Posted November 27, 2011 Share Posted November 27, 2011 Si ça peut aider ! Test sous Prestashop 1.4.5.1 Dans override/controllers/ créez un fichier CategoryController.php Copiez ceci dans CategoryController.php : <?php class CategoryController extends CategoryControllerCore { public function productListAssign() { $hookExecuted = false; Module::hookExec('productListAssign', array('nbProducts' => &$this->nbProducts, 'catProducts' => &$this->cat_products, 'hookExecuted' => &$hookExecuted)); if(!$hookExecuted) // The hook was not executed, standard working { self::$smarty->assign('categoryNameComplement', ''); $this->nbProducts = $this->category->getProducts(NULL, NULL, NULL, $this->orderBy, $this->orderWay, true); $this->pagination((int)$this->nbProducts); // Pagination must be call after "getProducts" $this->cat_products = $this->category->getProducts((int)(self::$cookie->id_lang), (int)($this->p), (int)($this->n), $this->orderBy, $this->orderWay); /* @TODO VERU CORE PRESTASHOP */ foreach ($this->cat_products as $key => $cat_product) { $product = new Product(intval($cat_product['id_product']), true, intval(self::$cookie->id_lang)); $colors = array(); $groupcolor = 1; /* O pour afficher aussi les produits hors stock*/ $prodquantity = 1; $attributesGroups = Db::getInstance()->ExecuteS(' SELECT pai.`id_image`, ag.`id_attribute_group`, ag.`is_color_group`, agl.`name` AS group_name, agl.`public_name` AS public_group_name, a.`id_attribute`, al.`name` AS attribute_name, a.`color` AS attribute_color, pa.`id_product_attribute`, pa.`quantity`, pa.`price`, pa.`ecotax`, pa.`weight`, pa.`default_on`, pa.`reference`, pa.`unit_price_impact`, pa.`minimal_quantity` FROM `' . _DB_PREFIX_ . 'product_attribute` pa LEFT JOIN `' . _DB_PREFIX_ . 'product_attribute_combination` pac ON pac.`id_product_attribute` = pa.`id_product_attribute` LEFT JOIN `' . _DB_PREFIX_ . 'product_attribute_image` pai ON pai.`id_product_attribute` = pa.`id_product_attribute` LEFT JOIN `' . _DB_PREFIX_ . 'attribute` a ON a.`id_attribute` = pac.`id_attribute` LEFT JOIN `' . _DB_PREFIX_ . 'attribute_group` ag ON ag.`id_attribute_group` = a.`id_attribute_group` LEFT JOIN `' . _DB_PREFIX_ . 'attribute_lang` al ON a.`id_attribute` = al.`id_attribute` LEFT JOIN `' . _DB_PREFIX_ . 'attribute_group_lang` agl ON ag.`id_attribute_group` = agl.`id_attribute_group` WHERE pa.`id_product` = '.$cat_product['id_product'].' AND al.`id_lang` = '.self::$cookie->id_lang.' AND agl.`id_lang` = '.self::$cookie->id_lang.' AND ag.`is_color_group` = '.$groupcolor.' AND pa.quantity >= '.$prodquantity.' '); if (Db::getInstance()->numRows()) { foreach ($attributesGroups AS $k => $row) { /* Color management */ if (isset($row['attribute_color']) AND $row['attribute_color'] AND $row['id_attribute_group'] == $product->id_color_default) { $colors[$row['id_attribute']]['value'] = $row['attribute_color']; $colors[$row['id_attribute']]['name'] = $row['attribute_name']; $colors[$row['id_attribute']]['id_image'] =(($row['id_image'] != NULL) ? intval($row['id_image']) : -1); } } } $this->cat_products[$key]['colors'] = $colors; } } else // Hook executed, use the override $this->pagination((int)$this->nbProducts); // Pagination must be call after "getProducts" self::$smarty->assign('nb_products', (int)$this->nbProducts); } } ?> Et Copiez ceci dans themes/votre_theme/product-list.tpl : Remplacer le code de l'image par celui-ci : <img id="img_{$product.id_product}" src="{$link->getImageLink($product.link_rewrite, $product.id_image)}" alt="{$product.legend|escape:'htmlall':'UTF-8'}" height="{$homeSize.height}" width="{$homeSize.width}" /> {if isset($product.colors) && $product.colors} <!-- colors --> <p> {foreach from=$product.colors key='id_attribute' item='color'} <a id="{$product.id_product}-{$color.id_image}" class="color_pick" onclick="document.getElementById('img_{$product.id_product}').src='{$img_prod_dir}{$product.id_product}-{$color.id_image}.jpg'" title="{$color.name}"> <img src="{$img_col_dir}{$id_attribute}.jpg" alt="{$color.name}" /> </a> {/foreach} </p> {/if} Link to comment Share on other sites More sharing options...
J. Danse Posted November 27, 2011 Share Posted November 27, 2011 Je pense avoir réalisé la demande il y a un an (lors d'un test d'entretien où j'ai pour la première fois appris le nom "PrestaShop" et installé la solution). C'était en 1.3.5, mais ça doit pas être sorcier de vous aider vu votre avancement. Je vais jeter un œil à ça Link to comment Share on other sites More sharing options...
activ-developpement.net Posted November 27, 2011 Author Share Posted November 27, 2011 Bonjour à tous, Je viens de remarquer que plusieurs d'entre vous butait un petit peu sur l'astuce. Depuis prestashop 1.4.5 il est en effet plus propre de surchager la méthode avec des classes override. Après avoir effectué différent test de perf il est aussi préférable de passer par une méthode static( cela évite d'exécuter à chaque requête http,la requête sql). Sur prestashop 1.4.1 Dans la classe Product methode : getProductProperties($id_lang, $row) Après $row['attachments'] = ((!isset($row['cache_has_attachments']) OR $row['cache_has_attachments']) ? Product::getAttachmentsStatic((int)($id_lang), $row['id_product']) : array()); Ajoutez /* ajout pour les couleur dans la liste des produits */ $colors = array(); $attributesGroups = Db::getInstance()->ExecuteS(' SELECT pai.`id_image`, ag.`id_attribute_group`, ag.`is_color_group`, agl.`name` AS group_name, agl.`public_name` AS public_group_name, a.`id_attribute`, al.`name` AS attribute_name, a.`color` AS attribute_color, pa.`id_product_attribute`, pa.`quantity`, pa.`price`, pa.`ecotax`, pa.`weight`, pa.`default_on`, pa.`reference`, pa.`unit_price_impact`, pa.`minimal_quantity` FROM `ps_product_attribute` pa LEFT JOIN `ps_product_attribute_combination` pac ON pac.`id_product_attribute` = pa.`id_product_attribute` LEFT JOIN `ps_product_attribute_image` pai ON pai.`id_product_attribute` = pa.`id_product_attribute` LEFT JOIN `ps_attribute` a ON a.`id_attribute` = pac.`id_attribute` LEFT JOIN `ps_attribute_group` ag ON ag.`id_attribute_group` = a.`id_attribute_group` LEFT JOIN `ps_attribute_lang` al ON a.`id_attribute` = al.`id_attribute` LEFT JOIN `ps_attribute_group_lang` agl ON ag.`id_attribute_group` = agl.`id_attribute_group` WHERE pa.`id_product` = '.(int)$row['id_product'].' AND al.`id_lang` = '.(int)($id_lang).' AND agl.`id_lang` = '.(int)($id_lang).' AND ag.`is_color_group` = 1 GROUP BY attribute_color ORDER BY agl.`public_name`, al.`name`'); if (Db::getInstance()->numRows()) { foreach ($attributesGroups AS $k => $rowcolo) { /* Color management */ if (isset($rowcolo['attribute_color']) AND $rowcolo['attribute_color'] ) { $colors[$rowcolo['id_attribute']]['value'] = $rowcolo['attribute_color']; $colors[$rowcolo['id_attribute']]['name'] = $rowcolo['attribute_name']; $colors[$rowcolo['id_attribute']]['id_image'] =(($rowcolo['id_image'] != NULL) ? intval($rowcolo['id_image']) : -1); } } } $row['colors'] = $colors; Comme indiqué plus haut il est préférable de surcharger la méthode avec "override" en créant une nouvelle classe dans le répertoire. Astuce mis en place sur le site www.catbibi.com. 1 Link to comment Share on other sites More sharing options...
justweb Posted November 29, 2011 Share Posted November 29, 2011 Bonjour, Comment faire pour afficher tous les groupes d'attributs ou un groupe spécifique ? (ex : taille, capacité..) merci Link to comment Share on other sites More sharing options...
justweb Posted November 30, 2011 Share Posted November 30, 2011 up Link to comment Share on other sites More sharing options...
AkrOpad Posted December 1, 2011 Share Posted December 1, 2011 Bonjour, Comment faire pour afficher tous les groupes d'attributs ou un groupe spécifique ? (ex : taille, capacité..) merci Bonjour, pour afficher un group en particulier. Test sous Prestashop 1.4.5.1 Dans override/classes/ créez un fichier Category.php Copiez ceci dans Category.php : <?php class Category extends CategoryCore { public function getProducts($id_lang, $p, $n, $orderBy = NULL, $orderWay = NULL, $getTotal = false, $active = true, $random = false, $randomNumberProducts = 1, $checkAccess = true) { global $cookie; if (!$checkAccess OR !$this->checkAccess($cookie->id_customer)) return false; if ($p < 1) $p = 1; if (empty($orderBy)) $orderBy = 'position'; else /* Fix for all modules which are now using lowercase values for 'orderBy' parameter */ $orderBy = strtolower($orderBy); if (empty($orderWay)) $orderWay = 'ASC'; if ($orderBy == 'id_product' OR $orderBy == 'date_add') $orderByPrefix = 'p'; elseif ($orderBy == 'name') $orderByPrefix = 'pl'; elseif ($orderBy == 'manufacturer') { $orderByPrefix = 'm'; $orderBy = 'name'; } elseif ($orderBy == 'position') $orderByPrefix = 'cp'; if ($orderBy == 'price') $orderBy = 'orderprice'; if (!Validate::isBool($active) OR !Validate::isOrderBy($orderBy) OR !Validate::isOrderWay($orderWay)) die(Tools::displayError()); $id_supplier = (int) (Tools::getValue('id_supplier')); /* Return only the number of products */ if ($getTotal) { $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow(' SELECT COUNT(cp.`id_product`) AS total FROM `' . _DB_PREFIX_ . 'product` p LEFT JOIN `' . _DB_PREFIX_ . 'category_product` cp ON p.`id_product` = cp.`id_product` WHERE cp.`id_category` = ' . (int) ($this->id) . ($active ? ' AND p.`active` = 1' : '') . ' ' . ($id_supplier ? 'AND p.id_supplier = ' . (int) ($id_supplier) : '')); return isset($result) ? $result['total'] : 0; } $sql = ' SELECT p.*, pa.`id_product_attribute`, pl.`description`, pl.`description_short`, pl.`available_now`, pl.`available_later`, pl.`link_rewrite`, pl.`meta_description`, pl.`meta_keywords`, pl.`meta_title`, pl.`name`, i.`id_image`, il.`legend`, m.`name` AS manufacturer_name, tl.`name` AS tax_name, t.`rate`, cl.`name` AS category_default, DATEDIFF(p.`date_add`, DATE_SUB(NOW(), INTERVAL ' . (Validate::isUnsignedInt(Configuration::get('PS_NB_DAYS_NEW_PRODUCT')) ? Configuration::get('PS_NB_DAYS_NEW_PRODUCT') : 20) . ' DAY)) > 0 AS new, (p.`price` * IF(t.`rate`,((100 + (t.`rate`))/100),1)) AS orderprice FROM `' . _DB_PREFIX_ . 'category_product` cp LEFT JOIN `' . _DB_PREFIX_ . 'product` p ON p.`id_product` = cp.`id_product` LEFT JOIN `' . _DB_PREFIX_ . 'product_attribute` pa ON (p.`id_product` = pa.`id_product` AND default_on = 1) LEFT JOIN `' . _DB_PREFIX_ . 'category_lang` cl ON (p.`id_category_default` = cl.`id_category` AND cl.`id_lang` = ' . (int) ($id_lang) . ') LEFT JOIN `' . _DB_PREFIX_ . 'product_lang` pl ON (p.`id_product` = pl.`id_product` AND pl.`id_lang` = ' . (int) ($id_lang) . ') LEFT JOIN `' . _DB_PREFIX_ . 'image` i ON (i.`id_product` = p.`id_product` AND i.`cover` = 1) LEFT JOIN `' . _DB_PREFIX_ . 'image_lang` il ON (i.`id_image` = il.`id_image` AND il.`id_lang` = ' . (int) ($id_lang) . ') LEFT JOIN `' . _DB_PREFIX_ . 'tax_rule` tr ON (p.`id_tax_rules_group` = tr.`id_tax_rules_group` AND tr.`id_country` = ' . (int) Country::getDefaultCountryId() . ' AND tr.`id_state` = 0) LEFT JOIN `' . _DB_PREFIX_ . 'tax` t ON (t.`id_tax` = tr.`id_tax`) LEFT JOIN `' . _DB_PREFIX_ . 'tax_lang` tl ON (t.`id_tax` = tl.`id_tax` AND tl.`id_lang` = ' . (int) ($id_lang) . ') LEFT JOIN `' . _DB_PREFIX_ . 'manufacturer` m ON m.`id_manufacturer` = p.`id_manufacturer` WHERE cp.`id_category` = ' . (int) ($this->id) . ($active ? ' AND p.`active` = 1' : '') . ' ' . ($id_supplier ? 'AND p.id_supplier = ' . (int) $id_supplier : ''); if ($random === true) { $sql .= ' ORDER BY RAND()'; $sql .= ' LIMIT 0, ' . (int) ($randomNumberProducts); } else { $sql .= ' ORDER BY ' . (isset($orderByPrefix) ? $orderByPrefix . '.' : '') . '`' . pSQL($orderBy) . '` ' . pSQL($orderWay) . ' LIMIT ' . (((int) ($p) - 1) * (int) ($n)) . ',' . (int) ($n); } $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS($sql); foreach ($result as $nb => $resultat) { /* id_attribute_group */ $id_du_groupe = 4; $replace_sql = 'SELECT al.name FROM `'._DB_PREFIX_.'product_attribute` pa JOIN `'._DB_PREFIX_.'product_attribute_combination` pac ON (pac.`id_product_attribute` = pa.`id_product_attribute`) JOIN `'._DB_PREFIX_.'attribute_lang` al ON (al.`id_attribute` = pac.`id_attribute` AND al.`id_lang` = '.(int)($id_lang).') JOIN `'._DB_PREFIX_.'attribute` a ON (a.`id_attribute_group` = '.$id_du_groupe.' AND a.`id_attribute` = pac.`id_attribute`) WHERE pa.`id_product` = '.(int)($resultat['id_product']).' AND pa.`quantity` >= 1'; $attributs = Db::getInstance()->ExecuteS($replace_sql); foreach($attributs as $attributs_tab){ $result[$nb]['attribute'][] = $attributs_tab['name']; } } if ($orderBy == 'orderprice') Tools::orderbyPrice($result, $orderWay); if (!$result) return false; return Product::getProductsProperties($id_lang, $result); } } ?> Et Copiez ceci dans themes/votre_theme/product-list.tpl : entre <ul> {foreach from=$products item=product name=products} ... <li> ... et </li> {/foreach} </ul> <p> {foreach from=$product.attribute key='id_attribute' item='attribute'} {$attribute} {/foreach} </p> Pour trouver l'id du groupe : dans le BO onglet => Attributs et groupes éditez l'attribut désiré, dans l'url cherchez &id_attribute_group= Reste à coder un lien avec du javascript. 2 Link to comment Share on other sites More sharing options...
justweb Posted December 2, 2011 Share Posted December 2, 2011 merci bcp, je vais tester cela très rapidement Link to comment Share on other sites More sharing options...
justweb Posted December 5, 2011 Share Posted December 5, 2011 Hello Ichigok, Je viens de tester ta solution et rien ne s'affiche. J'ai bien renseigné l'id dans la classe. Une idée ? Link to comment Share on other sites More sharing options...
AkrOpad Posted December 5, 2011 Share Posted December 5, 2011 Hello Ichigok, Je viens de tester ta solution et rien ne s'affiche. J'ai bien renseigné l'id dans la classe. Une idée ? Bonjour, L'id de quel attribut ? Pour la couleur il faut activer la Palette de coloris dans les déclinaisons. Link to comment Share on other sites More sharing options...
justweb Posted December 5, 2011 Share Posted December 5, 2011 Bonjour, L'id de quel attribut ? Pour la couleur il faut activer la Palette de coloris dans les déclinaisons. bonjour, dans ta classe, j'ai mis l'id attribut 2 qui correspond à la capacité par exemple. /* id_attribute_group */ $id_du_groupe = 2; Ensuite, dans mon tpl, j'ai mis le m^me code que toi et rien ne s'affiche... ++ Link to comment Share on other sites More sharing options...
AkrOpad Posted December 6, 2011 Share Posted December 6, 2011 bonjour, dans ta classe, j'ai mis l'id attribut 2 qui correspond à la capacité par exemple. /* id_attribute_group */ $id_du_groupe = 2; Ensuite, dans mon tpl, j'ai mis le m^me code que toi et rien ne s'affiche... ++ Si le groupe d'attributs a bien des déclinaisons et qu'elles ont été ajoutées dans la fiche du produit et un stock supérieur à 0.... Essayez ce product-list.tpl pour voir si le problème vient de là. {if isset($products)} <!-- Products list --> <ul id="product_list" class="clear"> {foreach from=$products item=product name=products} <li class="ajax_block_product {if $smarty.foreach.products.first}first_item{elseif $smarty.foreach.products.last}last_item{/if} {if $smarty.foreach.products.index % 2}alternate_item{else}item{/if} clearfix"> <div class="center_block"> <a href="{$product.link|escape:'htmlall':'UTF-8'}" class="product_img_link" title="{$product.name|escape:'htmlall':'UTF-8'}"> <img src="{$link->getImageLink($product.link_rewrite, $product.id_image, 'home')}" alt="{$product.legend|escape:'htmlall':'UTF-8'}" {if isset($homeSize)} width="{$homeSize.width}" height="{$homeSize.height}"{/if} /></a> <h3>{if isset($product.new) && $product.new == 1}<span class="new">{l s='New'}</span>{/if}<a href="{$product.link|escape:'htmlall':'UTF-8'}" title="{$product.name|escape:'htmlall':'UTF-8'}">{$product.name|truncate:35:'...'|escape:'htmlall':'UTF-8'}</a></h3> <p class="product_desc"><a href="{$product.link|escape:'htmlall':'UTF-8'}" title="{$product.description_short|truncate:360:'...'|strip_tags:'UTF-8'|escape:'htmlall':'UTF-8'}">{$product.description_short|truncate:360:'...'|strip_tags:'UTF-8'}</a></p> </div> <div class="right_block"> {if isset($product.on_sale) && $product.on_sale && isset($product.show_price) && $product.show_price && !$PS_CATALOG_MODE}<span class="on_sale">{l s='On sale!'}</span> {elseif isset($product.reduction) && $product.reduction && isset($product.show_price) && $product.show_price && !$PS_CATALOG_MODE}<span class="discount">{l s='Reduced price!'}</span>{/if} {if isset($product.online_only) && $product.online_only}<span class="online_only">{l s='Online only!'}</span>{/if} {if (!$PS_CATALOG_MODE AND ((isset($product.show_price) && $product.show_price) || (isset($product.available_for_order) && $product.available_for_order)))} <div> {if isset($product.show_price) && $product.show_price && !isset($restricted_country_mode)}<span class="price" style="display: inline;">{if !$priceDisplay}{convertPrice price=$product.price}{else}{convertPrice price=$product.price_tax_exc}{/if}</span><br />{/if} {if isset($product.available_for_order) && $product.available_for_order && !isset($restricted_country_mode)}<span class="availability">{if ($product.allow_oosp || $product.quantity > 0)}{l s='Available'}{elseif (isset($product.quantity_all_versions) && $product.quantity_all_versions > 0)}{l s='Product available with different options'}{else}{l s='Out of stock'}{/if}</span>{/if} </div> {/if} {if $product.attribute} <p> {foreach from=$product.attribute key=id_attribute item=attribute name=attribute} {$attribute} {/foreach} </p> {/if} {if ($product.id_product_attribute == 0 || (isset($add_prod_display) && ($add_prod_display == 1))) && $product.available_for_order && !isset($restricted_country_mode) && $product.minimal_quantity <= 1 && $product.customizable != 2 && !$PS_CATALOG_MODE} {if ($product.allow_oosp || $product.quantity > 0)} <a class="button ajax_add_to_cart_button exclusive" rel="ajax_id_product_{$product.id_product|intval}" href="{$link->getPageLink('cart.php')}?add&id_product={$product.id_product|intval}{if isset($static_token)}&token={$static_token}{/if}" title="{l s='Add to cart'}">{l s='Add to cart'}</a> {else} <span class="exclusive">{l s='Add to cart'}</span> {/if} {/if} <a class="button" href="{$product.link|escape:'htmlall':'UTF-8'}" title="{l s='View'}">{l s='View'}</a> {if isset($comparator_max_item) && $comparator_max_item} <p class="compare"><input type="checkbox" class="comparator" id="comparator_item_{$product.id_product}" value="comparator_item_{$product.id_product}" {if isset($compareProducts) && in_array($product.id_product, $compareProducts)}checked{/if}/> <label for="comparator_item_{$product.id_product}">{l s='Select to compare'}</label></p> {/if} </div> </li> {/foreach} </ul> <!-- /Products list --> {/if} Link to comment Share on other sites More sharing options...
Cerise Posted December 10, 2011 Share Posted December 10, 2011 Hello ichigoK, Merci pour ton bout de code Il marche parfaitement en local sur une version 1.4.5. En revanche, j'ai un petit problème car j'insère l'attribut 4 correspond à "Taille". Et parfois, j'ai XS, Rose / XS, Orange, ect donc le code marque sous le produit : XS XS au lieu d'un seul XS. Aurais-tu une petite idée pour éviter les doublons ? Merci ! Link to comment Share on other sites More sharing options...
ckarone Posted January 20, 2012 Share Posted January 20, 2012 (edited) Petit déterrage, Pour que le code de @activ-developpement.net fonctionne, il faut modifier le préfixe des tables sinon rien ne s'affiche voici le code : /* ajout pour les couleur dans la liste des produits */ $colors = array(); $attributesGroups = Db::getInstance()->ExecuteS(' SELECT pai.`id_image`, ag.`id_attribute_group`, ag.`is_color_group`, agl.`name` AS group_name, agl.`public_name` AS public_group_name, a.`id_attribute`, al.`name` AS attribute_name, a.`color` AS attribute_color, pa.`id_product_attribute`, pa.`quantity`, pa.`price`, pa.`ecotax`, pa.`weight`, pa.`default_on`, pa.`reference`, pa.`unit_price_impact`, pa.`minimal_quantity` FROM `'._DB_PREFIX_.'product_attribute` pa LEFT JOIN `'._DB_PREFIX_.'product_attribute_combination` pac ON pac.`id_product_attribute` = pa.`id_product_attribute` LEFT JOIN `'._DB_PREFIX_.'product_attribute_image` pai ON pai.`id_product_attribute` = pa.`id_product_attribute` LEFT JOIN `'._DB_PREFIX_.'attribute` a ON a.`id_attribute` = pac.`id_attribute` LEFT JOIN `'._DB_PREFIX_.'attribute_group` ag ON ag.`id_attribute_group` = a.`id_attribute_group` LEFT JOIN `'._DB_PREFIX_.'attribute_lang` al ON a.`id_attribute` = al.`id_attribute` LEFT JOIN `'._DB_PREFIX_.'attribute_group_lang` agl ON ag.`id_attribute_group` = agl.`id_attribute_group` WHERE pa.`id_product` = '.(int)$row['id_product'].' AND al.`id_lang` = '.(int)($id_lang).' AND agl.`id_lang` = '.(int)($id_lang).' AND ag.`is_color_group` = 1 GROUP BY attribute_color ORDER BY agl.`public_name`, al.`name`'); if (Db::getInstance()->numRows()) { foreach ($attributesGroups AS $k => $rowcolo) { /* Color management */ if (isset($rowcolo['attribute_color']) AND $rowcolo['attribute_color'] ) { $colors[$rowcolo['id_attribute']]['value'] = $rowcolo['attribute_color']; $colors[$rowcolo['id_attribute']]['name'] = $rowcolo['attribute_name']; $colors[$rowcolo['id_attribute']]['id_image'] =(($rowcolo['id_image'] != NULL) ? intval($rowcolo['id_image']) : -1); } } } $row['colors'] = $colors; En suite dans le tlp voici le code : {if isset($product.colors) && $product.colors } <!-- colors --> Existe en couleur :<p class="pcolor"> {foreach from=$product.colors key='id_attribute' item='color' name='color'} <a id="{$product.id_product}-{$color.id_image}" class="color_pick" style="background: {$color.value};" onclick="document.getElementById('img_{$product.id_product}').src='{$img_prod_dir}{$product.id_product}-{$color.id_image}.jpg'" title="{$color.name}"> {if file_exists($col_img_dir|cat:$id_attribute|cat:'.jpg')}<img src="{$img_col_dir}{$id_attribute}.jpg" alt="{$color.name}" />{/if} </a> {/foreach} </p> {/if} Testé sur PS 1.4.6.2 et 1.4.7.3 Ckarone Edited May 9, 2012 by ckarone (see edit history) Link to comment Share on other sites More sharing options...
flo-imajean Posted February 10, 2012 Share Posted February 10, 2012 Bonjour, pour afficher un group en particulier. Test sous Prestashop 1.4.5.1 Dans override/classes/ créez un fichier Category.php Copiez ceci dans Category.php : <?php class Category extends CategoryCore { public function getProducts($id_lang, $p, $n, $orderBy = NULL, $orderWay = NULL, $getTotal = false, $active = true, $random = false, $randomNumberProducts = 1, $checkAccess = true) { global $cookie; if (!$checkAccess OR !$this->checkAccess($cookie->id_customer)) return false; if ($p < 1) $p = 1; if (empty($orderBy)) $orderBy = 'position'; else /* Fix for all modules which are now using lowercase values for 'orderBy' parameter */ $orderBy = strtolower($orderBy); if (empty($orderWay)) $orderWay = 'ASC'; if ($orderBy == 'id_product' OR $orderBy == 'date_add') $orderByPrefix = 'p'; elseif ($orderBy == 'name') $orderByPrefix = 'pl'; elseif ($orderBy == 'manufacturer') { $orderByPrefix = 'm'; $orderBy = 'name'; } elseif ($orderBy == 'position') $orderByPrefix = 'cp'; if ($orderBy == 'price') $orderBy = 'orderprice'; if (!Validate::isBool($active) OR !Validate::isOrderBy($orderBy) OR !Validate::isOrderWay($orderWay)) die(Tools::displayError()); $id_supplier = (int) (Tools::getValue('id_supplier')); /* Return only the number of products */ if ($getTotal) { $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow(' SELECT COUNT(cp.`id_product`) AS total FROM `' . _DB_PREFIX_ . 'product` p LEFT JOIN `' . _DB_PREFIX_ . 'category_product` cp ON p.`id_product` = cp.`id_product` WHERE cp.`id_category` = ' . (int) ($this->id) . ($active ? ' AND p.`active` = 1' : '') . ' ' . ($id_supplier ? 'AND p.id_supplier = ' . (int) ($id_supplier) : '')); return isset($result) ? $result['total'] : 0; } $sql = ' SELECT p.*, pa.`id_product_attribute`, pl.`description`, pl.`description_short`, pl.`available_now`, pl.`available_later`, pl.`link_rewrite`, pl.`meta_description`, pl.`meta_keywords`, pl.`meta_title`, pl.`name`, i.`id_image`, il.`legend`, m.`name` AS manufacturer_name, tl.`name` AS tax_name, t.`rate`, cl.`name` AS category_default, DATEDIFF(p.`date_add`, DATE_SUB(NOW(), INTERVAL ' . (Validate::isUnsignedInt(Configuration::get('PS_NB_DAYS_NEW_PRODUCT')) ? Configuration::get('PS_NB_DAYS_NEW_PRODUCT') : 20) . ' DAY)) > 0 AS new, (p.`price` * IF(t.`rate`,((100 + (t.`rate`))/100),1)) AS orderprice FROM `' . _DB_PREFIX_ . 'category_product` cp LEFT JOIN `' . _DB_PREFIX_ . 'product` p ON p.`id_product` = cp.`id_product` LEFT JOIN `' . _DB_PREFIX_ . 'product_attribute` pa ON (p.`id_product` = pa.`id_product` AND default_on = 1) LEFT JOIN `' . _DB_PREFIX_ . 'category_lang` cl ON (p.`id_category_default` = cl.`id_category` AND cl.`id_lang` = ' . (int) ($id_lang) . ') LEFT JOIN `' . _DB_PREFIX_ . 'product_lang` pl ON (p.`id_product` = pl.`id_product` AND pl.`id_lang` = ' . (int) ($id_lang) . ') LEFT JOIN `' . _DB_PREFIX_ . 'image` i ON (i.`id_product` = p.`id_product` AND i.`cover` = 1) LEFT JOIN `' . _DB_PREFIX_ . 'image_lang` il ON (i.`id_image` = il.`id_image` AND il.`id_lang` = ' . (int) ($id_lang) . ') LEFT JOIN `' . _DB_PREFIX_ . 'tax_rule` tr ON (p.`id_tax_rules_group` = tr.`id_tax_rules_group` AND tr.`id_country` = ' . (int) Country::getDefaultCountryId() . ' AND tr.`id_state` = 0) LEFT JOIN `' . _DB_PREFIX_ . 'tax` t ON (t.`id_tax` = tr.`id_tax`) LEFT JOIN `' . _DB_PREFIX_ . 'tax_lang` tl ON (t.`id_tax` = tl.`id_tax` AND tl.`id_lang` = ' . (int) ($id_lang) . ') LEFT JOIN `' . _DB_PREFIX_ . 'manufacturer` m ON m.`id_manufacturer` = p.`id_manufacturer` WHERE cp.`id_category` = ' . (int) ($this->id) . ($active ? ' AND p.`active` = 1' : '') . ' ' . ($id_supplier ? 'AND p.id_supplier = ' . (int) $id_supplier : ''); if ($random === true) { $sql .= ' ORDER BY RAND()'; $sql .= ' LIMIT 0, ' . (int) ($randomNumberProducts); } else { $sql .= ' ORDER BY ' . (isset($orderByPrefix) ? $orderByPrefix . '.' : '') . '`' . pSQL($orderBy) . '` ' . pSQL($orderWay) . ' LIMIT ' . (((int) ($p) - 1) * (int) ($n)) . ',' . (int) ($n); } $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS($sql); foreach ($result as $nb => $resultat) { /* id_attribute_group */ $id_du_groupe = 4; $replace_sql = 'SELECT al.name FROM `'._DB_PREFIX_.'product_attribute` pa JOIN `'._DB_PREFIX_.'product_attribute_combination` pac ON (pac.`id_product_attribute` = pa.`id_product_attribute`) JOIN `'._DB_PREFIX_.'attribute_lang` al ON (al.`id_attribute` = pac.`id_attribute` AND al.`id_lang` = '.(int)($id_lang).') JOIN `'._DB_PREFIX_.'attribute` a ON (a.`id_attribute_group` = '.$id_du_groupe.' AND a.`id_attribute` = pac.`id_attribute`) WHERE pa.`id_product` = '.(int)($resultat['id_product']).' AND pa.`quantity` >= 1'; $attributs = Db::getInstance()->ExecuteS($replace_sql); foreach($attributs as $attributs_tab){ $result[$nb]['attribute'][] = $attributs_tab['name']; } } if ($orderBy == 'orderprice') Tools::orderbyPrice($result, $orderWay); if (!$result) return false; return Product::getProductsProperties($id_lang, $result); } } ?> Et Copiez ceci dans themes/votre_theme/product-list.tpl : entre <ul> {foreach from=$products item=product name=products} ... <li> ... et </li> {/foreach} </ul> <p> {foreach from=$product.attribute key='id_attribute' item='attribute'} {$attribute} {/foreach} </p> Pour trouver l'id du groupe : dans le BO onglet => Attributs et groupes éditez l'attribut désiré, dans l'url cherchez &id_attribute_group= Reste à coder un lien avec du javascript. salut, merci pour l'astuce ca marche super bien ! par contre j'aimerais pouvoir faire la même chose pour les meilleurs ventes, les nouveautés et les promotions. j'ai essayé de bidouiller mais je n'arrives pas a afficher les couleurs sur ces pages. merci je suis sous prestashop 1.4.6.2 Link to comment Share on other sites More sharing options...
jrmvii Posted March 19, 2012 Share Posted March 19, 2012 Bonjour, Grâce au code d'Ichigok j'arrive à afficher le groupe d'attributs que je veux dans ma liste de produits mais j'aimerais les rendre clickable et que cela influence l'affichage du prix dans la liste des produits. Ou alors au moins que la sélection de l'attribut soit reflétée lors de l'achat. J'imagine qu'il faut coder un lien dans product-list.tpl apres {$attribute} <p> {foreach from=$product.attribute key=id_attribute item=attribute name=attribute} {$attribute} {/foreach} </p> Quelqu'un à le code pour faire ca ? merci Link to comment Share on other sites More sharing options...
Nérim Posted April 18, 2012 Share Posted April 18, 2012 merci d'avoir partagé l'astuce, cela fonctionne, mais il manque un détail. Sur une même référence il y a plusieurs déclinaisons : Pull Rouge : M, L, XL Pull vert : M, L, XL Pull Marron : M, L XL Cela va afficher sur la product list "Tailles : M, M, M, L, L, L, XL, XL, XL" Étant donné que c'est la même référence, l'idéal serait de voir afficher la taille qu'à partir du moment où une des déclinaisons est disponible en stock, et non pas pour chaque déclinaisons. Si j'ai juste le pull rouge et bleu en M, cela ne devra plus afficher M, M, mais juste M si quelqu'un sait remédier à ça, l'astuce sera parfaite ! Link to comment Share on other sites More sharing options...
ckarone Posted May 8, 2012 Share Posted May 8, 2012 (edited) Hello, Pour répondre à un MP, le PHP est à ajouter dans la classe Product.php (si possible via override) dans la méthode public static function getProductProperties($id_lang, $row) Voici la méthode complète public static function getProductProperties($id_lang, $row) { if (!$row['id_product']) return false; // Product::getDefaultAttribute is only called if id_product_attribute is missing from the SQL query at the origin of it: consider adding it in order to avoid unnecessary queries $row['allow_oosp'] = Product::isAvailableWhenOutOfStock($row['out_of_stock']); if ((!isset($row['id_product_attribute']) OR !$row['id_product_attribute']) AND ((isset($row['cache_default_attribute']) AND ($ipa_default = $row['cache_default_attribute']) !== NULL) OR ($ipa_default = Product::getDefaultAttribute($row['id_product'], !$row['allow_oosp']))) ) $row['id_product_attribute'] = $ipa_default; if (!isset($row['id_product_attribute'])) $row['id_product_attribute'] = 0; // Tax $usetax = Tax::excludeTaxeOption(); $cacheKey = $row['id_product'].'-'.$row['id_product_attribute'].'-'.$id_lang.'-'.(int)($usetax); if (array_key_exists($cacheKey, self::$producPropertiesCache)) return self::$producPropertiesCache[$cacheKey]; // Datas $link = new Link(); $row['category'] = Category::getLinkRewrite((int)$row['id_category_default'], (int)($id_lang)); $row['link'] = $link->getProductLink((int)$row['id_product'], $row['link_rewrite'], $row['category'], $row['ean13']); $row['attribute_price'] = (isset($row['id_product_attribute']) AND $row['id_product_attribute']) ? (float)(Product::getProductAttributePrice($row['id_product_attribute'])) : 0; $row['price_tax_exc'] = Product::getPriceStatic((int)$row['id_product'], false, ((isset($row['id_product_attribute']) AND !empty($row['id_product_attribute'])) ? (int)($row['id_product_attribute']) : NULL), (self::$_taxCalculationMethod == PS_TAX_EXC ? 2 : 6)); if (self::$_taxCalculationMethod == PS_TAX_EXC) { $row['price_tax_exc'] = Tools::ps_round($row['price_tax_exc'], 2); $row['price'] = Product::getPriceStatic((int)$row['id_product'], true, ((isset($row['id_product_attribute']) AND !empty($row['id_product_attribute'])) ? (int)($row['id_product_attribute']) : NULL), 6); $row['price_without_reduction'] = Product::getPriceStatic((int)$row['id_product'], false, ((isset($row['id_product_attribute']) AND !empty($row['id_product_attribute'])) ? (int)($row['id_product_attribute']) : NULL), 2, NULL, false, false); } else { $row['price'] = Tools::ps_round(Product::getPriceStatic((int)$row['id_product'], true, ((isset($row['id_product_attribute']) AND !empty($row['id_product_attribute'])) ? (int)($row['id_product_attribute']) : NULL), 2), 2); $row['price_without_reduction'] = Product::getPriceStatic((int)$row['id_product'], true, ((isset($row['id_product_attribute']) AND !empty($row['id_product_attribute'])) ? (int)($row['id_product_attribute']) : NULL), 6, NULL, false, false); } $row['reduction'] = Product::getPriceStatic((int)($row['id_product']), (bool)$usetax, (int)($row['id_product_attribute']), 6, NULL, true, true, 1, true, NULL, NULL, NULL, $specific_prices); $row['specific_prices'] = $specific_prices; if ($row['id_product_attribute']) { $row['quantity_all_versions'] = $row['quantity']; $row['quantity'] = Product::getQuantity((int)$row['id_product'], $row['id_product_attribute'], isset($row['cache_is_pack']) ? $row['cache_is_pack'] : NULL); } $row['id_image'] = Product::defineProductImage($row, $id_lang); $row['features'] = Product::getFrontFeaturesStatic((int)$id_lang, $row['id_product']); $row['attachments'] = ((!isset($row['cache_has_attachments']) OR $row['cache_has_attachments']) ? Product::getAttachmentsStatic((int)($id_lang), $row['id_product']) : array()); /* ajout pour les couleur dans la liste des produits */ $colors = array(); $attributesGroups = Db::getInstance()->ExecuteS(' SELECT pai.`id_image`, ag.`id_attribute_group`, ag.`is_color_group`, agl.`name` AS group_name, agl.`public_name` AS public_group_name, a.`id_attribute`, al.`name` AS attribute_name, a.`color` AS attribute_color, pa.`id_product_attribute`, pa.`quantity`, pa.`price`, pa.`ecotax`, pa.`weight`, pa.`default_on`, pa.`reference`, pa.`unit_price_impact`, pa.`minimal_quantity` FROM `'._DB_PREFIX_.'product_attribute` pa LEFT JOIN `'._DB_PREFIX_.'product_attribute_combination` pac ON pac.`id_product_attribute` = pa.`id_product_attribute` LEFT JOIN `'._DB_PREFIX_.'product_attribute_image` pai ON pai.`id_product_attribute` = pa.`id_product_attribute` LEFT JOIN `'._DB_PREFIX_.'attribute` a ON a.`id_attribute` = pac.`id_attribute` LEFT JOIN `'._DB_PREFIX_.'attribute_group` ag ON ag.`id_attribute_group` = a.`id_attribute_group` LEFT JOIN `'._DB_PREFIX_.'attribute_lang` al ON a.`id_attribute` = al.`id_attribute` LEFT JOIN `'._DB_PREFIX_.'attribute_group_lang` agl ON ag.`id_attribute_group` = agl.`id_attribute_group` WHERE pa.`id_product` = '.(int)$row['id_product'].' AND al.`id_lang` = '.(int)($id_lang).' AND agl.`id_lang` = '.(int)($id_lang).' AND ag.`is_color_group` = 1 GROUP BY attribute_color ORDER BY agl.`public_name`, al.`name`'); if (Db::getInstance()->numRows()) { foreach ($attributesGroups AS $k => $rowcolo) { /* Color management */ if (isset($rowcolo['attribute_color']) AND $rowcolo['attribute_color'] ) { $colors[$rowcolo['id_attribute']]['value'] = $rowcolo['attribute_color']; $colors[$rowcolo['id_attribute']]['name'] = $rowcolo['attribute_name']; $colors[$rowcolo['id_attribute']]['id_image'] =(($rowcolo['id_image'] != NULL) ? intval($rowcolo['id_image']) : -1); } } } $row['colors'] = $colors; // Pack management $row['pack'] = (!isset($row['cache_is_pack']) ? Pack::isPack($row['id_product']) : (int)$row['cache_is_pack']); $row['packItems'] = $row['pack'] ? Pack::getItemTable($row['id_product'], $id_lang) : array(); $row['nopackprice'] = $row['pack'] ? Pack::noPackPrice($row['id_product']) : 0; if ($row['pack'] AND !Pack::isInStock($row['id_product'])) $row['quantity'] = 0; self::$producPropertiesCache[$cacheKey] = $row; return self::$producPropertiesCache[$cacheKey]; } Edited May 8, 2012 by ckarone (see edit history) Link to comment Share on other sites More sharing options...
LEDestock Posted May 9, 2012 Share Posted May 9, 2012 (edited) salut, merci pour l'astuce ca marche super bien ! par contre j'aimerais pouvoir faire la même chose pour les meilleurs ventes, les nouveautés et les promotions. j'ai essayé de bidouiller mais je n'arrives pas a afficher les couleurs sur ces pages. merci je suis sous prestashop 1.4.6.2 J'ai aussi testé le code d' ichigoK ( sur version 1.4.5.1 ) et ça ne fonctionne pas chez moi il ne se passe rien du tout .. J'ai utilisé l' override. Edited May 9, 2012 by LEDestock (see edit history) Link to comment Share on other sites More sharing options...
ckarone Posted May 9, 2012 Share Posted May 9, 2012 Vous avez une url pour voir ? Link to comment Share on other sites More sharing options...
LEDestock Posted May 9, 2012 Share Posted May 9, 2012 Je vous envoie un MP car la boutique est en maintenance j'aurai besoin de votre ip. Link to comment Share on other sites More sharing options...
ckarone Posted May 9, 2012 Share Posted May 9, 2012 (edited) J'ai vérifier et normalement cela fonctionne sur la page promotion, nouveautés et fabriquants donc pas de raison que cela ne fonctionne pas chez vous. Quelle version de PS utilisez vous? Edited May 9, 2012 by ckarone (see edit history) Link to comment Share on other sites More sharing options...
LEDestock Posted May 9, 2012 Share Posted May 9, 2012 La version 1.4.5.1 , mais ça ne fonctionne pas en naviguant dans les catégories ? Link to comment Share on other sites More sharing options...
Enduro Posted May 11, 2012 Share Posted May 11, 2012 (edited) Bonjour, Merci pour ta réponse je n'avais vu que tu avais répondu sur le post. J'ai du louper quelque chose car çà ne fonctionne toujours pas. J'ai ajouté le code couleur dans le fichier php classes/Product.php comme tu l' a indiqué plus haut. Par contre j'ai un problème avec le fichier tpl. J'ai ajouté le code après la description dans la div center_block <div class="center_block"> <a href="{$product.link|escape:'htmlall':'UTF-8'}" class="product_img_link" title="{$product.name|escape:'htmlall':'UTF-8'}"><img src="{$link->getImageLink($product.link_rewrite, $product.id_image, 'home')}" alt="{$product.legend|escape:'htmlall':'UTF-8'}" {if isset($homeSize)} width="{$homeSize.width}" height="{$homeSize.height}"{/if} />{if isset($product.new) && $product.new == 1}<span class="new">{l s='New'}</span>{/if}</a> <!-- link manufacturer img --> <span class="logo_manufacturer_productlist"> <img src="{$img_manu_dir}{$product.id_manufacturer}-small.jpg" alt="{$product_manufacturer->name}" width="45" height="45" /> </span> <h3><a href="{$product.link|escape:'htmlall':'UTF-8'}" title="{$product.name|escape:'htmlall':'UTF-8'}">{$product.name|truncate:50:'...'|escape:'htmlall':'UTF-8'}</a></h3> <p class="product_desc"><a href="{$product.link|escape:'htmlall':'UTF-8'}" title="{$product.description_short|truncate:100:'...'|strip_tags:'UTF-8'|escape:'htmlall':'UTF-8'}">{$product.description_short|truncate:220:'...'|strip_tags:'UTF-8'}</a></p> {if isset($product.colors) && $product.colors } <!-- colors --> Existe en couleur :<p class="pcolor"> {foreach from=$product.colors key='id_attribute' item='color' name='color'} <a id="{$product.id_product}-{$color.id_image}" class="color_pick" style="background: {$color.value};" onclick="document.getElementById('img_{$product.id_product}').src='{$img_prod_dir}{$product.id_product}-{$color.id_image}.jpg'" title="{$color.name}"> {if file_exists($col_img_dir|cat:$id_attribute|cat:'.jpg')}<img src="{$img_col_dir}{$id_attribute}.jpg" alt="{$color.name}" />{/if} </a> {/foreach} </p> {/if} </div> la ou j'ai le code j'ai du blanc Edited May 11, 2012 by Enduro (see edit history) Link to comment Share on other sites More sharing options...
LEDestock Posted May 12, 2012 Share Posted May 12, 2012 Après divers tests, toujours rien pour afficher les déclinaisons ( de la Taille ) en stock au survol d'un produit dans le product-list Link to comment Share on other sites More sharing options...
EtapDesign Posted June 4, 2012 Share Posted June 4, 2012 Bonsoir, Je me permets d'intervenir dans votre sujet de discussion, en effet j'ai besoin d'afficher les couleurs (et taille facultatif) sur le listing produits dans la catégorie, je précise que j'ai la version 1.4.7.3 J'ai donc inséré dans le fichier product-list.tpl {* * 2007-2011 PrestaShop * * NOTICE OF LICENSE * * This source file is subject to the Academic Free License (AFL 3.0) * that is bundled with this package in the file LICENSE.txt. * It is also available through the world-wide-web at this URL: * http://opensource.org/licenses/afl-3.0.php * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to [email protected] so we can send you a copy immediately. * * DISCLAIMER * * Do not edit or add to this file if you wish to upgrade PrestaShop to newer * versions in the future. If you wish to customize PrestaShop for your * needs please refer to http://www.prestashop.com for more information. * * @author PrestaShop SA <[email protected]> * @copyright 2007-2011 PrestaShop SA * @version Release: $Revision: 1.4 $ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) * International Registered Trademark & Property of PrestaShop SA *} {if isset($products)} <!-- Products list --> <ul id="product_list" class="clear"> {foreach from=$products item=product name=products} <li class="ajax_block_product {if $smarty.foreach.products.first}first_item{elseif $smarty.foreach.products.last}last_item{/if} {if $smarty.foreach.products.index % 2}alternate_item{else}item{/if} clearfix"> <div class="center_block"> <a href="{$product.link|escape:'htmlall':'UTF-8'}" class="product_img_link" title="{$product.name|escape:'htmlall':'UTF-8'}"> <img src="{$link->getImageLink($product.link_rewrite, $product.id_image, 'home')}" alt="{$product.legend|escape:'htmlall':'UTF-8'}" {if isset($homeSize)} width="{$homeSize.width}" height="{$homeSize.height}"{/if} /></a> <h3>{if isset($product.new) && $product.new == 1}<span class="new">{l s='New'}</span>{/if}<a href="{$product.link|escape:'htmlall':'UTF-8'}" title="{$product.name|escape:'htmlall':'UTF-8'}">{$product.name|truncate:35:'...'|escape:'htmlall':'UTF-8'}</a></h3> <p class="product_desc"><a href="{$product.link|escape:'htmlall':'UTF-8'}" title="{$product.description_short|truncate:360:'...'|strip_tags:'UTF-8'|escape:'htmlall':'UTF-8'}">{$product.description_short|truncate:360:'...'|strip_tags:'UTF-8'}</a></p> </div> <div class="right_block"> {if isset($product.on_sale) && $product.on_sale && isset($product.show_price) && $product.show_price && !$PS_CATALOG_MODE}<span class="on_sale">{l s='On sale!'}</span> {elseif isset($product.reduction) && $product.reduction && isset($product.show_price) && $product.show_price && !$PS_CATALOG_MODE}<span class="discount">{l s='Reduced price!'}</span>{/if} {if isset($product.online_only) && $product.online_only}<span class="online_only">{l s='Online only!'}</span>{/if} {if (!$PS_CATALOG_MODE AND ((isset($product.show_price) && $product.show_price) || (isset($product.available_for_order) && $product.available_for_order)))} <div> {if isset($product.show_price) && $product.show_price && !isset($restricted_country_mode)}<span class="price" style="display: inline;">{if !$priceDisplay}{convertPrice price=$product.price}{else}{convertPrice price=$product.price_tax_exc}{/if}</span><br />{/if} {if isset($product.available_for_order) && $product.available_for_order && !isset($restricted_country_mode)}<span class="availability">{if ($product.allow_oosp || $product.quantity > 0)}{l s='Available'}{elseif (isset($product.quantity_all_versions) && $product.quantity_all_versions > 0)}{l s='Product available with different options'}{else}{l s='Out of stock'}{/if}</span>{/if} </div> {/if} {if $product.attribute} <p> {foreach from=$product.attribute key=id_attribute item=attribute name=attribute} {$attribute} {/foreach} </p> {/if} {if ($product.id_product_attribute == 0 || (isset($add_prod_display) && ($add_prod_display == 1))) && $product.available_for_order && !isset($restricted_country_mode) && $product.minimal_quantity <= 1 && $product.customizable != 2 && !$PS_CATALOG_MODE} {if ($product.allow_oosp || $product.quantity > 0)} <a class="button ajax_add_to_cart_button exclusive" rel="ajax_id_product_{$product.id_product|intval}" href="{$link->getPageLink('cart.php')}?add&id_product={$product.id_product|intval}{if isset($static_token)}&token={$static_token}{/if}" title="{l s='Add to cart'}">{l s='Add to cart'}</a> {else} <span class="exclusive">{l s='Add to cart'}</span> {/if} {/if} <a class="button" href="{$product.link|escape:'htmlall':'UTF-8'}" title="{l s='View'}">{l s='View'}</a> {if isset($comparator_max_item) && $comparator_max_item} <p class="compare"><input type="checkbox" class="comparator" id="comparator_item_{$product.id_product}" value="comparator_item_{$product.id_product}" {if isset($compareProducts) && in_array($product.id_product, $compareProducts)}checked{/if}/> <label for="comparator_item_{$product.id_product}">{l s='Select to compare'}</label></p> {/if} </div> </li> {/foreach} </ul> <!-- /Products list --> {/if} et dans un nouveau fichier créé category.php : <?php class Category extends CategoryCore { public function getProducts($id_lang, $p, $n, $orderBy = NULL, $orderWay = NULL, $getTotal = false, $active = true, $random = false, $randomNumberProducts = 1, $checkAccess = true) { global $cookie; if (!$checkAccess OR !$this->checkAccess($cookie->id_customer)) return false; if ($p < 1) $p = 1; if (empty($orderBy)) $orderBy = 'position'; else /* Fix for all modules which are now using lowercase values for 'orderBy' parameter */ $orderBy = strtolower($orderBy); if (empty($orderWay)) $orderWay = 'ASC'; if ($orderBy == 'id_product' OR $orderBy == 'date_add') $orderByPrefix = 'p'; elseif ($orderBy == 'name') $orderByPrefix = 'pl'; elseif ($orderBy == 'manufacturer') { $orderByPrefix = 'm'; $orderBy = 'name'; } elseif ($orderBy == 'position') $orderByPrefix = 'cp'; if ($orderBy == 'price') $orderBy = 'orderprice'; if (!Validate::isBool($active) OR !Validate::isOrderBy($orderBy) OR !Validate::isOrderWay($orderWay)) die(Tools::displayError()); $id_supplier = (int) (Tools::getValue('id_supplier')); /* Return only the number of products */ if ($getTotal) { $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow(' SELECT COUNT(cp.`id_product`) AS total FROM `' . _DB_PREFIX_ . 'product` p LEFT JOIN `' . _DB_PREFIX_ . 'category_product` cp ON p.`id_product` = cp.`id_product` WHERE cp.`id_category` = ' . (int) ($this->id) . ($active ? ' AND p.`active` = 1' : '') . ' ' . ($id_supplier ? 'AND p.id_supplier = ' . (int) ($id_supplier) : '')); return isset($result) ? $result['total'] : 0; } $sql = ' SELECT p.*, pa.`id_product_attribute`, pl.`description`, pl.`description_short`, pl.`available_now`, pl.`available_later`, pl.`link_rewrite`, pl.`meta_description`, pl.`meta_keywords`, pl.`meta_title`, pl.`name`, i.`id_image`, il.`legend`, m.`name` AS manufacturer_name, tl.`name` AS tax_name, t.`rate`, cl.`name` AS category_default, DATEDIFF(p.`date_add`, DATE_SUB(NOW(), INTERVAL ' . (Validate::isUnsignedInt(Configuration::get('PS_NB_DAYS_NEW_PRODUCT')) ? Configuration::get('PS_NB_DAYS_NEW_PRODUCT') : 20) . ' DAY)) > 0 AS new, (p.`price` * IF(t.`rate`,((100 + (t.`rate`))/100),1)) AS orderprice FROM `' . _DB_PREFIX_ . 'category_product` cp LEFT JOIN `' . _DB_PREFIX_ . 'product` p ON p.`id_product` = cp.`id_product` LEFT JOIN `' . _DB_PREFIX_ . 'product_attribute` pa ON (p.`id_product` = pa.`id_product` AND default_on = 1) LEFT JOIN `' . _DB_PREFIX_ . 'category_lang` cl ON (p.`id_category_default` = cl.`id_category` AND cl.`id_lang` = ' . (int) ($id_lang) . ') LEFT JOIN `' . _DB_PREFIX_ . 'product_lang` pl ON (p.`id_product` = pl.`id_product` AND pl.`id_lang` = ' . (int) ($id_lang) . ') LEFT JOIN `' . _DB_PREFIX_ . 'image` i ON (i.`id_product` = p.`id_product` AND i.`cover` = 1) LEFT JOIN `' . _DB_PREFIX_ . 'image_lang` il ON (i.`id_image` = il.`id_image` AND il.`id_lang` = ' . (int) ($id_lang) . ') LEFT JOIN `' . _DB_PREFIX_ . 'tax_rule` tr ON (p.`id_tax_rules_group` = tr.`id_tax_rules_group` AND tr.`id_country` = ' . (int) Country::getDefaultCountryId() . ' AND tr.`id_state` = 0) LEFT JOIN `' . _DB_PREFIX_ . 'tax` t ON (t.`id_tax` = tr.`id_tax`) LEFT JOIN `' . _DB_PREFIX_ . 'tax_lang` tl ON (t.`id_tax` = tl.`id_tax` AND tl.`id_lang` = ' . (int) ($id_lang) . ') LEFT JOIN `' . _DB_PREFIX_ . 'manufacturer` m ON m.`id_manufacturer` = p.`id_manufacturer` WHERE cp.`id_category` = ' . (int) ($this->id) . ($active ? ' AND p.`active` = 1' : '') . ' ' . ($id_supplier ? 'AND p.id_supplier = ' . (int) $id_supplier : ''); if ($random === true) { $sql .= ' ORDER BY RAND()'; $sql .= ' LIMIT 0, ' . (int) ($randomNumberProducts); } else { $sql .= ' ORDER BY ' . (isset($orderByPrefix) ? $orderByPrefix . '.' : '') . '`' . pSQL($orderBy) . '` ' . pSQL($orderWay) . ' LIMIT ' . (((int) ($p) - 1) * (int) ($n)) . ',' . (int) ($n); } $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS($sql); foreach ($result as $nb => $resultat) { /* id_attribute_group */ $id_du_groupe = 4; $replace_sql = 'SELECT al.name FROM `'._DB_PREFIX_.'product_attribute` pa JOIN `'._DB_PREFIX_.'product_attribute_combination` pac ON (pac.`id_product_attribute` = pa.`id_product_attribute`) JOIN `'._DB_PREFIX_.'attribute_lang` al ON (al.`id_attribute` = pac.`id_attribute` AND al.`id_lang` = '.(int)($id_lang).') JOIN `'._DB_PREFIX_.'attribute` a ON (a.`id_attribute_group` = '.$id_du_groupe.' AND a.`id_attribute` = pac.`id_attribute`) WHERE pa.`id_product` = '.(int)($resultat['id_product']).' AND pa.`quantity` >= 1'; $attributs = Db::getInstance()->ExecuteS($replace_sql); foreach($attributs as $attributs_tab){ $result[$nb]['attribute'][] = $attributs_tab['name']; } } if ($orderBy == 'orderprice') Tools::orderbyPrice($result, $orderWay); if (!$result) return false; return Product::getProductsProperties($id_lang, $result); } } ?> J'ai activé la palette couleur mais de nouvelles informations sont apparus sur le listing produit de la page catégorie sauf les couleurs, pourriez-vous m'éclairer pour que les couleurs s'afichent s'il vous plaît. Dans l'attente. Cordialement. Link to comment Share on other sites More sharing options...
EtapDesign Posted June 5, 2012 Share Posted June 5, 2012 Personne pourrait me donner un coup de main s'il vous plaît! Link to comment Share on other sites More sharing options...
EtapDesign Posted June 5, 2012 Share Posted June 5, 2012 Pourriez vous me dire si le code que j'ai mis au moins est bon? En fait je crois le soucis vient de l'id...je connais le numéro de l'attribut mais je vois pas comment l'intégrer dans le code.. Parce que voilà ce que ça me donne sur l'interface: Link to comment Share on other sites More sharing options...
EtapDesign Posted June 5, 2012 Share Posted June 5, 2012 Y a pas une âme charitable qui pourrait m'aiguiller au moins un peu svp? Link to comment Share on other sites More sharing options...
Gilles6688 Posted June 8, 2012 Share Posted June 8, 2012 Je vais rencontrer le même problème que tout le monde car j'ai des articles en taille qui existe en plusieurs couleurs, comment faire? Link to comment Share on other sites More sharing options...
richard03 Posted October 7, 2012 Share Posted October 7, 2012 Bonjour, j'ai testé les différentes proposition mais sur la dernière version 1.5 rien ne s'affiche. Est ce que quelqu'un penche dessus ou pourrait nous aiguiller pour faire une maj? Merci Link to comment Share on other sites More sharing options...
vinzter Posted October 11, 2012 Share Posted October 11, 2012 (edited) @richard03 Bonjour, Sur la 1.5 n'ayant pas réussi à surcharger category.php j'ai utilisé la solution de ckarone visant à surcharger product.php dans override/classes/product.php et cela semble fonctionner Edited October 11, 2012 by vinzter (see edit history) Link to comment Share on other sites More sharing options...
aitsfer Posted October 22, 2012 Share Posted October 22, 2012 bonjour, Merci pour le code, ça m'a bien aidé, en revanche, comment peut on éliminer les doublons des attributs qui s'affiche (ex: si une taille a plusieurs déclinaisons elle s'affiche en double ) ??? Merci d'avance Link to comment Share on other sites More sharing options...
Enduro Posted December 2, 2012 Share Posted December 2, 2012 Bonjour, Je n'arrive toujours pas a trouver le bon code pour avoir les couleurs avec changement d'image. Ci quelqu'un a le bon code qui fonctionne sur presta 1.4.6.2 (uniquement pour les couleurs). Le code que j'ai trouvé sur un autre sujet et qui a le plus de résultat, j'ai tous qui s'affiche sauf que lorsque je clique sur une couleur je n'ai plus d'image est le suivant: J'ai ajouté ce fichier nomé CategoryController.php dans le dossieroverride/controllers/ Merci pour votre aide. <?php class CategoryController extends CategoryControllerCore { public function productListAssign() { $hookExecuted = false; Module::hookExec('productListAssign', array('nbProducts' => &$this->nbProducts, 'catProducts' => &$this->cat_products, 'hookExecuted' => &$hookExecuted)); if(!$hookExecuted) // The hook was not executed, standard working { self::$smarty->assign('categoryNameComplement', ''); $this->nbProducts = $this->category->getProducts(NULL, NULL, NULL, $this->orderBy, $this->orderWay, true); $this->pagination((int)$this->nbProducts); // Pagination must be call after "getProducts" $this->cat_products = $this->category->getProducts((int)(self::$cookie->id_lang), (int)($this->p), (int)($this->n), $this->orderBy, $this->orderWay); /* @TODO VERU CORE PRESTASHOP */ foreach ($this->cat_products as $key => $cat_product) { $product = new Product(intval($cat_product['id_product']), true, intval(self::$cookie->id_lang)); $colors = array(); $groupcolor = 1; /* O pour afficher aussi les produits hors stock*/ $prodquantity = 1; $attributesGroups = Db::getInstance()->ExecuteS(' SELECT pai.`id_image`, ag.`id_attribute_group`, ag.`is_color_group`, agl.`name` AS group_name, agl.`public_name` AS public_group_name, a.`id_attribute`, al.`name` AS attribute_name, a.`color` AS attribute_color, pa.`id_product_attribute`, pa.`quantity`, pa.`price`, pa.`ecotax`, pa.`weight`, pa.`default_on`, pa.`reference`, pa.`unit_price_impact`, pa.`minimal_quantity` FROM `' . _DB_PREFIX_ . 'product_attribute` pa LEFT JOIN `' . _DB_PREFIX_ . 'product_attribute_combination` pac ON pac.`id_product_attribute` = pa.`id_product_attribute` LEFT JOIN `' . _DB_PREFIX_ . 'product_attribute_image` pai ON pai.`id_product_attribute` = pa.`id_product_attribute` LEFT JOIN `' . _DB_PREFIX_ . 'attribute` a ON a.`id_attribute` = pac.`id_attribute` LEFT JOIN `' . _DB_PREFIX_ . 'attribute_group` ag ON ag.`id_attribute_group` = a.`id_attribute_group` LEFT JOIN `' . _DB_PREFIX_ . 'attribute_lang` al ON a.`id_attribute` = al.`id_attribute` LEFT JOIN `' . _DB_PREFIX_ . 'attribute_group_lang` agl ON ag.`id_attribute_group` = agl.`id_attribute_group` WHERE pa.`id_product` = '.$cat_product['id_product'].' AND al.`id_lang` = '.self::$cookie->id_lang.' AND agl.`id_lang` = '.self::$cookie->id_lang.' AND ag.`is_color_group` = '.$groupcolor.' AND pa.quantity >= '.$prodquantity.' '); if (Db::getInstance()->numRows()) { foreach ($attributesGroups AS $k => $row) { /* Color management */ if (isset($row['attribute_color']) AND $row['attribute_color'] AND $row['id_attribute_group'] == $product->id_color_default) { $colors[$row['id_attribute']]['value'] = $row['attribute_color']; $colors[$row['id_attribute']]['name'] = $row['attribute_name']; $colors[$row['id_attribute']]['id_image'] =(($row['id_image'] != NULL) ? intval($row['id_image']) : -1); } } } $this->cat_products[$key]['colors'] = $colors; } } else // Hook executed, use the override $this->pagination((int)$this->nbProducts); // Pagination must be call after "getProducts" self::$smarty->assign('nb_products', (int)$this->nbProducts); } } ?> Puis dans fichiet product-list.tpl j'ai ajouté pour l'image: <a href="{$product.link|escape:'htmlall':'UTF-8'}" class="product_img_link" title="{$product.name|escape:'htmlall':'UTF-8'}"><img id="img_{$product.id_product}" src="{$link->getImageLink($product.link_rewrite, $product.id_image, 'home')}" alt="{$product.legend|escape:'htmlall':'UTF-8'}" {if isset($homeSize)} width="{$homeSize.width}" height="{$homeSize.height}"{/if} /></a> et pour le code color picker {if isset($product.colors) && $product.colors} <p class="colors"> {foreach from=$product.colors key='id_attribute' item='color'} <a onclick="document.getElementById('img_{$product.id_product}').src='{$img_prod_dir}{$product.id_product}-{$color.id_image}.jpg'" class="color_pick" title="{$color.name}" style="background: {$color.value};"></a> {/foreach} </p> {/if}[/size][/font][/color] [color=#343943][font=Arial, Helvetica, sans-serif][size=3] Link to comment Share on other sites More sharing options...
AkrOpad Posted December 4, 2012 Share Posted December 4, 2012 Bonjour, Je n'arrive toujours pas a trouver le bon code pour avoir les couleurs avec changement d'image. Ci quelqu'un a le bon code qui fonctionne sur presta 1.4.6.2 (uniquement pour les couleurs). Le code que j'ai trouvé sur un autre sujet et qui a le plus de résultat, j'ai tous qui s'affiche sauf que lorsque je clique sur une couleur je n'ai plus d'image est le suivant: J'ai ajouté ce fichier nomé CategoryController.php dans le dossieroverride/controllers/ Merci pour votre aide. et pour le code color picker {if isset($product.colors) && $product.colors} <p class="colors"> {foreach from=$product.colors key='id_attribute' item='color'} <a onclick="document.getElementById('img_{$product.id_product}').src='{$img_prod_dir}{$product.id_product}-{$color.id_image}.jpg'" class="color_pick" title="{$color.name}" style="background: {$color.value};"></a> {/foreach} </p> {/if}[/size][/font][/color] [color=#343943][font=Arial, Helvetica, sans-serif][size=3] Bonjour, essayez avec ceci : {foreach from=$product.colors key='id_attribute' item='color'} <a id="{$product.id_product}-{$color.id_image}" onclick="document.getElementById('img_{$product.id_product}').src='{$img_prod_dir}{$product.id_product}-{$color.id_image}.jpg'" class="color_pick" title="{$color.name}"> <img src="{$img_col_dir}{$id_attribute}.jpg" alt="{$color.name}" /> </a> {/foreach} Link to comment Share on other sites More sharing options...
Enduro Posted December 4, 2012 Share Posted December 4, 2012 Merci pour ton aide, j'ai essayé mais c'est moins bien (je n'ai plus les carrés avec couleur mais du texte pour color picker et le même résultat) Par contre j'ai regardé pour le chargement de l'image. Le problème viens du chemin pour l'image en déclinaison. Pour l'image normal (attribut par défaut) j'ai le chemin img/p/3/7/37-home.jpg et quand je clique sur une des couleurs (par exemple pour la couleur bleu) j'ai le chemin img/p/1-40.jpg alors que çà devrait être img/p/3/8/38-home.jpg Link to comment Share on other sites More sharing options...
Enduro Posted December 4, 2012 Share Posted December 4, 2012 Bon j'ai testé avec un autre produit (ipod shuffle) çà fonctionne pour le changement d'image ouf (pour le premier produit ipod nano, c'est normale que çà ne fonctionnait pas étant donné que je n'ai pas d'image dans ce dossier ce qui n'est pas normal / boutique presta 1.4.6.2 de test fraîchement installé). Le code est donc bon. Par contre il me manque -home sur le chemin de l'image pour que celle-ci soit au bon format. Testé avec l'ancien système de stockage d'image. Je vais tester avec le nouveau système (ma boutique en prod est avec le nouveau système). Link to comment Share on other sites More sharing options...
Enduro Posted December 4, 2012 Share Posted December 4, 2012 J'ai testé avec le nouveau système de stockage d'image et çà ne fonctionne pas, ce code fonctionne donc avec l'ancien système en ajoutant -home <img src="{$img_col_dir}{$id_attribute}.jpg" alt="{$color.name}" /> <img src="{$img_col_dir}{$id_attribute}-home.jpg" alt="{$color.name}" /> Si tu as une idée pour le chemin de l'image avec le nouveau système de classement. Link to comment Share on other sites More sharing options...
AkrOpad Posted December 4, 2012 Share Posted December 4, 2012 (edited) Pour avoir les carrés avec couleur, il faut simplement mettre des images de couleur aux valeurs de l'attribut couleur. Edited December 4, 2012 by AkrOpad (see edit history) Link to comment Share on other sites More sharing options...
Enduro Posted December 4, 2012 Share Posted December 4, 2012 (edited) Ça c'est fait, les différentes couleurs s'affichent bien mais le chemin de l'image n'est pas bon pour les images avec une configuration nouveau système de classement d'image src='{$img_prod_dir}{$product.id_product}-{$color.id_image}.jpg' Je ne s'ais pas quoi mettre Edited December 4, 2012 by Enduro (see edit history) Link to comment Share on other sites More sharing options...
Enduro Posted December 4, 2012 Share Posted December 4, 2012 Autant pour moi je me suis planté, si j'ai bien compris çà c'est l'image petit carré de l'attribut produit. Ou est géré le chemin de l'image produit lorsque que l'on clique sur l'attribut Link to comment Share on other sites More sharing options...
AkrOpad Posted December 4, 2012 Share Posted December 4, 2012 Je vais tester tous ça ! Link to comment Share on other sites More sharing options...
Enduro Posted December 4, 2012 Share Posted December 4, 2012 (edited) Merci j'ai essayé avec plein de variable mais je n'ai pas trouvé, La première variable et dernière variable sont bonnes mais ils manque le chemin pour arriver au bon dossier de l'image. src='{$img_prod_dir}/.../.../{$color.id_image}.jpg Edited December 4, 2012 by Enduro (see edit history) Link to comment Share on other sites More sharing options...
AkrOpad Posted December 5, 2012 Share Posted December 5, 2012 (edited) Ok ! ben voilà ! Compatible 1.4.6.2 avec le nouveau système de stockage des images produits Activer et la Navigation à Facettes. Code supprimer et repris plus bas. Edited December 8, 2012 by AkrOpad (see edit history) Link to comment Share on other sites More sharing options...
Enduro Posted December 5, 2012 Share Posted December 5, 2012 Merci pour ton aide. Je crois que je n'y serais jamais arrivé sans toi. J'ai juste apporté une petite modif pour le color picker et la taille de l'image par ce code {if isset($product.colors) && $product.colors} <p class="colors"> {foreach from=$product.colors key='id_attribute' item='color'} <a id="{$product.id_product}-{$color.id_image}" class="color_pick" onclick="document.getElementById('img_{$product.id_product}').src='{$link->getImageLink($product.link_rewrite, $color.id_image, 'home')}'" title="{$color.name}" style="background: {$color.value};"> </a> {/foreach} </p> {/if} Link to comment Share on other sites More sharing options...
Enduro Posted December 5, 2012 Share Posted December 5, 2012 Par contre çà ne fonctionne pas avec le module navigation à facette dès qu'il est activé il n'y a plus de color picker Link to comment Share on other sites More sharing options...
AkrOpad Posted December 7, 2012 Share Posted December 7, 2012 (edited) Par contre çà ne fonctionne pas avec le module navigation à facette dès qu'il est activé il n'y a plus de color picker Je regarde ça ! Compatible 1.4.6.2 avec le nouveau système de stockage des images produits Activer et la Navigation à Facettes. Bon pour que tout fonctionne il vaut mieux changer de méthode, en utilisant ce code : http://www.prestasho...roduits-survol/ Dans override/classes/ créez le fichier Product.php et copiez ceci dedans : <?php class Product extends ProductCore { public static function getProductProperties($id_lang, $row) { if (!$row['id_product']) return false; // Product::getDefaultAttribute is only called if id_product_attribute is missing from the SQL query at the origin of it: consider adding it in order to avoid unnecessary queries $row['allow_oosp'] = Product::isAvailableWhenOutOfStock($row['out_of_stock']); if ((!isset($row['id_product_attribute']) OR !$row['id_product_attribute']) AND ((isset($row['cache_default_attribute']) AND ($ipa_default = $row['cache_default_attribute']) !== NULL) OR ($ipa_default = Product::getDefaultAttribute($row['id_product'], !$row['allow_oosp']))) ) $row['id_product_attribute'] = $ipa_default; if (!isset($row['id_product_attribute'])) $row['id_product_attribute'] = 0; // Tax $usetax = Tax::excludeTaxeOption(); $cacheKey = $row['id_product'].'-'.$row['id_product_attribute'].'-'.$id_lang.'-'.(int)($usetax); if (array_key_exists($cacheKey, self::$producPropertiesCache)) return self::$producPropertiesCache[$cacheKey]; // Datas $link = new Link(); $row['category'] = Category::getLinkRewrite((int)$row['id_category_default'], (int)($id_lang)); $row['link'] = $link->getProductLink((int)$row['id_product'], $row['link_rewrite'], $row['category'], $row['ean13']); $row['attribute_price'] = (isset($row['id_product_attribute']) AND $row['id_product_attribute']) ? (float)(Product::getProductAttributePrice($row['id_product_attribute'])) : 0; $row['price_tax_exc'] = Product::getPriceStatic((int)$row['id_product'], false, ((isset($row['id_product_attribute']) AND !empty($row['id_product_attribute'])) ? (int)($row['id_product_attribute']) : NULL), (self::$_taxCalculationMethod == PS_TAX_EXC ? 2 : 6)); if (self::$_taxCalculationMethod == PS_TAX_EXC) { $row['price_tax_exc'] = Tools::ps_round($row['price_tax_exc'], 2); $row['price'] = Product::getPriceStatic((int)$row['id_product'], true, ((isset($row['id_product_attribute']) AND !empty($row['id_product_attribute'])) ? (int)($row['id_product_attribute']) : NULL), 6); $row['price_without_reduction'] = Product::getPriceStatic((int)$row['id_product'], false, ((isset($row['id_product_attribute']) AND !empty($row['id_product_attribute'])) ? (int)($row['id_product_attribute']) : NULL), 2, NULL, false, false); } else { $row['price'] = Tools::ps_round(Product::getPriceStatic((int)$row['id_product'], true, ((isset($row['id_product_attribute']) AND !empty($row['id_product_attribute'])) ? (int)($row['id_product_attribute']) : NULL), 2), 2); $row['price_without_reduction'] = Product::getPriceStatic((int)$row['id_product'], true, ((isset($row['id_product_attribute']) AND !empty($row['id_product_attribute'])) ? (int)($row['id_product_attribute']) : NULL), 6, NULL, false, false); } $row['reduction'] = Product::getPriceStatic((int)($row['id_product']), (bool)$usetax, (int)($row['id_product_attribute']), 6, NULL, true, true, 1, true, NULL, NULL, NULL, $specific_prices); $row['specific_prices'] = $specific_prices; if ($row['id_product_attribute']) { $row['quantity_all_versions'] = $row['quantity']; $row['quantity'] = Product::getQuantity((int)$row['id_product'], $row['id_product_attribute'], isset($row['cache_is_pack']) ? $row['cache_is_pack'] : NULL); } $row['id_image'] = Product::defineProductImage($row, $id_lang); $row['features'] = Product::getFrontFeaturesStatic((int)$id_lang, $row['id_product']); $row['attachments'] = ((!isset($row['cache_has_attachments']) OR $row['cache_has_attachments']) ? Product::getAttachmentsStatic((int)($id_lang), $row['id_product']) : array()); /* ajout pour les couleur dans la liste des produits */ $colors = array(); $attributesGroups = Db::getInstance()->ExecuteS(' SELECT pai.`id_image`, ag.`id_attribute_group`, ag.`is_color_group`, agl.`name` AS group_name, agl.`public_name` AS public_group_name, a.`id_attribute`, al.`name` AS attribute_name, a.`color` AS attribute_color, pa.`id_product_attribute`, pa.`quantity`, pa.`price`, pa.`ecotax`, pa.`weight`, pa.`default_on`, pa.`reference`, pa.`unit_price_impact`, pa.`minimal_quantity` FROM `' . _DB_PREFIX_ . 'product_attribute` pa LEFT JOIN `' . _DB_PREFIX_ . 'product_attribute_combination` pac ON pac.`id_product_attribute` = pa.`id_product_attribute` LEFT JOIN `' . _DB_PREFIX_ . 'product_attribute_image` pai ON pai.`id_product_attribute` = pa.`id_product_attribute` LEFT JOIN `' . _DB_PREFIX_ . 'attribute` a ON a.`id_attribute` = pac.`id_attribute` LEFT JOIN `' . _DB_PREFIX_ . 'attribute_group` ag ON ag.`id_attribute_group` = a.`id_attribute_group` LEFT JOIN `' . _DB_PREFIX_ . 'attribute_lang` al ON a.`id_attribute` = al.`id_attribute` LEFT JOIN `' . _DB_PREFIX_ . 'attribute_group_lang` agl ON ag.`id_attribute_group` = agl.`id_attribute_group` WHERE pa.`id_product` = '.(int)$row['id_product'].' AND al.`id_lang` = '.(int)($id_lang).' AND agl.`id_lang` = '.(int)($id_lang).' AND ag.`is_color_group` = 1 GROUP BY attribute_color ORDER BY agl.`public_name`, al.`name`'); if (Db::getInstance()->numRows()) { foreach ($attributesGroups AS $k => $rowcolo) { /* Color management */ if (isset($rowcolo['attribute_color']) AND $rowcolo['attribute_color'] ) { $colors[$rowcolo['id_attribute']]['value'] = $rowcolo['attribute_color']; $colors[$rowcolo['id_attribute']]['name'] = $rowcolo['attribute_name']; $colors[$rowcolo['id_attribute']]['id_image'] =(($rowcolo['id_image'] != NULL) ? intval($rowcolo['id_image']) : -1); } } } $row['colors'] = $colors; // Pack management $row['pack'] = (!isset($row['cache_is_pack']) ? Pack::isPack($row['id_product']) : (int)$row['cache_is_pack']); $row['packItems'] = $row['pack'] ? Pack::getItemTable($row['id_product'], $id_lang) : array(); $row['nopackprice'] = $row['pack'] ? Pack::noPackPrice($row['id_product']) : 0; if ($row['pack'] AND !Pack::isInStock($row['id_product'])) $row['quantity'] = 0; self::$producPropertiesCache[$cacheKey] = $row; return self::$producPropertiesCache[$cacheKey]; } } ?> Et Copiez ceci dans themes/votre_theme/product-list.tpl : Remplacer le code de l’image par celui-ci : <img id="img_{$product.id_product}" src="{$link->getImageLink($product.link_rewrite, $product.id_image)}" alt="{$product.legend|escape:'htmlall':'UTF-8'}" title="{$product.legend|escape:htmlall:'UTF-8'}" width="{$homeSize.width}" height="{$homeSize.height}" /> {if isset($product.colors) && $product.colors} {foreach from=$product.colors key='id_attribute' item='color'} <a id="{$product.id_product}-{$color.id_image}" class="color_pick" onclick="document.getElementById('img_{$product.id_product}').src='{$link->getImageLink($product.link_rewrite, $color.id_image)}'" title="{$color.name}"> <img src="{$img_col_dir}{$id_attribute}.jpg" alt="{$color.name}" /> </a> {/foreach} {/if} Et mettre des images aux attributs couleur, ainsi qu'une couleur par défaut. Edited March 2, 2013 by AkrOpad (see edit history) Link to comment Share on other sites More sharing options...
Enduro Posted December 7, 2012 Share Posted December 7, 2012 Merci çà fonctionne parfaitement. La méthode est même mieux puisqu'il n'est pas nécessaire d’activer le color picker sur la page produit pour que le color picker s'affiche dans la liste de produit. Encore merci pour ton aide... Link to comment Share on other sites More sharing options...
AkrOpad Posted December 7, 2012 Share Posted December 7, 2012 Merci çà fonctionne parfaitement. La méthode est même mieux puisqu'il n'est pas nécessaire d’activer le color picker sur la page produit pour que le color picker s'affiche dans la liste de produit. Encore merci pour ton aide... de rien ! Link to comment Share on other sites More sharing options...
Enduro Posted December 8, 2012 Share Posted December 8, 2012 J'abuse un peu beaucoup. Serait tu comment afficher également les textures. Je pense qu'il faut ajouter un truc dans se style dans product-list (repris dans la page produit): {if file_exists($col_img_dir|cat:$id_attribute|cat:'.jpg')}<img src="{$img_col_dir}{$id_attribute}.jpg" alt="{$color.name}" width="16" height="16" /> Et dans Product.php (repris dans ProductController) /* Color management */ if (isset($rowcolo['attribute_color']) AND $rowcolo['attribute_color'] ) OR (file_exists(_PS_COL_IMG_DIR_.$rowcolo['id_attribute'].'.jpg'))) AND $rowcolo['id_attribute_group'] == $this->product->id_color_default) J'ai une belle erreur 500 mais je ne doit pas être loin de la vérité. Link to comment Share on other sites More sharing options...
AkrOpad Posted December 8, 2012 Share Posted December 8, 2012 J'abuse un peu beaucoup. Serait tu comment afficher également les textures. Je pense qu'il faut ajouter un truc dans se style dans product-list (repris dans la page produit): {if file_exists($col_img_dir|cat:$id_attribute|cat:'.jpg')}<img src="{$img_col_dir}{$id_attribute}.jpg" alt="{$color.name}" width="16" height="16" /> Et dans Product.php (repris dans ProductController) /* Color management */ if (isset($rowcolo['attribute_color']) AND $rowcolo['attribute_color'] ) OR (file_exists(_PS_COL_IMG_DIR_.$rowcolo['id_attribute'].'.jpg'))) AND $rowcolo['id_attribute_group'] == $this->product->id_color_default) J'ai une belle erreur 500 mais je ne doit pas être loin de la vérité. Bonjour, Simplement en mettant des images dans les valeurs des attributs et avec ce bout de code comme dans mon précédent post il me semble : <img src="{$img_col_dir}{$id_attribute}.jpg" alt="{$color.name}" /> Link to comment Share on other sites More sharing options...
Enduro Posted December 8, 2012 Share Posted December 8, 2012 Mince, çà ne marche pas pour moi pour les textures. J'ai bien la texture sur la page produit mais pas dans la liste de produit. J'ai essayé avec ton code sans modif. Avec ce code le color picker des articles avec fond de couleur html, je n'ai pas de couleur html mais un fichier image qu'il ne trouve pas (color picker avec image texture alors que je n'ai pas de texture pour ces attributs) Et pour un article avec attribut couleur type texture je n'ai rien qui s'affiche. {if isset($product.colors) && $product.colors} {foreach from=$product.colors key='id_attribute' item='color'} <a id="{$product.id_product}-{$color.id_image}" class="color_pick" onclick="document.getElementById('img_{$product.id_product}').src='{$link->getImageLink($product.link_rewrite, $color.id_image)}'" title="{$color.name}"> <img src="{$img_col_dir}{$id_attribute}.jpg" alt="{$color.name}" /> </a> {/foreach} {/if} et avec ce code j'ai bien le color picker pour les attributs avec couleur html mais je n'ai pas le color picker pour les attribut avec texture. {if isset($product.colors) && $product.colors} <p class="colors"> {foreach from=$product.colors key='id_attribute' item='color'} <a id="{$product.id_product}-{$color.id_image}" class="color_pick" onclick="document.getElementById('img_{$product.id_product}').src='{$link->getImageLink($product.link_rewrite, $color.id_image, 'home')}'" title="{$color.name}" style="background: {$color.value};"> {if file_exists($col_img_dir|cat:$id_attribute|cat:'.jpg')}<img src="{$img_col_dir}{$id_attribute}.jpg" alt="{$color.name}" width="16" height="16" />{/if} </a> {/foreach} </p> {/if} Link to comment Share on other sites More sharing options...
AkrOpad Posted December 8, 2012 Share Posted December 8, 2012 (edited) Mince, çà ne marche pas pour moi pour les textures. J'ai bien la texture sur la page produit mais pas dans la liste de produit. Pourquoi ne pas mettre une couleur par défaut ou une image à toutes les valeurs couleur plutôt que d'utiliser style="background: {$color.value};" ??? Edited December 8, 2012 by AkrOpad (see edit history) Link to comment Share on other sites More sharing options...
AkrOpad Posted December 8, 2012 Share Posted December 8, 2012 {if isset($product.colors) && $product.colors} {foreach from=$product.colors key='id_attribute' item='color'} <a id="{$product.id_product}-{$color.id_image}" class="color_pick" onclick="document.getElementById('img_{$product.id_product}').src='{$link->getImageLink($product.link_rewrite, $color.id_image)}'" title="{$color.name}"> {if file_exists($img_col_dir.$id_attribute)} <img src="{$img_col_dir}{$id_attribute}.jpg" alt="{$color.name}" width="16" height="16" /> {else} <span id="colors" style="background-color:{$color.value}; color:{$color.value};">co</span> {/if} </a> {/foreach} {/if} et le css span#colors{ width: 16px; height: 16px; padding:2px; display:inline; cursor: pointer } Link to comment Share on other sites More sharing options...
mizou125 Posted February 17, 2013 Share Posted February 17, 2013 Bonsoir, j'arrive pas a le faire marcher sur 1.5.2 quelqu'un peut m'aider ? merci Link to comment Share on other sites More sharing options...
AkrOpad Posted February 18, 2013 Share Posted February 18, 2013 (edited) Bonsoir, j'arrive pas a le faire marcher sur 1.5.2 quelqu'un peut m'aider ? merci Bonjour, Dans override/classes/ éditez le fichier Product.php Copiez ceci dans Product.php : <?php class Product extends ProductCore { public static function getProductProperties($id_lang, $row, Context $context = null) { if (!$row['id_product']) return false; if ($context == null) $context = Context::getContext(); // Product::getDefaultAttribute is only called if id_product_attribute is missing from the SQL query at the origin of it: // consider adding it in order to avoid unnecessary queries $row['allow_oosp'] = Product::isAvailableWhenOutOfStock($row['out_of_stock']); if (Combination::isFeatureActive() && (!isset($row['id_product_attribute']) || !$row['id_product_attribute']) && ((isset($row['cache_default_attribute']) && ($ipa_default = $row['cache_default_attribute']) !== null) || ($ipa_default = Product::getDefaultAttribute($row['id_product'], !$row['allow_oosp'])))) $row['id_product_attribute'] = $ipa_default; if (!Combination::isFeatureActive() || !isset($row['id_product_attribute'])) $row['id_product_attribute'] = 0; // Tax $usetax = Tax::excludeTaxeOption(); $cache_key = $row['id_product'].'-'.$row['id_product_attribute'].'-'.$id_lang.'-'.(int)$usetax; if (isset($row['id_product_pack'])) $cache_key .= '-pack'.$row['id_product_pack']; if (isset(self::$producPropertiesCache[$cache_key])) return self::$producPropertiesCache[$cache_key]; // Datas $row['category'] = Category::getLinkRewrite((int)$row['id_category_default'], (int)$id_lang); $row['link'] = $context->link->getProductLink((int)$row['id_product'], $row['link_rewrite'], $row['category'], $row['ean13']); $row['attribute_price'] = 0; if (isset($row['id_product_attribute']) && $row['id_product_attribute']) $row['attribute_price'] = (float)Product::getProductAttributePrice($row['id_product_attribute']); $row['price_tax_exc'] = Product::getPriceStatic( (int)$row['id_product'], false, ((isset($row['id_product_attribute']) && !empty($row['id_product_attribute'])) ? (int)$row['id_product_attribute'] : null), (self::$_taxCalculationMethod == PS_TAX_EXC ? 2 : 6) ); if (self::$_taxCalculationMethod == PS_TAX_EXC) { $row['price_tax_exc'] = Tools::ps_round($row['price_tax_exc'], 2); $row['price'] = Product::getPriceStatic( (int)$row['id_product'], true, ((isset($row['id_product_attribute']) && !empty($row['id_product_attribute'])) ? (int)$row['id_product_attribute'] : null), 6 ); $row['price_without_reduction'] = Product::getPriceStatic( (int)$row['id_product'], false, ((isset($row['id_product_attribute']) && !empty($row['id_product_attribute'])) ? (int)$row['id_product_attribute'] : null), 2, null, false, false ); } else { $row['price'] = Tools::ps_round( Product::getPriceStatic( (int)$row['id_product'], true, ((isset($row['id_product_attribute']) && !empty($row['id_product_attribute'])) ? (int)$row['id_product_attribute'] : null), 2 ), 2 ); $row['price_without_reduction'] = Product::getPriceStatic( (int)$row['id_product'], true, ((isset($row['id_product_attribute']) && !empty($row['id_product_attribute'])) ? (int)$row['id_product_attribute'] : null), 6, null, false, false ); } $row['reduction'] = Product::getPriceStatic( (int)$row['id_product'], (bool)$usetax, (int)$row['id_product_attribute'], 6, null, true, true, 1, true, null, null, null, $specific_prices ); $row['specific_prices'] = $specific_prices; if ($row['id_product_attribute']) { $row['quantity_all_versions'] = $row['quantity']; $row['quantity'] = Product::getQuantity( (int)$row['id_product'], $row['id_product_attribute'], isset($row['cache_is_pack']) ? $row['cache_is_pack'] : null ); } else $row['quantity'] = Product::getQuantity((int)$row['id_product']); $row['id_image'] = Product::defineProductImage($row, $id_lang); $row['features'] = Product::getFrontFeaturesStatic((int)$id_lang, $row['id_product']); $row['attachments'] = array(); if (!isset($row['cache_has_attachments']) || $row['cache_has_attachments']) $row['attachments'] = Product::getAttachmentsStatic((int)$id_lang, $row['id_product']); $row['virtual'] = ((!isset($row['is_virtual']) || $row['is_virtual']) ? 1 : 0); // ajout pour les couleur dans la liste des produits $colors = array(); $groupcolor = 1; /* O pour afficher aussi les produits hors stock*/ $prodquantity = 0; $attributesGroups = Db::getInstance()->ExecuteS(' SELECT pai.`id_image`, ag.`id_attribute_group`, ag.`is_color_group`, agl.`name` AS group_name, agl.`public_name` AS public_group_name, a.`id_attribute`, al.`name` AS attribute_name, a.`color` AS attribute_color, pa.`id_product_attribute`, pa.`quantity`, pa.`price`, pa.`ecotax`, pa.`weight`, pa.`default_on`, pa.`reference`, pa.`unit_price_impact`, pa.`minimal_quantity` FROM `' . _DB_PREFIX_ . 'product_attribute` pa LEFT JOIN `' . _DB_PREFIX_ . 'product_attribute_combination` pac ON pac.`id_product_attribute` = pa.`id_product_attribute` LEFT JOIN `' . _DB_PREFIX_ . 'product_attribute_image` pai ON pai.`id_product_attribute` = pa.`id_product_attribute` LEFT JOIN `' . _DB_PREFIX_ . 'attribute` a ON a.`id_attribute` = pac.`id_attribute` LEFT JOIN `' . _DB_PREFIX_ . 'attribute_group` ag ON ag.`id_attribute_group` = a.`id_attribute_group` LEFT JOIN `' . _DB_PREFIX_ . 'attribute_lang` al ON a.`id_attribute` = al.`id_attribute` LEFT JOIN `' . _DB_PREFIX_ . 'attribute_group_lang` agl ON ag.`id_attribute_group` = agl.`id_attribute_group` WHERE pa.`id_product` = '.(int)$row['id_product'].' AND al.`id_lang` = '.(int)($id_lang).' AND agl.`id_lang` = '.(int)($id_lang).' AND ag.`is_color_group` = '.$groupcolor.' AND pa.quantity >= '.$prodquantity.' GROUP BY id_attribute '); if (Db::getInstance()->numRows()) { foreach ($attributesGroups AS $k => $rowcolo) { // Color management if (isset($rowcolo['attribute_color']) AND $rowcolo['attribute_color'] ) { $colors[$rowcolo['id_attribute']]['value'] = $rowcolo['attribute_color']; $colors[$rowcolo['id_attribute']]['name'] = $rowcolo['attribute_name']; $colors[$rowcolo['id_attribute']]['id_image'] =(($rowcolo['id_image'] != NULL) ? intval($rowcolo['id_image']) : -1); } } } $row['colors'] = $colors; // Pack management $row['pack'] = (!isset($row['cache_is_pack']) ? Pack::isPack($row['id_product']) : (int)$row['cache_is_pack']); $row['packItems'] = $row['pack'] ? Pack::getItemTable($row['id_product'], $id_lang) : array(); $row['nopackprice'] = $row['pack'] ? Pack::noPackPrice($row['id_product']) : 0; if ($row['pack'] && !Pack::isInStock($row['id_product'])) $row['quantity'] = 0; self::$producPropertiesCache[$cache_key] = $row; return self::$producPropertiesCache[$cache_key]; } } ?> Et Copiez ceci dans themes/votre_theme/product-list.tpl : Remplacer le code de l’image par celui-ci : <img id="img_{$product.id_product}" src="{$link->getImageLink($product.link_rewrite, $product.id_image)}" alt="{$product.legend|escape:'htmlall':'UTF-8'}" height="{$homeSize.height}" width="{$homeSize.width}" /> {if isset($product.colors) && $product.colors} <!-- colors --> <p> {foreach from=$product.colors key='id_attribute' item='color'} <a id="{$product.id_product}-{$color.id_image}" class="color_pick" onclick="document.getElementById('img_{$product.id_product}').src='{$img_prod_dir}{$product.id_product}-{$color.id_image}.jpg'"> <img src="{$img_col_dir}{$id_attribute}.jpg" alt="{$color.name}" /> </a> {/foreach} </p> {/if} Et mettre des images aux attributs couleur, ainsi qu'une couleur par défaut. Edited March 2, 2013 by AkrOpad (see edit history) Link to comment Share on other sites More sharing options...
mizou125 Posted February 18, 2013 Share Posted February 18, 2013 Merci pour ton aide, ça m'affiche rien, juste une partie en blanc et c'est n'est pas lors du survol dans le code le bloc des couleurs existe mais les images des couleurs ne s'affiche pas !! Link to comment Share on other sites More sharing options...
AkrOpad Posted February 18, 2013 Share Posted February 18, 2013 Merci pour ton aide, ça m'affiche rien, juste une partie en blanc et c'est n'est pas lors du survol dans le code le bloc des couleurs existe mais les images des couleurs ne s'affiche pas !! Avez-vous bien mis des images aux attributs couleur, ainsi qu'une couleur par defaut ? Pour le survol un petit coup de grogoole sur les événements javascript et hop ! Link to comment Share on other sites More sharing options...
DoubyWeb Posted March 1, 2013 Share Posted March 1, 2013 (edited) Bonjour a tous, Je viens de tester sur Prestashop 1.5.3 et apparemment ça ne fonctionne pas ... Quelqu'un pourrait-il me dire si c'est moi qui est fait une mauvaise manip ou si ce n'est réellement pas compatible avec cette version ? Cordialement. Edited March 1, 2013 by DoubyWeb (see edit history) Link to comment Share on other sites More sharing options...
AkrOpad Posted March 1, 2013 Share Posted March 1, 2013 Bonjour a tous, Je viens de tester sur Prestashop 1.5.3 et apparemment ça ne fonctionne pas ... Quelqu'un pourrait-il me dire si c'est moi qui est fait une mauvaise manip ou si ce n'est réellement pas compatible avec cette version ? Cordialement. Bonjour, Fonctionne très bien sur prestashop 1.5.3. Cordialement, Link to comment Share on other sites More sharing options...
nico476 Posted March 2, 2013 Share Posted March 2, 2013 slt et merci pour ce topic donc si j ai bien compris celui ci affiche les déclinaisons couleur et change la photo au survol sur la liste produit pour les 1.5.3.1 il y a que ceci ci dessous à faire? Dans override/classes/ éditez le fichier Product.php Copiez ceci dans Product.php : CODE Et Copiez ceci dans themes/votre_theme/product-list.tpl : Remplacer le code de l’image par celui-ci : CODE CODE Link to comment Share on other sites More sharing options...
DoubyWeb Posted March 5, 2013 Share Posted March 5, 2013 (edited) Merci ta réponse AkrOpad. Après avoir, re-tenter l'intégration, effectivement je vois de l'avancement. J'ai bien maintenant des couleurs qui s'affichent cependant, cela fonctionne partiellement je m'explique : J'ai une couleur "Noir" où j'ai appliquer un code couleur #000000 mais pas d'image de "texture". Au lieu, de m'afficher un carré avec un code couleur, cela va chercher une image qui n'existe pas . Deuxième point, j'ai des couleurs à deux ou trois variantes par exemple : Rouge/Blanc, pour lequel ça ne fonctionne pas ... Là encore j'ai un problème, il ne va pas chercher cette attribut . Sinon, ça m'a l'air de fonctionner correctement, d'ailleurs merci à tous pour cette formidable astuce ! Quelqu'un a une solution pour les problèmes énumérés ? Edited March 5, 2013 by DoubyWeb (see edit history) Link to comment Share on other sites More sharing options...
AkrOpad Posted March 5, 2013 Share Posted March 5, 2013 Merci ta réponse AkrOpad. Après avoir, re-tenter l'intégration, effectivement je vois de l'avancement. J'ai bien maintenant des couleurs qui s'affichent cependant, cela fonctionne partiellement je m'explique : J'ai une couleur "Noir" où j'ai appliquer un code couleur #000000 mais pas d'image de "texture". Au lieu, de m'afficher un carré avec un code couleur, cela va chercher une image qui n'existe pas . Deuxième point, j'ai des couleurs à deux ou trois variantes par exemple : Rouge/Blanc, pour lequel ça ne fonctionne pas ... Là encore j'ai un problème, il ne va pas chercher cette attribut . Sinon, ça m'a l'air de fonctionner correctement, d'ailleurs merci à tous pour cette formidable astuce ! Quelqu'un a une solution pour les problèmes énumérés ? Bonjour, Il faut quand même mettre des images par défaut et mettre des images bicolores Rouge/Blanc par exemple et ça fonctionnera nickel. Cordialement, Link to comment Share on other sites More sharing options...
DoubyWeb Posted March 5, 2013 Share Posted March 5, 2013 Un autre soucis chez moi, lors que je clique sur la couleur, l'image est bien changé cependant l'adresse de l'image affiché n'est pas bonne ... Quelqu'un a t-il une solution ? Il semblerais que cette ligne n'est pas bonne : Ou alors c'est que les URLs des images de couleurs ne sont pas disponible depuis la product_list car lorsque je vais voir dans le détail elles correspondent à ce format : {id_image}/{nom_produit}.jpg Quelqu'un peux t-il me donner une coup de pouce ? Merci d'avance. Cordialement, Anthony Link to comment Share on other sites More sharing options...
DoubyWeb Posted March 6, 2013 Share Posted March 6, 2013 (edited) Chez moi tout fonctionne, mais avec ce code : <!-- Color -->{if isset($product.colors) && $product.colors} <div class="switcher_color"> {foreach from=$product.colors key='id_attribute' item='color'} <a id="{$product.id_product}-{$color.id_image}" class="color_pick" onmouseover="document.getElementById('img_{$product.id_product}').src='{$link->getImageLink($product.link_rewrite, $color.id_image)}'" onmouseout="document.getElementById('img_{$product.id_product}').src='{$link->getImageLink($product.link_rewrite, $product.id_image)}'"> <img src="{$img_col_dir}{$id_attribute}.jpg" alt="{$color.name}" /> </a> {/foreach} </div> {/if} <!-- --> Je précise que je l'ai appliquer pour une passage à la souris et non pour un clic. Merci en tout cas (en particulier à AkrOpad , je suis arrivée à mes fins c'est parfait. Reste plus qu'à appliquer cette astuce pour les tailles et c'est bingo !!! Edited March 6, 2013 by DoubyWeb (see edit history) Link to comment Share on other sites More sharing options...
DoubyWeb Posted March 7, 2013 Share Posted March 7, 2013 Quelqu'un aurait une idée pour appliquer de ce code pour les autres attribut sur Prestashop 1.5.3 ? J'ai vu en début de post que quelqu'un y était arrivée avec ton aide AkrOpad ... Mais je ne vois pas comment appliquer ça ... Merci d'avance. Cordialement Link to comment Share on other sites More sharing options...
mizou125 Posted March 8, 2013 Share Posted March 8, 2013 (edited) Bonjour, Merci pour cet astuce qui fonctionne pour moi sur PS 1.5.2 je voulais savoir, si on peut afficher seulement les couleurs disponibles (en stock) et pour les couleurs y'a pas moins que le code le récupère automatiquement au lieu de chercher des images et donc il faut ajouter une image pour chaque couleur ? et si possible une méthode pour afficher par exemple l'attribut "Taille" ? Merci Edited March 8, 2013 by mizou125 (see edit history) Link to comment Share on other sites More sharing options...
AkrOpad Posted March 8, 2013 Share Posted March 8, 2013 (edited) Bonjour, Merci pour cet astuce qui fonctionne pour moi sur PS 1.5.2 je voulais savoir, si on peut afficher seulement les couleurs disponibles (en stock) et pour les couleurs y'a pas moins que le code le récupère automatiquement au lieu de chercher des images et donc il faut ajouter une image pour chaque couleur ? et si possible une méthode pour afficher par exemple l'attribut "Taille" ? Merci Bonjour, Dans le bas du code que je donne plus haut dans le fichier "override/classes/Product.php" il y a une variable pour afficher aussi les couleurs des produits hors stock par défaut 0. /* O pour afficher aussi les produits hors stock */ $prodquantity = 0; Oui il est préférable pour le client de voire une image du produit de la couleur voulu et donc il faut mettre les images de chaque couleur et les cocher dans les déclinaisons suivant la couleur. Pour la taille il y avait une solution qui ne marche plus sous Prestashop 1.5. Il y a un module pour Prestashop 1.5 : http://www.prestasho...-prestashop-15/ Cordialement, Edited March 8, 2013 by AkrOpad (see edit history) Link to comment Share on other sites More sharing options...
mizou125 Posted March 8, 2013 Share Posted March 8, 2013 Dans le bas du code que je donne plus haut dans le fichier "override/classes/Product.php" il y a une variable pour afficher aussi les couleurs des produits hors stock par défaut 0. /* O pour afficher aussi les produits hors stock */ $prodquantity = 0; Bonsoir, Du coup, je dois mettre quoi ? et Merci bcp, vraiment tu gère Link to comment Share on other sites More sharing options...
regielm Posted March 30, 2013 Share Posted March 30, 2013 (edited) Si le groupe d'attributs a bien des déclinaisons et qu'elles ont été ajoutées dans la fiche du produit et un stock supérieur à 0.... Essayez ce product-list.tpl pour voir si le problème vient de là. {if isset($products)} <!-- Products list --> <ul id="product_list" class="clear"> {foreach from=$products item=product name=products} <li class="ajax_block_product {if $smarty.foreach.products.first}first_item{elseif $smarty.foreach.products.last}last_item{/if} {if $smarty.foreach.products.index % 2}alternate_item{else}item{/if} clearfix"> <div class="center_block"> <a href="{$product.link|escape:'htmlall':'UTF-8'}" class="product_img_link" title="{$product.name|escape:'htmlall':'UTF-8'}"> <img src="{$link->getImageLink($product.link_rewrite, $product.id_image, 'home')}" alt="{$product.legend|escape:'htmlall':'UTF-8'}" {if isset($homeSize)} width="{$homeSize.width}" height="{$homeSize.height}"{/if} /></a> <h3>{if isset($product.new) && $product.new == 1}<span class="new">{l s='New'}</span>{/if}<a href="{$product.link|escape:'htmlall':'UTF-8'}" title="{$product.name|escape:'htmlall':'UTF-8'}">{$product.name|truncate:35:'...'|escape:'htmlall':'UTF-8'}</a></h3> <p class="product_desc"><a href="{$product.link|escape:'htmlall':'UTF-8'}" title="{$product.description_short|truncate:360:'...'|strip_tags:'UTF-8'|escape:'htmlall':'UTF-8'}">{$product.description_short|truncate:360:'...'|strip_tags:'UTF-8'}</a></p> </div> <div class="right_block"> {if isset($product.on_sale) && $product.on_sale && isset($product.show_price) && $product.show_price && !$PS_CATALOG_MODE}<span class="on_sale">{l s='On sale!'}</span> {elseif isset($product.reduction) && $product.reduction && isset($product.show_price) && $product.show_price && !$PS_CATALOG_MODE}<span class="discount">{l s='Reduced price!'}</span>{/if} {if isset($product.online_only) && $product.online_only}<span class="online_only">{l s='Online only!'}</span>{/if} {if (!$PS_CATALOG_MODE AND ((isset($product.show_price) && $product.show_price) || (isset($product.available_for_order) && $product.available_for_order)))} <div> {if isset($product.show_price) && $product.show_price && !isset($restricted_country_mode)}<span class="price" style="display: inline;">{if !$priceDisplay}{convertPrice price=$product.price}{else}{convertPrice price=$product.price_tax_exc}{/if}</span><br />{/if} {if isset($product.available_for_order) && $product.available_for_order && !isset($restricted_country_mode)}<span class="availability">{if ($product.allow_oosp || $product.quantity > 0)}{l s='Available'}{elseif (isset($product.quantity_all_versions) && $product.quantity_all_versions > 0)}{l s='Product available with different options'}{else}{l s='Out of stock'}{/if}</span>{/if} </div> {/if} {if $product.attribute} <p> {foreach from=$product.attribute key=id_attribute item=attribute name=attribute} {$attribute} {/foreach} </p> {/if} {if ($product.id_product_attribute == 0 || (isset($add_prod_display) && ($add_prod_display == 1))) && $product.available_for_order && !isset($restricted_country_mode) && $product.minimal_quantity <= 1 && $product.customizable != 2 && !$PS_CATALOG_MODE} {if ($product.allow_oosp || $product.quantity > 0)} <a class="button ajax_add_to_cart_button exclusive" rel="ajax_id_product_{$product.id_product|intval}" href="{$link->getPageLink('cart.php')}?add&id_product={$product.id_product|intval}{if isset($static_token)}&token={$static_token}{/if}" title="{l s='Add to cart'}">{l s='Add to cart'}</a> {else} <span class="exclusive">{l s='Add to cart'}</span> {/if} {/if} <a class="button" href="{$product.link|escape:'htmlall':'UTF-8'}" title="{l s='View'}">{l s='View'}</a> {if isset($comparator_max_item) && $comparator_max_item} <p class="compare"><input type="checkbox" class="comparator" id="comparator_item_{$product.id_product}" value="comparator_item_{$product.id_product}" {if isset($compareProducts) && in_array($product.id_product, $compareProducts)}checked{/if}/> <label for="comparator_item_{$product.id_product}">{l s='Select to compare'}</label></p> {/if} </div> </li> {/foreach} </ul> <!-- /Products list --> {/if} j'ai suivi tes recommandations et j'ai rien qui s'affiche , par contre si je me sers de ton product-list.tpl mes produits ne sont plus alignés mais ça marche (j'utilise le thème collection) mon product-list.tpl est celui ci {* * 2007-2011 PrestaShop * * NOTICE OF LICENSE * * This source file is subject to the Academic Free License (AFL 3.0) * that is bundled with this package in the file LICENSE.txt. * It is also available through the world-wide-web at this URL: * http://opensource.org/licenses/afl-3.0.php * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to [email protected] so we can send you a copy immediately. * * DISCLAIMER * * Do not edit or add to this file if you wish to upgrade PrestaShop to newer * versions in the future. If you wish to customize PrestaShop for your * needs please refer to http://www.prestashop.com for more information. * * @author PrestaShop SA <[email protected]> * @copyright 2007-2011 PrestaShop SA * @version Release: $Revision: 6594 $ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) * International Registered Trademark & Property of PrestaShop SA *} {if isset($products)} <!-- Products list --> <ul id="product_list" class="clear"> {foreach from=$products item=product name=products} <li class="ajax_block_product {if $smarty.foreach.products.first}first_item{elseif $smarty.foreach.products.last}last_item{/if} {if ($smarty.foreach.products.index+1) % (4)==0}alternate_item{else}item{/if} clearfix"> {*<div class="left_block"> {if isset($comparator_max_item) && $comparator_max_item} <p class="compare"> <input type="checkbox" class="comparator" id="comparator_item_{$product.id_product}" value="comparator_item_{$product.id_product}" {if isset($compareProducts) && in_array($product.id_product, $compareProducts)}checked="checked"{/if} /> <label for="comparator_item_{$product.id_product}">{l s='Select to compare'}</label> </p> {/if} </div> *} {if !empty($product.colors)} {foreach from=$product.colors key=id_attribute item=color} {/foreach} {/if} <div class="product_img"> <a href="{$product.link|escape:'htmlall':'UTF-8'}" class="product_img_link" title="{$product.name|escape:'htmlall':'UTF-8'}"> <img src="{$link->getImageLink($product.link_rewrite, $product.id_image, 'prod_cat')}" alt="{$product.legend|escape:'htmlall':'UTF-8'}" /> {if isset($product.new) && $product.new == 1} <span class="new">{l s='New'}</span> {/if} {if isset($product.reduction) && $product.reduction && isset($product.show_price) && $product.show_price && !$PS_CATALOG_MODE} <span class="discount">{l s='Reduced price!'}</span> {/if} </a> </div> <h3><a href="{$product.link|escape:'htmlall':'UTF-8'}" title="{$product.name|escape:'htmlall':'UTF-8'}">{$product.name|truncate:35:'...'|escape:'htmlall':'UTF-8'}</a></h3> <!-- <p class="product_desc"><a href="{$product.link|escape:'htmlall':'UTF-8'}" title="{$product.description_short|truncate:100:'...'|strip_tags:'UTF-8'|escape:'htmlall':'UTF-8'}">{$product.description_short|truncate:220:'...'|strip_tags:'UTF-8'}</a></p> --> {if isset($product.on_sale) && $product.on_sale && isset($product.show_price) && $product.show_price && !$PS_CATALOG_MODE} <span class="on_sale">{l s='On sale!'}</span> {/if} {if isset($product.online_only) && $product.online_only} <span class="online_only">{l s='Online only!'}</span> {/if} {if (!$PS_CATALOG_MODE AND ((isset($product.show_price) && $product.show_price) || (isset($product.available_for_order) && $product.available_for_order)))} <div class="content_price"> {if isset($product.show_price) && $product.show_price && !isset($restricted_country_mode)} <span class="price" style="display: inline;"> {if !$priceDisplay} {convertPrice price=$product.price} {else} {convertPrice price=$product.price_tax_exc} {/if} </span> <br /> {/if} {if isset($product.available_for_order) && $product.available_for_order && !isset($restricted_country_mode)} <span class="availability"> {if ($product.allow_oosp || $product.quantity > 0)} {l s='Available'} {elseif (isset($product.quantity_all_versions) && $product.quantity_all_versions > 0)} {l s='Product available with different options'} {else} {l s='Out of stock'} {/if} </span> {/if} </div> {/if} <!-- <div class="right_block"> {if ($product.id_product_attribute == 0 || (isset($add_prod_display) && ($add_prod_display == 1))) && $product.available_for_order && !isset($restricted_country_mode) && $product.minimal_quantity == 1 && $product.customizable != 2 && !$PS_CATALOG_MODE} {if ($product.allow_oosp || $product.quantity > 0)} <a class="button ajax_add_to_cart_button exclusive" rel="ajax_id_product_{$product.id_product|intval}" href="{$link->getPageLink('cart.php')}?add&id_product={$product.id_product|intval}{if isset($static_token)}&token={$static_token}{/if}" title="{l s='Add to cart'}"><span></span>{l s='Add to cart'}</a><br /> {else} <span class="exclusive"><span></span>{l s='Add to cart'}</span><br /> {/if} {/if} <a class="button lnk_view" href="{$product.link|escape:'htmlall':'UTF-8'}" title="{l s='View'}">{l s='View'}</a> </div> --> </li> {/foreach} </ul> <!-- /Products list --> {/if} une idée ? merci d'avance Edited March 30, 2013 by philippe_lm (see edit history) Link to comment Share on other sites More sharing options...
AkrOpad Posted March 30, 2013 Share Posted March 30, 2013 j'ai suivi tes recommandations et j'ai rien qui s'affiche , par contre si je me sers de ton product-list.tpl mes produits ne sont plus alignés mais ça marche (j'utilise le thème collection) mon product-list.tpl est celui ci une idée ? merci d'avance Bonjour, Dans override/classes/ éditez le fichier Product.php Copiez ceci dans Product.php : <?php class Product extends ProductCore { public static function getProductProperties($id_lang, $row, Context $context = null) { if (!$row['id_product']) return false; if ($context == null) $context = Context::getContext(); // Product::getDefaultAttribute is only called if id_product_attribute is missing from the SQL query at the origin of it: // consider adding it in order to avoid unnecessary queries $row['allow_oosp'] = Product::isAvailableWhenOutOfStock($row['out_of_stock']); if (Combination::isFeatureActive() && (!isset($row['id_product_attribute']) || !$row['id_product_attribute']) && ((isset($row['cache_default_attribute']) && ($ipa_default = $row['cache_default_attribute']) !== null) || ($ipa_default = Product::getDefaultAttribute($row['id_product'], !$row['allow_oosp'])))) $row['id_product_attribute'] = $ipa_default; if (!Combination::isFeatureActive() || !isset($row['id_product_attribute'])) $row['id_product_attribute'] = 0; // Tax $usetax = Tax::excludeTaxeOption(); $cache_key = $row['id_product'].'-'.$row['id_product_attribute'].'-'.$id_lang.'-'.(int)$usetax; if (isset($row['id_product_pack'])) $cache_key .= '-pack'.$row['id_product_pack']; if (isset(self::$producPropertiesCache[$cache_key])) return self::$producPropertiesCache[$cache_key]; // Datas $row['category'] = Category::getLinkRewrite((int)$row['id_category_default'], (int)$id_lang); $row['link'] = $context->link->getProductLink((int)$row['id_product'], $row['link_rewrite'], $row['category'], $row['ean13']); $row['attribute_price'] = 0; if (isset($row['id_product_attribute']) && $row['id_product_attribute']) $row['attribute_price'] = (float)Product::getProductAttributePrice($row['id_product_attribute']); $row['price_tax_exc'] = Product::getPriceStatic( (int)$row['id_product'], false, ((isset($row['id_product_attribute']) && !empty($row['id_product_attribute'])) ? (int)$row['id_product_attribute'] : null), (self::$_taxCalculationMethod == PS_TAX_EXC ? 2 : 6) ); if (self::$_taxCalculationMethod == PS_TAX_EXC) { $row['price_tax_exc'] = Tools::ps_round($row['price_tax_exc'], 2); $row['price'] = Product::getPriceStatic( (int)$row['id_product'], true, ((isset($row['id_product_attribute']) && !empty($row['id_product_attribute'])) ? (int)$row['id_product_attribute'] : null), 6 ); $row['price_without_reduction'] = Product::getPriceStatic( (int)$row['id_product'], false, ((isset($row['id_product_attribute']) && !empty($row['id_product_attribute'])) ? (int)$row['id_product_attribute'] : null), 2, null, false, false ); } else { $row['price'] = Tools::ps_round( Product::getPriceStatic( (int)$row['id_product'], true, ((isset($row['id_product_attribute']) && !empty($row['id_product_attribute'])) ? (int)$row['id_product_attribute'] : null), 2 ), 2 ); $row['price_without_reduction'] = Product::getPriceStatic( (int)$row['id_product'], true, ((isset($row['id_product_attribute']) && !empty($row['id_product_attribute'])) ? (int)$row['id_product_attribute'] : null), 6, null, false, false ); } $row['reduction'] = Product::getPriceStatic( (int)$row['id_product'], (bool)$usetax, (int)$row['id_product_attribute'], 6, null, true, true, 1, true, null, null, null, $specific_prices ); $row['specific_prices'] = $specific_prices; if ($row['id_product_attribute']) { $row['quantity_all_versions'] = $row['quantity']; $row['quantity'] = Product::getQuantity( (int)$row['id_product'], $row['id_product_attribute'], isset($row['cache_is_pack']) ? $row['cache_is_pack'] : null ); } else $row['quantity'] = Product::getQuantity((int)$row['id_product']); $row['id_image'] = Product::defineProductImage($row, $id_lang); $row['features'] = Product::getFrontFeaturesStatic((int)$id_lang, $row['id_product']); $row['attachments'] = array(); if (!isset($row['cache_has_attachments']) || $row['cache_has_attachments']) $row['attachments'] = Product::getAttachmentsStatic((int)$id_lang, $row['id_product']); $row['virtual'] = ((!isset($row['is_virtual']) || $row['is_virtual']) ? 1 : 0); // ajout pour les couleur dans la liste des produits $colors = array(); $groupcolor = 1; /* O pour afficher aussi les produits hors stock*/ $prodquantity = 0; $attributesGroups = Db::getInstance()->ExecuteS(' SELECT pai.`id_image`, ag.`id_attribute_group`, ag.`is_color_group`, agl.`name` AS group_name, agl.`public_name` AS public_group_name, a.`id_attribute`, al.`name` AS attribute_name, a.`color` AS attribute_color, pa.`id_product_attribute`, pa.`quantity`, pa.`price`, pa.`ecotax`, pa.`weight`, pa.`default_on`, pa.`reference`, pa.`unit_price_impact`, pa.`minimal_quantity` FROM `' . _DB_PREFIX_ . 'product_attribute` pa LEFT JOIN `' . _DB_PREFIX_ . 'product_attribute_combination` pac ON pac.`id_product_attribute` = pa.`id_product_attribute` LEFT JOIN `' . _DB_PREFIX_ . 'product_attribute_image` pai ON pai.`id_product_attribute` = pa.`id_product_attribute` LEFT JOIN `' . _DB_PREFIX_ . 'attribute` a ON a.`id_attribute` = pac.`id_attribute` LEFT JOIN `' . _DB_PREFIX_ . 'attribute_group` ag ON ag.`id_attribute_group` = a.`id_attribute_group` LEFT JOIN `' . _DB_PREFIX_ . 'attribute_lang` al ON a.`id_attribute` = al.`id_attribute` LEFT JOIN `' . _DB_PREFIX_ . 'attribute_group_lang` agl ON ag.`id_attribute_group` = agl.`id_attribute_group` WHERE pa.`id_product` = '.(int)$row['id_product'].' AND al.`id_lang` = '.(int)($id_lang).' AND agl.`id_lang` = '.(int)($id_lang).' AND ag.`is_color_group` = '.$groupcolor.' AND pa.quantity >= '.$prodquantity.' GROUP BY id_attribute '); if (Db::getInstance()->numRows()) { foreach ($attributesGroups AS $k => $rowcolo) { // Color management if (isset($rowcolo['attribute_color']) AND $rowcolo['attribute_color'] ) { $colors[$rowcolo['id_attribute']]['value'] = $rowcolo['attribute_color']; $colors[$rowcolo['id_attribute']]['name'] = $rowcolo['attribute_name']; $colors[$rowcolo['id_attribute']]['id_image'] =(($rowcolo['id_image'] != NULL) ? intval($rowcolo['id_image']) : -1); } } } $row['colors'] = $colors; // Pack management $row['pack'] = (!isset($row['cache_is_pack']) ? Pack::isPack($row['id_product']) : (int)$row['cache_is_pack']); $row['packItems'] = $row['pack'] ? Pack::getItemTable($row['id_product'], $id_lang) : array(); $row['nopackprice'] = $row['pack'] ? Pack::noPackPrice($row['id_product']) : 0; if ($row['pack'] && !Pack::isInStock($row['id_product'])) $row['quantity'] = 0; self::$producPropertiesCache[$cache_key] = $row; return self::$producPropertiesCache[$cache_key]; } } ?> Et Copiez ceci dans themes/votre_theme/product-list.tpl : Remplacer le code de l’image par celui-ci : <img id="img_{$product.id_product}" src="{$link->getImageLink($product.link_rewrite, $product.id_image)}" alt="{$product.legend|escape:'htmlall':'UTF-8'}" height="{$homeSize.height}" width="{$homeSize.width}" /> {if isset($product.colors) && $product.colors} <!-- colors --> <p> {foreach from=$product.colors key='id_attribute' item='color'} <a id="{$product.id_product}-{$color.id_image}" class="color_pick" onclick="document.getElementById('img_{$product.id_product}').src='{$img_prod_dir}{$product.id_product}-{$color.id_image}.jpg'"> <img src="{$img_col_dir}{$id_attribute}.jpg" alt="{$color.name}" /> </a> {/foreach} </p> {/if} Et mettre des images aux attributs couleur, ainsi qu'une couleur par défaut. Link to comment Share on other sites More sharing options...
regielm Posted March 31, 2013 Share Posted March 31, 2013 Merci pour la Réponse AkrOpad mais ça fonctionne pas . si je créé le fichier product.php dans override classes mes images disparaissent il me reste juste le haut du site et quand je clique sur un onglet ( menu haut) plus aucune image et dans product-list je n'ai pas <img id="img_{$product.id_product}" src="{$link->getImageLink($product.link_rewrite, $product.id_image)}" alt="{$product.legend|escape:'htmlall':'UTF-8'}" height="{$homeSize.height}" width="{$homeSize.width}" /> Link to comment Share on other sites More sharing options...
regielm Posted March 31, 2013 Share Posted March 31, 2013 j'ai oublié de préciser que c'est un prestashop version 1.4.8.2 Link to comment Share on other sites More sharing options...
AkrOpad Posted March 31, 2013 Share Posted March 31, 2013 Merci pour la Réponse AkrOpad mais ça fonctionne pas . si je créé le fichier product.php dans override classes mes images disparaissent il me reste juste le haut du site et quand je clique sur un onglet ( menu haut) plus aucune image et dans product-list je n'ai pas <img id="img_{$product.id_product}" src="{$link->getImageLink($product.link_rewrite, $product.id_image)}" alt="{$product.legend|escape:'htmlall':'UTF-8'}" height="{$homeSize.height}" width="{$homeSize.width}" /> Bonjour, Il faut remplacer votre ligne <img src="{$link->getImageLink($product.link_rewrite, $product.id_image, 'prod_cat')}" alt="{$product.legend|escape:'htmlall':'UTF-8'}" /> par <img id="img_{$product.id_product}" src="{$link->getImageLink($product.link_rewrite, $product.id_image)}" alt="{$product.legend|escape:'htmlall':'UTF-8'}" height="{$homeSize.height}" width="{$homeSize.width}" /> Link to comment Share on other sites More sharing options...
regielm Posted March 31, 2013 Share Posted March 31, 2013 ça marche pas , j'ai toujours les produits qui disparaissent ainsi que toute la partie footer quand je clique sur une catégorie il me reste que les catégories sur le left , le reste est vide . je me demande si cela vient pas de la façon de faire le thème parce que j'ai un autre fichier qui me permets d'afficher les produits par déclinaisons dans les catégories plutôt que les produits qui marche sur un autre thème mais pas sur celui ci pourtant un thème acheter sur add on prestashop :/ Link to comment Share on other sites More sharing options...
perle-d-argent Posted April 30, 2013 Share Posted April 30, 2013 Bonjour à tous, je viens de lire et relire tout le topic mais je n'ai pas compris comment faire pour afficher les couleurs des attribut sur la page catégorie. J'ai bien essayer de modifier mon product.php ainsi que le product-list.tpl, j'y ai modifier la ligne <img src="{$link->getImageLink($product.link_rewrite, $product.id_image, 'home_default')}" alt="{$product.legend|escape:'htmlall':'UTF-8'}" {if isset($homeSize)} width="{$homeSize.width}" height="{$homeSize.height}"{/if} /> par : <img id="img_{$product.id_product}" src="{$link->getImageLink($product.link_rewrite, $product.id_image)}" alt="{$product.legend|escape:'htmlall':'UTF-8'}" height="{$homeSize.height}" width="{$homeSize.width}" /> mais impossible de trouver où placer : {if isset($product.colors) && $product.colors} <!-- colors --> <p> {foreach from=$product.colors key='id_attribute' item='color'} <a id="{$product.id_product}-{$color.id_image}" class="color_pick" onclick="document.getElementById('img_{$product.id_product}').src='{$img_prod_dir}{$product.id_product}-{$color.id_image}.jpg'"> <img src="{$img_col_dir}{$id_attribute}.jpg" alt="{$color.name}" /> </a> {/foreach} </p> {/if} Où dois-je copier ca ? Ai-je modifier la bonne ligne ? Ha oui, j'ai une version 1.5.3 de prestashop ... Merci de votre aide. Link to comment Share on other sites More sharing options...
AkrOpad Posted April 30, 2013 Share Posted April 30, 2013 Bonjour à tous, je viens de lire et relire tout le topic mais je n'ai pas compris comment faire pour afficher les couleurs des attribut sur la page catégorie. J'ai bien essayer de modifier mon product.php ainsi que le product-list.tpl, j'y ai modifier la ligne Bonjour, Vous pouvez copier le deuxième bout de code au niveau de la liste des attributs par exemple. Link to comment Share on other sites More sharing options...
perle-d-argent Posted April 30, 2013 Share Posted April 30, 2013 Merci, je l'ai placer et je vois bien une image mais celle ci n’apparaît pas, au survol de la souris, je vois bien la couleur écrite. Comment faire pour régler ca ? Merci d'avance Link to comment Share on other sites More sharing options...
AkrOpad Posted April 30, 2013 Share Posted April 30, 2013 (edited) Merci, je l'ai placer et je vois bien une image mais celle ci n’apparaît pas, au survol de la souris, je vois bien la couleur écrite. Comment faire pour régler ca ? Merci d'avance Les URL simplifiées sont elles activées ? Pour le survol de la souris, dans le code du template il faut remplacer onclick par onmouseover Edited April 30, 2013 by AkrOpad (see edit history) Link to comment Share on other sites More sharing options...
perle-d-argent Posted April 30, 2013 Share Posted April 30, 2013 Merci, c'est impeccable pour le survol, et oui, les url simplifiées sont actives. Que veut dire mettre des image et une couleur par default? Enfin je veut dire, je doit rajouter des images oubien on parle des image et couleurs par default des déclinaison dans notre back-office, si c'est ca j'ai bien tout fait, je ne comprend pas pourquoi ca ne veut pas afficher les cases couleurs. Link to comment Share on other sites More sharing options...
AkrOpad Posted April 30, 2013 Share Posted April 30, 2013 Merci, c'est impeccable pour le survol, et oui, les url simplifiées sont actives. Que veut dire mettre des image et une couleur par default? Enfin je veut dire, je doit rajouter des images oubien on parle des image et couleurs par default des déclinaison dans notre back-office, si c'est ca j'ai bien tout fait, je ne comprend pas pourquoi ca ne veut pas afficher les cases couleurs. Il faut mettre des image de couleur et une valeur par défaut à chaque attribut couleur. Exemple allez dans : Attributs et groupes > Cliquez sur plus de détails de Votre Groupe de couleurs > Editez vos couleurs précédemment crées et ajoutez une petite image de texture de taille 16x16 pixels par exemple. Link to comment Share on other sites More sharing options...
perle-d-argent Posted April 30, 2013 Share Posted April 30, 2013 Ha merci beaucoup ;-) tout fonctionne bien. 1 Link to comment Share on other sites More sharing options...
perle-d-argent Posted May 2, 2013 Share Posted May 2, 2013 Bonsoir a tous, alors voila, j'ai bien ce que je voulais, à savoir des cases de couleurs pour mes produit avec déclinaisons sur la page catégorie. Mais, je viens de m'apercevoir que le menu déroulant des déclinaison sur la page produit à été modifier, et je me retrouve avec des cases de couleurs à la place. Sauriez-vous comment conserver les cases de couleur sur la page catégorie, mais retrouver mon menu déroulant sur la page produit? Merci pour votre aide ;-) Link to comment Share on other sites More sharing options...
perle-d-argent Posted May 4, 2013 Share Posted May 4, 2013 Personne pour m'aider ? Link to comment Share on other sites More sharing options...
perle-d-argent Posted May 9, 2013 Share Posted May 9, 2013 S'il vous plait ........ :-( Link to comment Share on other sites More sharing options...
perle-d-argent Posted May 11, 2013 Share Posted May 11, 2013 Toujours pas d'idées ? Link to comment Share on other sites More sharing options...
floxator Posted May 18, 2013 Share Posted May 18, 2013 Bonjour, Je déterre un peu ce topic pour savoir comment "actualiser" les prix et l'image si on affiche les déclinaisons dans le product-list? Sous prestashop 1.5 j'ai réussi à créer un bouton par déclinaison mais l'image associée et le prix n'est pas inclu dans la balise. Bref, je voulais savoir comment améliorer le code ou peut être ce qu'il faut coder en javascript pour pouvoir cliquer sur un attribut et modifier au clic l'image et le prix (toujours dans la product-list. Pour info j'ai utiliser le code donner par aKropad pour afficher les attributs. Merci pour vos réponses. Link to comment Share on other sites More sharing options...
Lotfi69 Posted July 13, 2013 Share Posted July 13, 2013 Bonjour, J'ai testé votre code en long en large et en travers mais rien y fait je pense que c'est du au fait que je suis sur la dernière version de prestashop et qu'il y à des différences que je n'arrive pas à régler. Auriez vous une solution pour que cela fonctionne sous la dernière version de prestashop? ou y a t'il quelque chose de mal que je fait c'est dans doute possible ! D'avance merci pour votre aide ! Link to comment Share on other sites More sharing options...
papich Posted July 14, 2013 Share Posted July 14, 2013 +1 pour lotfi69 mais qu'as tu fais exactement? Link to comment Share on other sites More sharing options...
Lotfi69 Posted July 15, 2013 Share Posted July 15, 2013 Bonjour et merci de m'avoir lu ! Alors j'ai fais exactement comme dans l'explication et sur différents tutoriel trouvé sur le net. j'ai créer le fichier CategoryController.php dans le dossier override/classes et j'ai fait les modifications dans le fichier product_list.tpl mais rien n'y fait j'ai ma première condition if qui ne passe déjà pas alors pour le reste .... Enfin bref j'ai vu que dans la dernière version de prestashop que dans le dossier override/classes il y avait deux autre dossier qui sont font et admin. y a t'il l'équivalent sur les autres versions de prestashop? Au cas ou j'ai essayé de placé CategoryController.php dans le dossier font mais ça ne marche pas mieux. Si tu as une idée je suis preneur vraiment ! Pour le code utilisé c'est un copier coller de ce qu'il y a écrit plus tôt sur ce même topic. Vraiment merci d'avance si je peux avoir votre aide ! Si je n'ai pas été assez clair hésitez pas me le signaler ! Link to comment Share on other sites More sharing options...
Lotfi69 Posted July 19, 2013 Share Posted July 19, 2013 Petit Up ! Désolé d'insisté mais n'y a t'il pas une personne qui a utilisé cette méthode en version 1.5.4.1 de prestashop et pour qui ça a marché ? Si c'est le cas sincèrement merci de me joindre soit en pv soit ici : [email protected]. D'avance Merci ! Cordialement Link to comment Share on other sites More sharing options...
AkrOpad Posted July 19, 2013 Share Posted July 19, 2013 Petit Up ! Désolé d'insisté mais n'y a t'il pas une personne qui a utilisé cette méthode en version 1.5.4.1 de prestashop et pour qui ça a marché ? Si c'est le cas sincèrement merci de me joindre soit en pv soit ici : [email protected]. D'avance Merci ! Cordialement Bonjour, Avec beaucoup de retard, vous voulez simplement afficher la liste des couleurs dans la liste des produits, c'est bien ça ? Dans ce cas, allez faire un tour sur mon site vous trouverez la solution. PS : Vérifiez bien que vos valeurs couleurs on bien une image et un code couleur par défaut. Cordialement, Link to comment Share on other sites More sharing options...
Lotfi69 Posted July 19, 2013 Share Posted July 19, 2013 Les couleurs doivent obligatoirement avoir les deux ? ou juste une couleur ou une image? Aurais je du avoir un résultat malgré tout? car de ce que je vois la condition n'est pas prise en compte. je n'ai rien d'afficher en html . Link to comment Share on other sites More sharing options...
AkrOpad Posted July 19, 2013 Share Posted July 19, 2013 Les couleurs doivent obligatoirement avoir les deux ? ou juste une couleur ou une image? Aurais je du avoir un résultat malgré tout? car de ce que je vois la condition n'est pas prise en compte. je n'ai rien d'afficher en html . Oui les deux ! Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now