Jump to content
Hardwell

Afficher catégorie par défaut dans product-list.tpl

Recommended Posts

Bonjour tout le monde,

 

Ma requête du jour: concrètement je veux simplement afficher le nom de la catégorie par défaut du produit dans product-list.tpl, pour l'instant j'arrive à afficher l'URL réécrite de la catégorie mais pas son nom...

 

Comment dois-je m'y prendre ?

 

Merci pour votre aide

Share this post


Link to post
Share on other sites

Bonjour tout le monde,

 

Ma requête du jour: concrètement je veux simplement afficher le nom de la catégorie par défaut du produit dans product-list.tpl, pour l'instant j'arrive à afficher l'URL réécrite de la catégorie mais pas son nom...

 

Comment dois-je m'y prendre ?

 

Merci pour votre aide

 

Hello ,

 

essaye 

{$product.category_default}

Share this post


Link to post
Share on other sites

Merci Broceliande mais ta solution ne donne rien, rien ne s'affiche :/

 

Edit: je suis sous presta 1.5.2 si ça peut aider

Edited by Hardwell (see edit history)

Share this post


Link to post
Share on other sites

Merci Broceliande mais ta solution ne donne rien, rien ne s'affiche :/

 

Edit: je suis sous presta 1.5.2 si ça peut aider

 

Je peux voir les quelques lignes de code concernées stp ? 

Share this post


Link to post
Share on other sites
<h3>{$product.category_default}</h3><a href="{$product.link|escape:'htmlall':'UTF-8'}" title="{$product.name|escape:'htmlall':'UTF-8'}">{$product.name|escape:'htmlall':'UTF-8'}</a>

Si tu as besoin de plus n'hésite pas

Share this post


Link to post
Share on other sites
<h3>{$product.category_default}</h3><a href="{$product.link|escape:'htmlall':'UTF-8'}" title="{$product.name|escape:'htmlall':'UTF-8'}">{$product.name|escape:'htmlall':'UTF-8'}</a>

Si tu as besoin de plus n'hésite pas

 

 

 

Ben écoute j'ai pas de 1.5.2 sous la main mais si je mets <h3>{$product.category_default}</h3> dans mon code j'ai bien la catégories par défaut qui s'affiche .

Il faudrait activer la console de debug smarty pour vérifier la présence de la variable, même vide (dans le tableau $products ) .

Si les n'y est pas c'est qu'elle n'est pas présente sur 1.5.2 , si elle y est mais vide c'est qu'il y a un autre problème 

Share this post


Link to post
Share on other sites

Bon sur 1.5.1.0 le champ n'existe pas dans smarty , fort possible donc qu'il ne soit apparu que dans la 1.5.3 ou 1.5.4... :(

Share this post


Link to post
Share on other sites

Une info de plus : dans la 1.5.2 comme sur 1.5.1 , le champ est bien dans la requete effectuée par Category->getProducts , cf tout à la fin du code ci-dessous :

$sql = 'SELECT p.*, product_shop.*, stock.out_of_stock, IFNULL(stock.quantity, 0) as quantity, product_attribute_shop.`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`, image_shop.`id_image`,
il.`legend`, m.`name` AS manufacturer_name, tl.`name` AS tax_name, t.`rate`, cl.`name` AS category_default,

Donc il est fort probable qu'il y ait un problème autre , il faudrait loguer la requête et son résultat .

Share this post


Link to post
Share on other sites

Aïe ! ^^

Le champs n'est pas intégrable sur la 1.5.2 selon toi ?

 

Si c'est forcément possible, pas sans avoir identifié ce qui la rend inaccessible en revanche. Faut placer quelques points de debug pour le savoir , le site est en ligne ? 

Share this post


Link to post
Share on other sites

Oui le site est en ligne

 

EDIT: dans mon product.tpl je peux faire apparaître la catégorie par défaut avec cela: {$category->name|escape:'htmlall':'UTF-8'}

 

il n'y a pas moyen de la "prélever" pour l'afficher dans la product-list ?

Edited by Hardwell (see edit history)

Share this post


Link to post
Share on other sites

Pas de cette manière non , dans product.tpl par exemple $product est un objet , dans product-list c'est un tableau associatif ... De plus tu as de la chance parce que $category n'est pas la catégorie par défaut du produit mais la catégorie active ... 

 

Non je t'ai dis la seule chose à faire est de voir pourquoi cette fonctionnalité native normalement prévue (le champ category_default ) , n'est pas effective sur cette version . 

Share this post


Link to post
Share on other sites

Pas de cette manière non , dans product.tpl par exemple $product est un objet , dans product-list c'est un tableau associatif ... De plus tu as de la chance parce que $category n'est pas la catégorie par défaut du produit mais la catégorie active ... 

 

Non je t'ai dis la seule chose à faire est de voir pourquoi cette fonctionnalité native normalement prévue (le champ category_default ) , n'est pas effective sur cette version . 

Entendu, comment me conseilles-tu de faire ?

Share this post


Link to post
Share on other sites

Alors, 

 

Ligne 666 en principe du fichier /classes/Category.php  , juste avant la ligne : 

$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);

