Hardwell Posted September 19, 2013 Share Posted September 19, 2013 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 More sharing options...
Broceliande Posted September 19, 2013 Share Posted September 19, 2013 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 More sharing options...
Hardwell Posted September 19, 2013 Author Share Posted September 19, 2013 (edited) 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 September 19, 2013 by Hardwell (see edit history) Link to comment Share on other sites More sharing options...
Broceliande Posted September 19, 2013 Share Posted September 19, 2013 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 ? Link to comment Share on other sites More sharing options...
Hardwell Posted September 19, 2013 Author Share Posted September 19, 2013 <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 Link to comment Share on other sites More sharing options...
Broceliande Posted September 19, 2013 Share Posted September 19, 2013 <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 More sharing options...
Broceliande Posted September 19, 2013 Share Posted September 19, 2013 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... Link to comment Share on other sites More sharing options...
Hardwell Posted September 19, 2013 Author Share Posted September 19, 2013 Aïe ! ^^ Le champs n'est pas intégrable sur la 1.5.2 selon toi ? Link to comment Share on other sites More sharing options...
Broceliande Posted September 19, 2013 Share Posted September 19, 2013 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 More sharing options...
Broceliande Posted September 19, 2013 Share Posted September 19, 2013 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 ? Link to comment Share on other sites More sharing options...
Hardwell Posted September 19, 2013 Author Share Posted September 19, 2013 (edited) 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 September 19, 2013 by Hardwell (see edit history) Link to comment Share on other sites More sharing options...
Broceliande Posted September 19, 2013 Share Posted September 19, 2013 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 More sharing options...
Hardwell Posted September 19, 2013 Author Share Posted September 19, 2013 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 More sharing options...
Broceliande Posted September 19, 2013 Share Posted September 19, 2013 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 More sharing options...
Hardwell Posted September 19, 2013 Author Share Posted September 19, 2013 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 More sharing options...
Broceliande Posted September 19, 2013 Share Posted September 19, 2013 (edited) 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 September 19, 2013 by Broceliande (see edit history) Link to comment Share on other sites More sharing options...
Hardwell Posted September 19, 2013 Author Share Posted September 19, 2013 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 ? Link to comment Share on other sites More sharing options...
Broceliande Posted September 19, 2013 Share Posted September 19, 2013 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 More sharing options...
Hardwell Posted September 19, 2013 Author Share Posted September 19, 2013 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 More sharing options...
Broceliande Posted September 19, 2013 Share Posted September 19, 2013 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 More sharing options...
Hardwell Posted September 19, 2013 Author Share Posted September 19, 2013 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 More sharing options...
Broceliande Posted September 19, 2013 Share Posted September 19, 2013 ah ben pour le noms de produit c'est {$product.name} Link to comment Share on other sites More sharing options...
Hardwell Posted September 19, 2013 Author Share Posted September 19, 2013 ah ben pour le noms de produit c'est {$product.name} Ca je savais lol mais le balisage à mettre autour ? 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