Jump to content

intégrer le nom d'une catégorie dans le meta title


Recommended Posts

Bonjour,

Une petite problématique : je voudrais pouvoir afficher dans le meta title de mes pages, le nom de la catégorie principale ou l'on se trouve.

Exemple :

Chez moi, le site est divisé en 3 grandes sections (qui sont en fait les 3 premières catégories du site)
Disons que A, B et C sont ces sections.

J'aimerais que dans le meta title de toutes les catégories et les produits d'une section soit intégré le nom de la section auquel ils appartiennent.
Par exemple ca donnerait pour un produit de la section A :

A : nom du produit

Pour une catégorie de la section B :

B : nom de la catégorie

J'ai cherché du côté de classes/Tools.php et header.tpl mais je ne trouve rien de concluant...

Si quelqu'un est inspiré...

Merci

Link to comment
Share on other sites

Hello,
je me penche sur le même sujet ce soir.
A mon avis il y a 2 méthodes différentes :
1 - Par modification directement du champs meta_title dans la base de données sur la table ps_psproduct_lang.
avantage : Simple à réaliser via un Update du champ
Inconvénient : Titre "en dur" n'évoluant pas si changement des informations composant la balise Title. Sauf par un tâche planifiée CRON, mais je ne connais pas pas du tout ce sujet...
2 - Par modification de code. Je regarde effectivement côté tools.php. Je débute juste ma recherche, si je trouve quelque chose, je le post ! et inversement , si tu trouves une piste, n'hésites pas ;)

A+ pour de goods news j'espère...

Link to comment
Share on other sites

Je pense ne pas être très loin de la solution, même si je ne suis pas sûr que ça soit la bonne n'étant pas un spécialiste...
Enfin bref, j'ai modifié le code suivant dans le header.tpl

{if isset($return_category_name) AND $return_category_name}
/* Dans ce cas le titre est de la forme "Nom du produit -  Catégorie du produit" */
       <title>{$name} - {$return_category_name|escape:'htmlall':'UTF-8'}</title> 
{else}        
/* Sinon, on retrouve le titre pas défaut */
       <title>{$meta_title|escape:'htmlall':'UTF-8'}</title>
{/if}



Sauf que... Il y a un hic ! Je n'arrive pas à récupérer la valeur de la catégorie {$return_category_name}, pourtant elle est bien présente dans la Smarty Debug Console ?!?!? Je ne comprends pas pourquoi.... Une idée ?

Link to comment
Share on other sites

Hello,

Je m'y remet aujourd'hui, j'étais un peu occupé ces derniers jours.
Perso ce qui me manque c'est le nom de cette variable qui récupère le nom de la catégorie. Dans mon cas il me faut la catégorie de base, pas la catégorie en cours.

Donc je regarde ça et on se tient au courant.

Pour ton code je vais voir de mon côté. Es-tu sur de tes conditions if{} ?

Link to comment
Share on other sites

Je ne vois pas de variable $return_category_name...
Les variables dont je dispose et qui pourraient aider sont :

$blockCategTree -> j'imagine les catégories dans le module blockcategories
$cat et $categories -> je ne sais aps trop d'ou ca vient ! dans $categories j'ai mes 4 premières catégories, dans $cat j'ai la 5eme ! mai j'ai pas la catégorie Accueil...
$currentCategoryId -> id de la catégorie actuelle.

Je me demande s'il n'est pas plus recommandé d'intervenir directement dans le PHP style Tools.php...

Link to comment
Share on other sites

Hello Marty,
en fait j'ai compris pourquoi je n'arrivais pas à récupérer cette variable.
J'avais positionné le $smarty->debugging à true dans le smarty.config.inc.php et je pense que dans ce cas, la Smarty Debug Console montre toutes les variables disponibles et pas seulement celle du header.tpl.
Du coup, j'ai simplement mis {debug} dans le header.tpl et effectivement cette variable n'est pas dispo sans modification du php...
Mais sinon, je te confirme que le $return_category_name correspond bien à la catégorie du produit...
Sinon dans le header.tpl, on a la {$currentCategoryId}... Je pense que ça ne doit pas être compliquer de récupérer le libellé de cette catégorie... Mais modif PHP à faire...

Je poursuis mes recherches... To be continue... ;)

Link to comment
Share on other sites

Bon,
j'ai trouvé un truc qui marche, maintenant, n'étant pas un spécialiste, c'est sans doute du bricolage, mais j'espère que des personnes compétentes pourront nous aider à améliorer le truc.
Objectif : Titre page du style "Nom Produit" - "Nom Catégorie du produit"
L'idée est de récupérer le nom de la catégorie sous forme de $category_name pour pouvoir le manipuler dans le header.tpl.
1 - Dans "classes/Tools.php" :
Modification de la requete SQL en rajoutant le nom de la catégorie.

static public function getMetaTags($id_lang)
   {
       global $maintenance;

       if (!(isset($maintenance) AND (!isset($_SERVER['REMOTE_ADDR']) OR $_SERVER['REMOTE_ADDR'] != Configuration::get('PS_MAINTENANCE_IP'))))
       {
            /* Products specifics meta tags */
           if ($id_product = self::getValue('id_product'))
           {
               $row = Db::getInstance()->getRow('
               SELECT pl.`name`, pl.`meta_title`, pl.`meta_description`, pl.`meta_keywords`, pl.`description_short`, c.`name` 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` c ON (p.`id_category_default` = c.`id_category` AND c.id_lang ='.intval($id_lang).') 
               WHERE pl.id_lang = '.intval($id_lang).' AND pl.id_product = '.intval($id_product).' AND p.active = 1');
               if ($row)
               {
                   if (empty($row['meta_description']))
                       $row['meta_description'] = strip_tags($row['description_short']);    
                   return self::completeMetaTags($row, $row['name'], $row['category_name'] );
               }
           }



2- Puis dans le fichier header.tpl, j'ai fait la modification suivante :

{if isset($category_name) AND $category_name}
       <title>{$name|escape:'htmlall':'UTF-8'} - {$category_name|escape:'htmlall':'UTF-8'}</title> 
{else}        
       <title>{$meta_title|escape:'htmlall':'UTF-8'}</title>
{/if}



Voila, suis en phase de tests, mais ça a l'air de fonctionner. N'hésitez pas à critiquer ce code, je ne le prendrai pas mal ;)

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...