Tu insères ce code là : 

$logger = new FileLogger();
$logger->setFilename(_PS_ROOT_DIR_.'/log/product-list.log');
$logger->logInfo($sql);

Pour info Apache doit avoir les droits en écriture sur le dossier /log mais c'est en principe prérequis à l'installation.

 

Tu vas alors sur le site cliquer sur une catégorie , puis dans le dossier log tu récupère product-list.log qui aura été créé , et tu le postes ici . :)

 

 

 

Share this post


Link to post
Share on other sites

 

Alors, 

 

Ligne 666 en principe du fichier /classes/Category.php  , juste avant la ligne : 

$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);

Tu insères ce code là : 

$logger = new FileLogger();
$logger->setFilename(_PS_ROOT_DIR_.'/log/product-list.log');
$logger->logInfo($sql);

Pour info Apache doit avoir les droits en écriture sur le dossier /log mais c'est en principe prérequis à l'installation.

 

Tu vas alors sur le site cliquer sur une catégorie , puis dans le dossier log tu récupère product-list.log qui aura été créé , et tu le postes ici . :)

 

 

 

 

 

Voici le résultat:

*INFO* 	2013/09/19 - 16:38:00: SELECT p.*, product_shop.*, stock.out_of_stock, IFNULL(stock.quantity, 0) as quantity, product_attribute_shop.`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`, image_shop.`id_image`,
					il.`legend`, m.`name` AS manufacturer_name, tl.`name` AS tax_name, t.`rate`, cl.`name` AS category_default,
					DATEDIFF(product_shop.`date_add`, DATE_SUB(NOW(),
					INTERVAL 0
						DAY)) > 0 AS new,
					(product_shop.`price` * IF(t.`rate`,((100 + (t.`rate`))/100),1)) AS orderprice
				FROM `ps_category_product` cp
				LEFT JOIN `ps_product` p
					ON p.`id_product` = cp.`id_product`
				 INNER JOIN ps_product_shop product_shop
		ON (product_shop.id_product = p.id_product AND product_shop.id_shop = 1)
				LEFT JOIN `ps_product_attribute` pa
				ON (p.`id_product` = pa.`id_product`)
				 LEFT JOIN ps_product_attribute_shop product_attribute_shop
		ON (product_attribute_shop.id_product_attribute = pa.id_product_attribute AND product_attribute_shop.id_shop = 1 AND product_attribute_shop.`default_on` = 1)
				 LEFT 
			JOIN ps_stock_available stock
			ON (stock.id_product = p.id_product AND stock.id_product_attribute = IFNULL(`product_attribute_shop`.id_product_attribute, 0) AND stock.id_shop = 1  )
				LEFT JOIN `ps_category_lang` cl
					ON (product_shop.`id_category_default` = cl.`id_category`
					AND cl.`id_lang` = 5 AND cl.id_shop = 1 )
				LEFT JOIN `ps_product_lang` pl
					ON (p.`id_product` = pl.`id_product`
					AND pl.`id_lang` = 5 AND pl.id_shop = 1 )
				LEFT JOIN `ps_image` i
					ON (i.`id_product` = p.`id_product`) LEFT JOIN ps_image_shop image_shop
		ON (image_shop.id_image = i.id_image AND image_shop.id_shop = 1 AND image_shop.cover=1)
				LEFT JOIN `ps_image_lang` il
					ON (image_shop.`id_image` = il.`id_image`
					AND il.`id_lang` = 5)
				LEFT JOIN `ps_tax_rule` tr
					ON (product_shop.`id_tax_rules_group` = tr.`id_tax_rules_group`
					AND tr.`id_country` = 8
					AND tr.`id_state` = 0
					AND tr.`zipcode_from` = 0)
				LEFT JOIN `ps_tax` t
					ON (t.`id_tax` = tr.`id_tax`)
				LEFT JOIN `ps_tax_lang` tl
					ON (t.`id_tax` = tl.`id_tax`
					AND tl.`id_lang` = 5)
				LEFT JOIN `ps_manufacturer` m
					ON m.`id_manufacturer` = p.`id_manufacturer`
				WHERE product_shop.`id_shop` = 1
				AND (pa.id_product_attribute IS NULL OR product_attribute_shop.id_shop=1) 
				AND (i.id_image IS NULL OR image_shop.id_shop=1)
					AND cp.`id_category` = 162 AND product_shop.`active` = 1 AND product_shop.`visibility` IN ("both", "catalog") ORDER BY p.`date_add` desc
			LIMIT 0,100
