gestion des balises metas
Par aurelien gerits le mercredi, 13 janvier 2010, 23:27 - tutoriel MagixcjQuery - Lien permanent
Une balise méta est destiné à fournir des métadonnées structurées sur une page web.
Cette balise doit être placé dans la section head d’un document HTML, entre les marques <head> et </head>.
Afin de définir correctement nos métas, il faut savoir quel métas utilisées dans la conception de notre site internet.
Ce billet n'est nullement un tutoriel sur le référencement mais des métadonnées correctement utilisées est un excellent point de départ.
Balises métas bien formée
[html] <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Style-Type" content="text/css" /> <meta http-equiv="Content-Language" content="fr,en,nl" /> <meta name="revisit-after" content="3 days" /> <meta name="robots" content="index, follow, all" /> <meta name="google-site-verification" content="+nxGUDJ4QpAZ5l9Bsjdi102tLVC21AIh5d1Nl23908vVuFHs34=" /> <meta name="keywords" content="" /> <meta name="description" content="my website" />
On utilise la classe magixcjquery_view_helper_headMeta pour ajouté nos balises métas avec PHP.
[PHP] $meta = new magixcjquery_view_helper_headMeta(); /* * définit le type de codage utilisé. * magixcjquery_view_helper_headMeta::contentType(content,charset); */ $meta->contentType('html','utf8'); /* *Indique quel type de style à utiliser *magixcjquery_view_helper_headMeta::contentStyleType(content); */ $meta->contentStyleType('css'); /* *Indique quel type de langue est utiliser *magixcjquery_view_helper_headMeta::contentLanguage(content); */ $meta->contentLanguage('fr,en,nl'); /* * Indique aux robots un délai pour revisiter le site (Google ne l'utilise plus) *magixcjquery_view_helper_headMeta::revisitAfter(intéger,delay(string)); */ $meta->revisitAfter(3,'days'); /* * Indique les permissions aux robots des moteurs de recherche /*magixcjquery_view_helper_headMeta::robots(content);*/ magixcjquery_view_helper_headMeta::robots('index, follow, all'); /* * Cette balise spécifique à Google remplace verify-v1 *magixcjquery_view_helper_headMeta::googleSiteVerification(content); */ $meta->googleSiteVerification('+nxGUDJ4QpAZ5l9Bsjdi102tLVC21AIh5d1Nl23908vVuFHs34='); /* * La balise keyword (ne sert que pour certains moteurs) *magixcjquery_view_helper_headMeta::keywords(content); */ $meta->keywords('magixcjquery,jquery,ajax'); /* * Indispensable pour la description de votre page web *magixcjquery_view_helper_headMeta::description(content); */ $meta->description('my website');
Un système pour la gestion des "links" est également disponible et une classe (en cours d'écriture) pour la gestion de la balise TITLE.
On à demandé de voir l'intérêt d'avoir une tel classe, j'avoue qu'au début je n'en voyais pas trop l'utilité.
Imaginons que je dois faire un site internet avec smarty et que je souhaite réutiliser chaque fois le même style de balise.
Un petit plugin pour montrer l'intérêt :
[PHP] <?php /** * @category Smarty Plugin * @package Magix CMS * @copyright Copyright (c) 2009 - 2010 (http://www.magix-cms.com) * @license AGPL * @version 1.0 2009-10-27 * @author Gérits Aurélien * */ /** * Smarty plugin * @package Smarty * @subpackage plugins */ /** * Smarty {headmeta meta=""} function plugin * * Type: function * Name: * Date: * Purpose: * Examples: {headmeta} * Output: * @link * @author Gerits Aurelien * @version 1.0 * @param array * @param Smarty * @return string */ function smarty_function_headmeta($params, &$smarty){ $meta = $params['meta']; if (!isset($meta)) { $smarty->trigger_error("meta: missing 'meta' parameter"); return; } $ini = new magixcjquery_view_helper_headMeta(); switch($meta){ case 'contentType': $content = !isset($params['content'])?$smarty->trigger_error("content: missing 'content' parameter"):$params['content']; $charset = !empty($params['charset'])?$params['charset']:'utf8'; $head = $ini->contentType($content,$charset); break; case 'contentStyleType' : $content = !isset($params['content'])?$smarty->trigger_error("content: missing 'content' parameter"):$params['content']; $head = $ini->contentStyleType($content); break; case 'contentLanguage' : $content = !isset($params['content'])?$smarty->trigger_error("content: missing 'content' parameter"):$params['content']; $head = $ini->contentLanguage($content); break; case 'revisitAfter' : $int = !empty($params['int'])? $params['int'] : 3; $delay = !empty($params['delay']) ? $params['delay']: 'days'; $head = $ini->revisitAfter($int,$delay); break; case 'keywords' : $content = !isset($params['content'])?$smarty->trigger_error("content: missing 'content' parameter"):$params['content']; $head = $ini->keywords($content); break; case 'robots' : $content = !isset($params['content'])?$smarty->trigger_error("content: missing 'content' parameter"):$params['content']; $head = $ini->robots($content); break; case 'googleSiteVerification' : $content = !isset($params['content'])?$smarty->trigger_error("content: missing 'content' parameter"):$params['content']; $head = $ini->googleSiteVerification($content); break; case 'description' : $content = !isset($params['content'])?$smarty->trigger_error("content: missing 'content' parameter"):$params['content']; $head = $ini->description($content); break; } return $head; }
On l'utilise de cette façon :
[smarty] {headmeta meta="contentType" content="html" charset="utf8"} {headmeta meta="contentStyleType" content="css"} {headmeta meta="contentLanguage" content="fr,en,nl"} {headmeta meta="keywords" content=""} {headmeta meta="robots" content="index,follow,all"} {headmeta meta="revisitAfter" int="3" delay="days"}
Commentaires
Vu le volume de code a écrire pour générer les métas, autant les écrires directement !
Ou alors, j'ai loupé un truc...
C'est vrai que magixcjquery_view_helper_headMeta c'est difficile à retenir et à écrire sans faire de copier-coller. Les 2 exemples ne sont pas identiques, il n'y a pas le code Google dans le premier exemple.
aurelien, envisages-tu de rendre la syntaxe plus accessible ? Dans le cas présent, peut-on créer un objet puis le réutiliser à chaque appel à la classe ?
Quelque chose comme ça (je sais pas si ça fonctionne :
$meta = new magixcjquery_view_helper_headMeta;
$meta::contentType('html','utf8');
$meta::magixcjquery_view_helper_headMeta::contentStyleType('css');
...
La vrai question est plutôt : quelle est l'utilité de ce code ?
Parce que j'ai beau cherché, je n'en vois strictement aucune.
Tu parles d'une balise particulière ou de tout le code fch ?
Sinon je me demande comment tu en arrives à écrire une classe qui s'appelle "magixcjquery_jquery_magixcjQuery", ça fait beaucoup de "magix" et de "jquery" non ? http://sourceforge.net/apps/trac/ma...
Tu peux sans probléme écrire un object :
L'utilité est assez secondaire, c'est une méthode pour faciliter l'ajout dynamique de métas tel que la description, le title, keyword.
Je me suis inspiré de son utilité dans le zend framework mais bien entendu aucun moteur de template n'est intégrer.
Je fais jou jou avec smarty 3, et d'autres moteurs.
Pour revenir à la syntaxe, je pense que l'autoload sera modifié pour charger toutes les classes et ne devoir utilisé que tout ce qui se trouve après magixcjquery_......
Vos suggestions sont les bienvenues (n'oublier pas que la lib est toujours en dev hein :D)
Ahh oui au faite, vous pouvez me faire des propositions ou correctifs dans les classes.
La résolution au niveau de l'instance d'une classe est en cours d'analyse, je suis tout à fais conscient que retenir chaque nom de classe est relativement difficile.
@Moe : Tu parles d'une balise particulière ou de tout le code fch ?
De tout le code.
Franchement, faire appel à une classe et des méthodes pour faire des echo(), tout en économisant pas un seul caractères et même en obligeant le développeur a en taper en +, ca sert à quoi ?
Une fois la syntaxe réduite on arrivera à un compromis :D mais je souhaite travailler sur les balises dynamique en général (title, description, langue)
Une suggestion peut être ?
Une suggestion ? laissez tomber.
Ca ne sert STRICTEMENT à rien, si ce n'est utiliser des cycles CPU pour du vent, squatter de la RAM et obscusifier le code.
Même en supposant que tu arrives à rendre la syntaxe plus simple et accessible, pour répondre à ton "besoin", il faut que la machine inclus ta ou tes classes (parce que je suis sur qu'il y a de l'héritage), parser le tout, instancie ton objet, l'attribut à une variable et appelle une ou plusieurs méthodes X fois, tout ca pour remplacer un simple echo "<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />"...
Bref, c'est, si tu me permet l'expression, de la connerie, même dans le cas ou un moteur de template est utilisé (quand je vois le volume de code smarty de ton exemple pour faire un truc aussi bête, j'ai envie de vomir).
Conclusion : l'intêret est nul , puisque ca ne simplifie pas la vie du développeur, bien au contraire, et que ca pénalise la machine.
Et si, en fait, finalement, j'ai une suggestion : toujours réfléchir à l'intêret d'un développement avant de le faire.
Il n'y à aucune raison de s'énerver, je ne fais qu'exposer une idée.
Dans un sens tu à raison, on demande à la machine de faire un peux plus que de renvoyer un echo mais bon.
Personnellement je me sers de ce plugin très simplement, sa m'évite de réécrire plusieurs fois la même chose.
N'oublier pas que je fais ce projet gratuitement sans rien demander en retour.
Si mon idée est mauvaise il suffit de le dire avec courtoisie et ainsi me mettre sur la bonne voie quand à l'avancement de mon projet qui me tiens particulièrement à cœur.
Nous sommes tous la pour apprendre, ce former, comprendre
Merci de votre compréhension.
Je suis très très loin d'être énervé :).
Le fait de développer gratuitement ne dispense en aucune manière de le faire correctement et avec intelligence, d'autant que cela m'étonneraist beaucoup que tu n'utilises pas ces "développements" dans le cadre de ton travail.
C'est d'autant plus vrai dans le monde du développement PHP ou la qualité est dans la plupart des cas assez "aléatoire" du fait de la permissibilité du langage et le peu de connaissance en informatique qu'il demande pour être mis en oeuvre.
Et oui ton idée est très mauvaise.
Et si l'objectif est bien d'éviter la duplication de code, il est loin d'être atteint, puisqu'au lieu d'avoir à copier/coller du simple html, il faut avec ta solution copier/coller un code php plus lourd en terme de syntaxe, quantité et performances.
Et non, ce n'est pas à tes lecteurs de faire ton travail.
Si tu te lances dans ce type de projets et que tu le rend plublic, tu es censé savoir ce que tu fais, même si nous avons tous quelquechose à apprendre.
Développer un framework, ce n'est pas rendre les choses plus compliquées, c'est les rendre industrialisables.
Cela veut dire avoir des processus récurrents, efficaces et simple à mettre à oeuvre pour le développeur pour répondre à des besoins précis.
Garde ce principe en tête et la qualité de ton code s'améliorera.
Enfin, tes lecteurs n'ont pas à te dire quoi faire ou à te mettre sur la "bonne voie".
C'est d'ailleurs un peu facile de demander aux autres la solution à tes problèmes...
Je ne demande pas que l'on fasse mon travail loin de la, on dit toujours "deux tête valent mieux qu'une" dans le sens des idées.
Les idées ou inspiration ne viennent pas au tac au tac, d'où ma requête de me mettre sur la bonne voie en terme de fonctionnalités.
Je pense avoir brassé beaucoup, puis je me suis inspiré dans les autres framework concernant cette partie (je pensais bien faire mais bon)
C'est vrai que j'utilise quotidiennement la lib dans le cadre de mon travail et l'équipe est très satisfaite de l'avancement.
Je pond les idées suivant les demandes par e-mail ou simplement parce qu'une agence web me le demande .
La perfection n'existe pas mais si je peux apporter quelques choses de très bien et quand plus les gens sont réactif et participe c'est encore mieux !
Je suis pour le communautaire et espère construire une véritable communauté pour faire grandir le projet.
Tu comprend alors aisément ma requête, si tu me dit que le fait d'utiliser cette classe ne sert à rien j'en prend note, c'est excellent pour l'avancement.
Personne ne fera mon boulot mais ce sont les autres qui me poussent des idées ou astuces quand j'oublie le plus important.
Tu es objectif mais peut être un peu direct sans rancune bien sur.