Jump to content

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

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

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

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

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

Link to comment
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 . :)

 

 

 

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

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

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

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

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

Link to comment
Share on other sites

Create an account or sign in to comment

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

Create an account

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

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...