*INFO* 	2013/09/19 - 16:38:27: SELECT p.*, product_shop.*, stock.out_of_stock, IFNULL(stock.quantity, 0) as quantity, product_attribute_shop.`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`, image_shop.`id_image`,
					il.`legend`, m.`name` AS manufacturer_name, tl.`name` AS tax_name, t.`rate`, cl.`name` AS category_default,
					DATEDIFF(product_shop.`date_add`, DATE_SUB(NOW(),
					INTERVAL 0
						DAY)) > 0 AS new,
					(product_shop.`price` * IF(t.`rate`,((100 + (t.`rate`))/100),1)) AS orderprice
				FROM `ps_category_product` cp
				LEFT JOIN `ps_product` p
					ON p.`id_product` = cp.`id_product`
				 INNER JOIN ps_product_shop product_shop
		ON (product_shop.id_product = p.id_product AND product_shop.id_shop = 1)
				LEFT JOIN `ps_product_attribute` pa
				ON (p.`id_product` = pa.`id_product`)
				 LEFT JOIN ps_product_attribute_shop product_attribute_shop
		ON (product_attribute_shop.id_product_attribute = pa.id_product_attribute AND product_attribute_shop.id_shop = 1 AND product_attribute_shop.`default_on` = 1)
				 LEFT 
			JOIN ps_stock_available stock
			ON (stock.id_product = p.id_product AND stock.id_product_attribute = IFNULL(`product_attribute_shop`.id_product_attribute, 0) AND stock.id_shop = 1  )
				LEFT JOIN `ps_category_lang` cl
					ON (product_shop.`id_category_default` = cl.`id_category`
					AND cl.`id_lang` = 5 AND cl.id_shop = 1 )
				LEFT JOIN `ps_product_lang` pl
					ON (p.`id_product` = pl.`id_product`
					AND pl.`id_lang` = 5 AND pl.id_shop = 1 )
				LEFT JOIN `ps_image` i
					ON (i.`id_product` = p.`id_product`) LEFT JOIN ps_image_shop image_shop
		ON (image_shop.id_image = i.id_image AND image_shop.id_shop = 1 AND image_shop.cover=1)
				LEFT JOIN `ps_image_lang` il
					ON (image_shop.`id_image` = il.`id_image`
					AND il.`id_lang` = 5)
				LEFT JOIN `ps_tax_rule` tr
					ON (product_shop.`id_tax_rules_group` = tr.`id_tax_rules_group`
					AND tr.`id_country` = 8
					AND tr.`id_state` = 0
					AND tr.`zipcode_from` = 0)
				LEFT JOIN `ps_tax` t
					ON (t.`id_tax` = tr.`id_tax`)
				LEFT JOIN `ps_tax_lang` tl
					ON (t.`id_tax` = tl.`id_tax`
					AND tl.`id_lang` = 5)
				LEFT JOIN `ps_manufacturer` m
					ON m.`id_manufacturer` = p.`id_manufacturer`
				WHERE product_shop.`id_shop` = 1
				AND (pa.id_product_attribute IS NULL OR product_attribute_shop.id_shop=1) 
				AND (i.id_image IS NULL OR image_shop.id_shop=1)
					AND cp.`id_category` = 22 AND product_shop.`active` = 1 AND product_shop.`visibility` IN ("both", "catalog") ORDER BY p.`date_add` desc
			LIMIT 0,100
