Julien33000 Posted June 3, 2013 Share Posted June 3, 2013 (edited) Bonjour, Je souhaiterais définir une structure générique pour mes balises META TITLE sur toutes mes pages produits. Par exemple avoir en permanance cette structure la: "MARQUE - NOM DU PRODUIT - SOUS CATEGORIE" Il existe des module dans le genre de "SEO auto fill" mais qui ne sont pas pratique du tout car il faut regénérer toutes les balises Titles produit dès qu'on en créé des nouveaux. Est-il possible de définir cette règle directement dans le code ? J'ai vu qu'on pouvait gérer le META.PHP dans l'override mais je ne connais pas le type de code à mettre. Merci d'avance pour vos réponses. Edited June 3, 2013 by eric1566 (see edit history) 1 Link to comment Share on other sites More sharing options...
Christophe Boix Posted June 3, 2013 Share Posted June 3, 2013 (edited) Bonjour Eric, Pour la version 1.5 : Code à mettre dans Override/classes/Meta.Php (ou créer le fichier si inexistant) : <?php class Meta extends MetaCore { public static function getProductMetas($id_product, $id_lang, $page_name) { $sql = 'SELECT `name`, `meta_title`, `meta_description`, `meta_keywords`, `description_short`, p.id_manufacturer,m.name as manufacturer_name, cl.name as category_name FROM `'._DB_PREFIX_.'product` p LEFT JOIN `'._DB_PREFIX_.'product_lang` pl ON (pl.`id_product` = p.`id_product`'.Shop::addSqlRestrictionOnLang('pl').') '.Shop::addSqlAssociation('product', 'p').' LEFT JOIN `'._DB_PREFIX_.'category_lang` cl ON (cl.`id_category` = cl.`id_category_default`) LEFT JOIN `'._DB_PREFIX_.'manufacturer` m ON (m.`id_manufacturer` = p.`id_manufacturer`) WHERE pl.id_lang = '.(int)$id_lang.' AND pl.id_product = '.(int)$id_product.' AND product_shop.active = 1'; if ($row = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow($sql)) { if (empty($row['meta_description'])) $row['meta_description'] = strip_tags($row['description_short']); /* Personnaliser ici le code qui apparaitra dans la balise TITLE de la fiche produit */ $newMeta=""; if(!empty($row['manufacturer_name'])) $newMeta.=$row['manufacturer_name']." - "; $newMeta.=$row['name']; if(!empty($row['category_name'])) $newMeta.=" - ".$row['category_name']; /* Fin newMeta */ $row['meta_title']=$newMeta; return Meta::completeMetaTags($row, $row['name']); } return Meta::getHomeMetas($id_lang, $page_name); } } Pour la version 1.4 : Il suffit de modifier la fonction getMetaTags dans le fichier Tools.php avec le code suivant (la modification se trouve dans le 2ème IF, le reste est identique) : public static function getMetaTags($id_lang, $page_name) { global $maintenance; if (!(isset($maintenance) AND (!in_array(Tools::getRemoteAddr(), explode(',', Configuration::get('PS_MAINTENANCE_IP')))))) { /* Products specifics meta tags */ if ($id_product = self::getValue('id_product')) { $row = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow(' SELECT pl.`name`, `meta_title`, `meta_description`, `meta_keywords`, `description_short`, p.id_manufacturer,m.name as manufacturer_name, cl.name as category_name FROM `'._DB_PREFIX_.'product` p LEFT JOIN `'._DB_PREFIX_.'product_lang` pl ON (pl.`id_product` = p.`id_product`) LEFT JOIN `'._DB_PREFIX_.'category_lang` cl ON (cl.`id_category` = cl.`id_category_default`) LEFT JOIN `'._DB_PREFIX_.'manufacturer` m ON (m.`id_manufacturer` = p.`id_manufacturer`) WHERE pl.id_lang = '.(int)($id_lang).' AND pl.id_product = '.(int)($id_product).' AND p.active = 1'); if ($row) { if (empty($row['meta_description'])) $row['meta_description'] = strip_tags($row['description_short']); /* Personnaliser ici le code qui apparaitra dans la balise TITLE de la fiche produit */ $newMeta=""; if(!empty($row['manufacturer_name'])) $newMeta.=$row['manufacturer_name']." - "; $newMeta.=$row['name']; if(!empty($row['category_name'])) $newMeta.=" - ".$row['category_name']; /* Fin newMeta */ $row['meta_title']=$newMeta; return self::completeMetaTags($row, $row['name']); } } /* Categories specifics meta tags */ elseif ($id_category = self::getValue('id_category')) { $row = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow(' SELECT `name`, `meta_title`, `meta_description`, `meta_keywords`, `description` FROM `'._DB_PREFIX_.'category_lang` WHERE id_lang = '.(int)($id_lang).' AND id_category = '.(int)($id_category)); if ($row) { if (empty($row['meta_description'])) $row['meta_description'] = strip_tags($row['description']); return self::completeMetaTags($row, $row['name']); } } /* Manufacturers specifics meta tags */ elseif ($id_manufacturer = self::getValue('id_manufacturer')) { $row = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow(' SELECT `name`, `meta_title`, `meta_description`, `meta_keywords` FROM `'._DB_PREFIX_.'manufacturer_lang` ml LEFT JOIN `'._DB_PREFIX_.'manufacturer` m ON (ml.`id_manufacturer` = m.`id_manufacturer`) WHERE ml.id_lang = '.(int)($id_lang).' AND ml.id_manufacturer = '.(int)($id_manufacturer)); if ($row) { if (empty($row['meta_description'])) $row['meta_description'] = strip_tags($row['meta_description']); if (!empty($row['meta_title'])) $row['meta_title'] = $row['meta_title'].' - '.Configuration::get('PS_SHOP_NAME'); return self::completeMetaTags($row, $row['name']); } } /* Suppliers specifics meta tags */ elseif ($id_supplier = self::getValue('id_supplier')) { $row = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow(' SELECT `name`, `meta_title`, `meta_description`, `meta_keywords` FROM `'._DB_PREFIX_.'supplier_lang` sl LEFT JOIN `'._DB_PREFIX_.'supplier` s ON (sl.`id_supplier` = s.`id_supplier`) WHERE sl.id_lang = '.(int)($id_lang).' AND sl.id_supplier = '.(int)($id_supplier)); if ($row) { if (empty($row['meta_description'])) $row['meta_description'] = strip_tags($row['meta_description']); if (!empty($row['meta_title'])) $row['meta_title'] = $row['meta_title'].' - '.Configuration::get('PS_SHOP_NAME'); return self::completeMetaTags($row, $row['name']); } } /* CMS specifics meta tags */ elseif ($id_cms = self::getValue('id_cms')) { $row = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow(' SELECT `meta_title`, `meta_description`, `meta_keywords` FROM `'._DB_PREFIX_.'cms_lang` WHERE id_lang = '.(int)($id_lang).' AND id_cms = '.(int)($id_cms)); if ($row) { $row['meta_title'] = $row['meta_title'].' - '.Configuration::get('PS_SHOP_NAME'); return self::completeMetaTags($row, $row['meta_title']); } } /* CMS category specifics meta tags */ elseif ($id_cms = self::getValue('id_cms_category')) { $row = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow(' SELECT `meta_title`, `meta_description`, `meta_keywords` FROM `'._DB_PREFIX_.'cms_category_lang` WHERE id_lang = '.(int)($id_lang).' AND id_cms_category = '.(int)($id_cms)); if ($row) { $row['meta_title'] = $row['meta_title'].' - '.Configuration::get('PS_SHOP_NAME'); return self::completeMetaTags($row, $row['meta_title']); } } } /* Default meta tags */ return self::getHomeMetaTags($id_lang, $page_name); } Edited June 4, 2013 by Christophe Boix (see edit history) 1 Link to comment Share on other sites More sharing options...
Christophe Boix Posted June 3, 2013 Share Posted June 3, 2013 (edited) Je modifie pour faire correspondre parfaitement à ton besoin et qui permet de ne pas afficher les tirets si la marque ou la catégorie est vide : if ($row) { if (empty($row['meta_description'])) $row['meta_description'] = strip_tags($row['description_short']); // return self::completeMetaTags($row, $row['name']); /* Personnaliser ici le code qui apparaitra dans la balise TITLE de la fiche produit */ $newMeta=""; if($row['manufacturer_name']!="") $newMeta.=$row['manufacturer_name']." - "; $newMeta.=$row['name']; if($row['category_name']!="") $newMeta.=" - ".$row['category_name']; /* Fin newMeta */ $row['meta_title']=$newMeta; return self::completeMetaTags($row, $row['name']); } Edited June 3, 2013 by Christophe Boix (see edit history) 1 Link to comment Share on other sites More sharing options...
Julien33000 Posted June 3, 2013 Author Share Posted June 3, 2013 Merci beaucoup Christophe pour ta réponse claire et rapide ! 1 Link to comment Share on other sites More sharing options...
Christophe Boix Posted June 4, 2013 Share Posted June 4, 2013 ah attend ce code était pour la 1.4 , je met une copie ci-dessous pour la 1.5 Link to comment Share on other sites More sharing options...
Christophe Boix Posted June 4, 2013 Share Posted June 4, 2013 Voici le code pour la 1.5, dans Override/classes/Meta.Php : public static function getProductMetas($id_product, $id_lang, $page_name) { $sql = 'SELECT `name`, `meta_title`, `meta_description`, `meta_keywords`, `description_short`, p.id_manufacturer,m.name as manufacturer_name, cl.name as category_name FROM `'._DB_PREFIX_.'product` p LEFT JOIN `'._DB_PREFIX_.'product_lang` pl ON (pl.`id_product` = p.`id_product`'.Shop::addSqlRestrictionOnLang('pl').') '.Shop::addSqlAssociation('product', 'p').' LEFT JOIN `'._DB_PREFIX_.'category_lang` cl ON (cl.`id_category` = cl.`id_category_default`) LEFT JOIN `'._DB_PREFIX_.'manufacturer` m ON (m.`id_manufacturer` = p.`id_manufacturer`) WHERE pl.id_lang = '.(int)$id_lang.' AND pl.id_product = '.(int)$id_product.' AND product_shop.active = 1'; if ($row = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow($sql)) { if (empty($row['meta_description'])) $row['meta_description'] = strip_tags($row['description_short']); /* Personnaliser ici le code qui apparaitra dans la balise TITLE de la fiche produit */ $newMeta=""; if(!empty($row['manufacturer_name'])) $newMeta.=$row['manufacturer_name']." - "; $newMeta.=$row['name']; if(!empty($row['category_name'])) $newMeta.=" - ".$row['category_name']; /* Fin newMeta */ $row['meta_title']=$newMeta; return Meta::completeMetaTags($row, $row['name']); } return Meta::getHomeMetas($id_lang, $page_name); } Link to comment Share on other sites More sharing options...
fsb Posted June 16, 2013 Share Posted June 16, 2013 Bonjour, Moi je cherche juste à virer le nom de la boutique qui prend de la place pour rien à mon sens. Dans la version 1.5.4.1 , je retrouve mon dossiers "classes" directement dans public html et non pas dans "override." Ma question est de savoir si je dois remplacer le meta.php existant ou rajouter un deuxième meta.php avec les modifs qui m'interesse ? Merci Link to comment Share on other sites More sharing options...
Christophe Boix Posted June 16, 2013 Share Posted June 16, 2013 Bonjour fsb, il faudrait créer un meta.php dans override/classes car lors des mises à jours, prestashop écrasera les fichier dans le dossier classes et controller, du coup tu perdra cette modification lorsque tu mettras à jour. Le dossier override sert à ne pas toucher au fichier se trouvant dans classes ou dans controller. Il faut donc utiliser le dossier override, et créer un meta.php dans l'override. As-tu besoin de savoir comment créer ce fichier? Petits rappels au cas où : Ne pas oublier de modifier la ligne 27 class MetaCore extends ObjectModel par class Meta extends MetaCore Ensuite tu récupère juste les fonctions que tu veux modifier, sachant que l'info que tu veux enlever est : Configuration::get('PS_SHOP_NAME') Tu n'es pas obligé de copier toutes les fonctions dans ta page meta.php, tu peux laisser que les fonctions que tu modifieras. Bon courage! 1 Link to comment Share on other sites More sharing options...
fsb Posted June 16, 2013 Share Posted June 16, 2013 Merci Christophe pour cette réponse supersonic ^^ Je ne sais pas du tout comment créer ce fichier avec ce que je veux à l'intérieur et encore moins modifier la ligne 27. J'ai bien trouvé des fichiers meta.php à télécharger par ci par la mais en ouvrant avec le bloc note, ça ressemblait pas du tout à un fichier bien propre. donc j'ai lâché l'affaire. le placer dans l'override, ça je dois pouvoir le faire, ça doit être dans mes compétences. (je débute avec prestashop) Si une âme charitable veut bien me créer ce fichier meta.php avec toutes les modifs que je n 'ai plus qu'à l'installer par la suite , ce serait bien plus simple pour un novice comme moi... Merci de ton aide Steeve Link to comment Share on other sites More sharing options...
Christophe Boix Posted June 16, 2013 Share Posted June 16, 2013 Voici le fichier à place dans override/classes/ Il va modifier quelques fonctions pour enlever le titre du site Attention je n'ai pas testé le fichier mais en théorie il n'y aura pas d'erreur (en cas de problème ou bug lié à ce fichier, il faut simplement supprimer ce fichier) Meta.php 1 Link to comment Share on other sites More sharing options...
fsb Posted June 16, 2013 Share Posted June 16, 2013 Super, Merci pour ton coup de pouce. J'ai une autre petite question au passage si je peux me permettre. J'ai une boutique en 1.5.3.1 et quand je regarde le dossier "classes" dans override, j'ai une centaine de fichier .php dont le fameux meta.php qui est vide d'ailleurs sur cette boutique. Mais ma question est la suivante, sur l'autre boutique 1.5.4.1, lorsque j'ouvre classes dans l'override, je n'ai aucun fichier .php à part l'index.php. Il y a un soucis ou c'est normal ? Link to comment Share on other sites More sharing options...
fsb Posted June 16, 2013 Share Posted June 16, 2013 Pour info, voila ce que j'ai fait : j'ai installé ton fichier dans public_html/override/classes et également dans www/override/classes J'ai ensuite supprimé le fichier class-index.php qui se trouve dans www/cache. J'ai testé et le nom de ma boutique à bien disparu ce qui fait que je gagne de la place dans mes balises. Par contre je ne m'explique toujours pas pourquoi ne trouve aucun fichier.php dans mon dossier override/classe. Est ce que je dois copier/coller ceux se trouvant dans mon public_html/classes ? Merci de ton aide en tout cas. Link to comment Share on other sites More sharing options...
Christophe Boix Posted June 17, 2013 Share Posted June 17, 2013 Bonjour, dans la 1.5.3.1, les fichiers étaient directement copiés dans l'override, ce qui facilitait la chose si on voulait modifier une classe. C'est pour cela que les fichiers étaient présents mais vides. dans la 1.5.4.1, les fichiers ne sont plus présents, je ne sais pas la raison exacte, mais le fonctionnement reste identique : copier un fichier de /classes pour le coller dans /override/classes/ puis modifier la ligne 27 ( class xxx extends xxxCore ), comme dans la 1.5.3.1 Link to comment Share on other sites More sharing options...
Christophe Boix Posted June 17, 2013 Share Posted June 17, 2013 Est ce que je dois copier/coller ceux se trouvant dans mon public_html/classes ? Le mieux est de ne copier que la classe dont tu as besoin (ex: meta.php) car si tu copie tout, il faudra modifier tous les fichiers pour écrire class xxx extend xxxCore , au lieu de class xxxCore extends module (par ex), sinon ta boutique ne fonctionnera pas (page blanche) Link to comment Share on other sites More sharing options...
labelandco Posted June 17, 2013 Share Posted June 17, 2013 [MODERATION] Sujet déplacé motif : cela concerne plus la configuration de la boutique que plutôt une problématique dans le domaine du positionnement de votre boutique. Je déplace donc le sujet sur "Configuration et Installation de Prestashop". Vous aurez plus de chance d'avoir des réponses. Link to comment Share on other sites More sharing options...
fsb Posted June 17, 2013 Share Posted June 17, 2013 Merci Christophe pour les réponses apportés. 1 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