*INFO* 	2013/09/19 - 16:39:02: SELECT p.*, product_shop.*, stock.out_of_stock, IFNULL(stock.quantity, 0) as quantity, product_attribute_shop.`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`, image_shop.`id_image`,
					il.`legend`, m.`name` AS manufacturer_name, tl.`name` AS tax_name, t.`rate`, cl.`name` AS category_default,
					DATEDIFF(product_shop.`date_add`, DATE_SUB(NOW(),
					INTERVAL 0
						DAY)) > 0 AS new,
					(product_shop.`price` * IF(t.`rate`,((100 + (t.`rate`))/100),1)) AS orderprice
				FROM `ps_category_product` cp
				LEFT JOIN `ps_product` p
					ON p.`id_product` = cp.`id_product`
				 INNER JOIN ps_product_shop product_shop
		ON (product_shop.id_product = p.id_product AND product_shop.id_shop = 1)
				LEFT JOIN `ps_product_attribute` pa
				ON (p.`id_product` = pa.`id_product`)
				 LEFT JOIN ps_product_attribute_shop product_attribute_shop
		ON (product_attribute_shop.id_product_attribute = pa.id_product_attribute AND product_attribute_shop.id_shop = 1 AND product_attribute_shop.`default_on` = 1)
				 LEFT 
			JOIN ps_stock_available stock
			ON (stock.id_product = p.id_product AND stock.id_product_attribute = IFNULL(`product_attribute_shop`.id_product_attribute, 0) AND stock.id_shop = 1  )
				LEFT JOIN `ps_category_lang` cl
					ON (product_shop.`id_category_default` = cl.`id_category`
					AND cl.`id_lang` = 5 AND cl.id_shop = 1 )
				LEFT JOIN `ps_product_lang` pl
					ON (p.`id_product` = pl.`id_product`
					AND pl.`id_lang` = 5 AND pl.id_shop = 1 )
				LEFT JOIN `ps_image` i
					ON (i.`id_product` = p.`id_product`) LEFT JOIN ps_image_shop image_shop
		ON (image_shop.id_image = i.id_image AND image_shop.id_shop = 1 AND image_shop.cover=1)
				LEFT JOIN `ps_image_lang` il
					ON (image_shop.`id_image` = il.`id_image`
					AND il.`id_lang` = 5)
				LEFT JOIN `ps_tax_rule` tr
					ON (product_shop.`id_tax_rules_group` = tr.`id_tax_rules_group`
					AND tr.`id_country` = 8
					AND tr.`id_state` = 0
					AND tr.`zipcode_from` = 0)
				LEFT JOIN `ps_tax` t
					ON (t.`id_tax` = tr.`id_tax`)
				LEFT JOIN `ps_tax_lang` tl
					ON (t.`id_tax` = tl.`id_tax`
					AND tl.`id_lang` = 5)
				LEFT JOIN `ps_manufacturer` m
					ON m.`id_manufacturer` = p.`id_manufacturer`
				WHERE product_shop.`id_shop` = 1
				AND (pa.id_product_attribute IS NULL OR product_attribute_shop.id_shop=1) 
				AND (i.id_image IS NULL OR image_shop.id_shop=1)
					AND cp.`id_category` = 156 AND product_shop.`active` = 1 AND product_shop.`visibility` IN ("both", "catalog") ORDER BY p.`date_add` desc
			LIMIT 0,100

Share this post


Link to post
Share on other sites

Ok donc foncièrement la requête est bonne , il y a donc une merdouille au niveau de tes tables, la faudrait que je regarde en place (accès phpmyafmin et backoffice , même temporaires et bien sûr en PM) , pour vérifier l'intégrité 

Il doit manquer une correspondance id_lang ou id_shop dans un truc 

Edited by Broceliande (see edit history)

Share this post


Link to post
Share on other sites

Il est vrai que j'avais repéré un truc avec le id_lang mais je t'avoue avoir tellement cherché que je ne sais plus où !

Selon toi il faut modifier quel fichier ?

Share this post


Link to post
Share on other sites

Il est vrai que j'avais repéré un truc avec le id_lang mais je t'avoue avoir tellement cherché que je ne sais plus où !

Selon toi il faut modifier quel fichier ?

ce n'est pas un fichier mais plusieurs tables dont il faut vérifier l'intégrité et qu'il faut fixer avec des requetes ciblées

Share this post


Link to post
Share on other sites

Ah oui d'accord... et selon toi question référencement, si je reprend à la place le titre de la catégorie active, par exemple Peugeot et que je la met dans ma balise <h3>, cela remplit le même rôle mais si le produit est dans plusieurs catégories, le h3 sera différent, niveau SEO ça craint ?

Share this post


Link to post
Share on other sites

Ah oui d'accord... et selon toi question référencement, si je reprend à la place le titre de la catégorie active, par exemple Peugeot et que je la met dans ma balise <h3>, cela remplit le même rôle mais si le produit est dans plusieurs catégories, le h3 sera différent, niveau SEO ça craint ?

 

Pour moi oui c pas top , j'avais dans l'idée que tu ferais une concaténation des deux : catégorie par défaut et nom produit , je pensais que ton h3 était juste pour test 

Share this post


Link to post
Share on other sites

Pour moi oui c pas top , j'avais dans l'idée que tu ferais une concaténation des deux : catégorie par défaut et nom produit , je pensais que ton h3 était juste pour test 

 

C'était mon but effectivement et pas dans une balise h3 juste en <p>. Au final je crois que je vais laisser uniquement le nom du produit qui plus est, il reprend la marque dans le nom donc bon. Pour les noms de produits dans le product-list il vaut mieux quelle balise ?

Share this post


Link to post
Share on other sites

ah ben pour le noms de produit c'est {$product.name}

Ca je savais lol mais le balisage à mettre autour ?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

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