{"id":342,"date":"2020-10-07T14:49:45","date_gmt":"2020-10-07T14:49:45","guid":{"rendered":"https:\/\/cinnk.com\/index.php\/2020\/10\/07\/du-sql-pour-pimenter-joomla-partie-3\/"},"modified":"2020-10-07T14:49:45","modified_gmt":"2020-10-07T14:49:45","slug":"du-sql-pour-pimenter-joomla-partie-3","status":"publish","type":"post","link":"https:\/\/cinnk.com\/fr\/du-sql-pour-pimenter-joomla-partie-3\/","title":{"rendered":"Du SQL pour pimenter Joomla! &#8211; Partie 3"},"content":{"rendered":"<p>Nous allons voir<strong> comment faciliter l&rsquo;indexaction<\/strong> de votre site par les moteurs de recherche avec l&rsquo;utilisation d&rsquo;un <strong>sitemap<\/strong> ou <strong>plan de site<\/strong> en fran\u00e7ais.<\/p>\n<p><!--more--><br \/>\nLors de nos deux pr\u00e9c\u00e9dents \u00e9pisodes, nous avons pris contact avec la r\u00e9alisation de requ\u00eates SQL simples, mais utiles \u00e0 l\u2019administration de nos sites, tout en utilisant exclusivement les outils propos\u00e9s par PHPMyAdmin et le gestionnaire de bases de donn\u00e9es mySQL et en nous consacrant enti\u00e8rement \u00e0 une commande SQL unique : la commande SELECT.<br \/>\nIl est d\u00e9sormais temps d\u2019aller plus loin et de commencer \u00e0 prendre quelques risques en modifiant le contenu de nos bases de donn\u00e9es Joomla ! Pour autant le travail effectu\u00e9 jusqu\u2019ici n\u2019a pas \u00e9t\u00e9 inutile. Loin de l\u00e0 !<\/p>\n<p>Antidigital &#8211; Flickr<br \/>\n Avertissement : Nous allons commencer \u00e0 modifier le contenu des bases de donn\u00e9es utilis\u00e9es par Joomla!, il vous faut \u00eatre bien conscient que ceci peut avoir un impact sur le fonctionnement m\u00eame du CMS.\u00a0  Je vous en avertis solennellement  : ne tentez pas de me reprocher une d\u00e9gradation de votre contenu ou de quelconques probl\u00e8mes sur vos sites, car je vous le dis et ne le r\u00e9p\u00e9terai plus : avant tout travail visant \u00e0 modifier le contenu d\u2019une table, sauvegardez celle-ci.  Mieux : sauvegardez la base de donn\u00e9es int\u00e9gralement \u00e0 intervalles r\u00e9guliers.<br \/>\nA.\u00a0\u00a0\u00a0 Modifier les donn\u00e9es dans la base Joomla ! : les principes<br \/>\nSi vous examinez un tant soit peu les requ\u00eates propos\u00e9es dans ces deux articles : Du SQL pour pimenter Joomla ! et Du SQL pour pimenter Joomla ! \u2013 Partie 2, vous constaterez rapidement que toutes nos requ\u00eates sont de la m\u00eame forme :<br \/>\nORDRE \u2013 colonnes_concern\u00e9es \u2013 FROM \u2013 nomtables &#8211; WHERE \u2013 clause_de_s\u00e9lection<br \/>\nO\u00f9 clause de s\u00e9lection est une directive (s\u00e9lection, sous-requ\u00eate, jointure etc\u2026) qui permet de r\u00e9duire le champ d\u2019application de l\u2019ordre donn\u00e9 a seule fin de limiter l&rsquo;ensemble de don\u00e9nes concern\u00e9 par cet ordre, nomtables est le nom de la ou des tables concern\u00e9e(s) par la requ\u00eate SELECT.<br \/>\nJusqu\u2019ici, les requ\u00eates\u00a0 pr\u00e9sent\u00e9es ont exclusivement utilis\u00e9 l\u2019ordre SELECT qui permet de s\u00e9lectionner des informations en provenance d\u2019une base de donn\u00e9es. Les ordres UPDATE et DELETE suivent exactement la m\u00eame approche, et s\u2019appuie sur le m\u00eame paradigme, nomtables est identique dans l\u2019esprit et tr\u00e8s proche dans l\u2019\u00e9criture,\u00a0 clause_de_s\u00e9lection permet \u00e0 l&rsquo;identique de r\u00e9duire (ou pas) l&rsquo;ensemble de donn\u00e9es affect\u00e9 par l\u2019ordre donn\u00e9 et peut \u00eatre exactement identique dans sa formulation \u00e0 la clause_de_s\u00e9lection fournie dans une requ\u00eate SELECT. Conseil : avant d\u2019effectuer toute manipulation du contenu de vos tables, commencez syst\u00e9matiquement par v\u00e9rifier avec un ordre SELECT que vous n\u2019allez pas appliquer une modification ou une suppression sur plus de donn\u00e9es que vous ne le souhaitez.<br \/>\nSachez qu\u2019en utilisant PHPMyAdmin pour modifier vos tables, vous travaillerez sans filets aucun. Vous avez peut \u00eatre d\u00e9j\u00e0 entendu parler de transactions SQL et peut \u00eatre m\u00eame de COMMIT et de ROLLBACK. L\u2019ordre COMMIT permet de valider une transaction SQL et donc d\u2019en inscrire d\u00e9finitivement le r\u00e9sultat dans la base de donn\u00e9es, alors que l\u2019ordre ROLLBACK lui, permet d\u2019annuler ce m\u00eame traitement et de remettre la base de donn\u00e9es dans l\u2019\u00e9tat ant\u00e9rieur, quel que soit le nombre de modifications effectu\u00e9es.Une requ\u00eate ex\u00e9cut\u00e9e via PHPMyAdmin utilise toujours une transaction et un COMMIT implicite. En cons\u00e9quence, les ordres SQL que nous allons voir et utiliser, modifient imm\u00e9diatement et sans possibilit\u00e9 de retour arri\u00e8re automatique, le contenu de votre base de donn\u00e9es Joomla!<br \/>\n{loadposition pub-j3pour-tous}<br \/>\nB.\u00a0\u00a0\u00a0 Modifier un article de la base de donn\u00e9es.<br \/>\nUn ou plusieurs articles, soyons clair, il n\u2019y a aucune restriction quant au nombre d\u2019articles trait\u00e9s en une seule requ\u00eate, aucunes autres que celles impos\u00e9es par la clause_de_s\u00e9lection\u00a0 plac\u00e9e apr\u00e8s le mot-cl\u00e9 WHERE. Pour rappel, s\u2019il n\u2019y a pas de mot cl\u00e9 WHERE (il n\u2019est pas obligatoire) et donc pas de clause_de_s\u00e9lection alors tous les articles de la table (ou des tables) concern\u00e9e(s) seront modifi\u00e9s.<br \/>\nPassons maintenant \u00e0 une \u00e9tude de cas pratique d\u00e9taill\u00e9e.<br \/>\nII-a R\u00e9organiser des cat\u00e9gories d\u2019article<br \/>\nMon site a d\u00e9sormais plus de 800 articles a disposition de ses utilisateurs, il arrive (pas trop souvent Dieu merci) que certains articles aient besoin d\u2019\u00eatre d\u00e9plac\u00e9s dans une sous cat\u00e9gorie nouvellement cr\u00e9\u00e9 ou qu\u2019une sous-cat\u00e9gorie soit supprim\u00e9e et qu\u2019il faille replacer les articles correspondant dans une cat\u00e9gorie parent, voire dans une autre cat\u00e9gorie plus adapt\u00e9e.<br \/>\nDans le premier cas : sauf cas particulier, aucune alternative, il faut article par article, ouvrir l\u2019article, modifier la cat\u00e9gorie, sauvegarder l\u2019article et recommencer avec\u00a0 le suivant. Outre que c\u2019est long et soumis \u00e0 un risque d\u2019erreur inh\u00e9rent \u00e0 ce genre de manipulations, les articles concern\u00e9s voient leur date de modification mise \u00e0 jour et ils repassent dans la liste des articles les plus r\u00e9cents, ce qui n\u2019est pas forc\u00e9ment ad\u00e9quat.<br \/>\nDans le second cas, il est tr\u00e8s facile de trouver une clause_de_s\u00e9lection\u00a0 efficace et d\u2019\u00e9crire une requ\u00eate modifiant les dits-articles.<\/p>\n<p>Proc\u00e9dons \u00e9tape par \u00e9tape :<br \/>\nL\u2019objectif est de se d\u00e9barasser de la sous-cat\u00e9gorie AOM (id=61) et de remonter les articles concern\u00e9s dans la cat\u00e9gorie Expertise (id=51). Une simple requ\u00eate de s\u00e9lection nous montre l\u2019ensemble d&rsquo;articles concern\u00e9s :<br \/>\nSELECT DATE(created), c.title as &lsquo;Article&rsquo;, c.catid as &lsquo;id cat\u00e9gorie&rsquo;, ca.title as &lsquo;Cat\u00e9gorie&rsquo;FROM gucl0_content cINNER JOIN gucl0_users u ON u.id = c.created_byINNER JOIN gucl0_categories ca on ca.id = c.catidWHERE ca.id = 61<\/p>\n<p>Seulement 4 articles, mais une s\u00e9lection ais\u00e9e \u00e0 d\u00e9finir dans notre clause_de_s\u00e9lection la modification est donc \u00e9ligible facilement pour une requ\u00eate de mise \u00e0 jour :<br \/>\nUPDATE gucl0_content cSET c.catid = 51WHERE c.catid = 61<br \/>\nComme vous pouvez le constater, cette requ\u00eate (tr\u00e8s simple au demeurant) est tr\u00e8s courte ! Le paradigme est l\u00e9g\u00e8rement diff\u00e9rent de celui de l\u2019ordre SELECT, mais contient toutefois les m\u00eames informations :<br \/>\nORDRE \u2013 nomtables \u2013 SET colonnes_concern\u00e9es &#8211; WHERE \u2013 clause_de_s\u00e9lection<br \/>\nLe mot-cl\u00e9 FROM dispara\u00eet (il est implicite), le mot-cl\u00e9 SET (obligatoire) pr\u00e9c\u00e8de colonnes_concern\u00e9es qui pr\u00e9cise en outre le nouveau contenu des dites colonnes.<br \/>\nAvant toute chose, commen\u00e7ons par sauvegarder la table concern\u00e9e par l\u2019op\u00e9ration, soit la table ##_content<\/p>\n<p>S\u00e9lectionnez la table et utilisez les valeurs par d\u00e9faut, est largement suffisant, n\u2019oubliez pas de cliquer sur Ex\u00e9cuter pour finir et de placerle fichier d\u00e9pos\u00e9 dans votre r\u00e9pertoire de t\u00e9l\u00e9chargement \u00e0 l\u2019abri, il contient outre vos donn\u00e9es, le n\u00e9cessaire pour reconstruire la table dans son int\u00e9gralit\u00e9 (sch\u00e9ma ET donn\u00e9es) en cas de n\u00e9cessit\u00e9.<br \/>\nNous pouvons d\u00e9sormais ex\u00e9cuter la requ\u00eate de mise \u00e0 jour pr\u00e9par\u00e9e ci-dessus. Aussit\u00f4t apr\u00e8s l\u2019ex\u00e9cution, PHPMyAdmin affiche le nombre de lignes trait\u00e9es par la requ\u00eate. Dans le cas pr\u00e9sent : 4, ceci est normalement suffisant pour nous assurer du r\u00e9sultat, toutefois, nous pouvons nous assurer de la conformit\u00e9 de l&rsquo;op\u00e9ration en reprenant la requ\u00eate pr\u00e9c\u00e9dente :<br \/>\nSELECT DATE(created), c.title as &lsquo;Article&rsquo;, c.catid as &lsquo;id cat\u00e9gorie&rsquo;, ca.title as &lsquo;Cat\u00e9gorie&rsquo;FROM gucl0_content cINNER JOIN gucl0_users u ON u.id = c.created_byINNER JOIN gucl0_categories ca on ca.id = c.catidWHERE ca.id = 61<br \/>\npour constater qu\u2019il n\u2019y a plus d\u00e9sormais d\u2019articles pr\u00e9sent dans notre cat\u00e9gorie AOM (id=61), modifions la requ\u00eate pour lister les articles pr\u00e9sents dans la cat\u00e9gorie Expertise (id=51) et v\u00e9rifions que nos 4 articles y sont d\u00e9sormais bien pr\u00e9sent. Dans le cas contraire (ce ne l\u2019est pas !) nous pourrions restaurer notre table d\u2019articles \u00e0 son contenu pr\u00e9c\u00e9dent en effectuant la manipulation ci-dessous :<\/p>\n<p>\u00a0<br \/>\n Attention : le fichier sauvegard\u00e9 contient la totalit\u00e9 de votre table, avant de le restaurer, il vous faudra supprimer le contenu de la table via PHPMyAdmin.<br \/>\nLa requ\u00eate de mise \u00e0 jour utilis\u00e9e peut sembler tr\u00e8s simple, compar\u00e9e \u00e0 la requ\u00eate de s\u00e9lection que nous avions utilis\u00e9 pour v\u00e9rifier l\u2019ensemble de donn\u00e9es retourn\u00e9. En fait c\u2019est la requ\u00eate de s\u00e9lection qui avait \u00e9t\u00e9 complexifi\u00e9e pour mettre \u00e0 l\u2019\u00e9preuve votre compr\u00e9hension des deux premiers \u00e9pisodes et aussi mieux visualiser nos donn\u00e9es. L\u2019on aurait tout aussi bien pu (ce n\u2019\u00e9tait pas n\u00e9cessaire dans ce cas) utiliser une jointure pour mettre \u00e0 jour les cat\u00e9gories de nos articles en mimant pr\u00e9cis\u00e9ment notre requ\u00eate de s\u00e9lection avec :<br \/>\nUPDATE gucl0_content c JOIN gucl0_users u ON u.id = c.created_by JOIN gucl0_categories ca on ca.id = c.catidSET c.catid = 51WHERE ca.id = 61<br \/>\nQui nous donne exactement le m\u00eame r\u00e9sultat que pr\u00e9c\u00e9demment (encore heureux !).<br \/>\nII-b Quelques autres requ\u00eates de mise \u00e0 jour d\u2019articles<br \/>\nParmi les choses difficiles \u00e0 faire depuis l\u2019administration Joomla!, quelques unes concernent la manipulation du compte administrateur, comme :<br \/>\n  N\u2019ex\u00e9cutez pas cette requ\u00eate sur votre site de production sans motifs extr\u00eamement s\u00e9rieux et imp\u00e9ratif !<br \/>\nII-b-1 Se retirer \u00e0 soi-m\u00eame l\u2019autorisation d\u2019administrer un site.<br \/>\nComme pour la requ\u00eate pr\u00e9c\u00e9dente, affichons d\u2019abord la requ\u00eate SELECT correspondant \u00e0 notre souhait :<br \/>\nSELECT us.id, us.name, us.username, um.group_id as &lsquo;groupe actuel&rsquo;, ug.title as &lsquo;nom du groupe&rsquo;FROM `gucl0_users` us JOIN gucl0_user_usergroup_map um ON um.user_id=us.idJOIN gucl0_usergroups ug ON ug.id = um.group_idWHERE us.username = &lsquo;master1&rsquo;<br \/>\nCe qui nous affiche comme r\u00e9sultat :<\/p>\n<p>La requ\u00eate permettant de supprimer les droits d\u2019administration (en gardant le fait d\u2019\u00eatre un compte enregistr\u00e9) s\u2019\u00e9crit de la mani\u00e8re suivante :<br \/>\nUPDATE gucl0_user_usergroup_map umJOIN `gucl0_users` us\u00a0 ON um.user_id=us.idSET um.group_id = 2WHERE us.username = &lsquo;master1&rsquo;<br \/>\n Note : Cette requ\u00eate ne supprime pas le compte Master1, (il faudrait une requ\u00eate SQL DELETE que nous verrons bient\u00f4t), mais change l\u2019\u00e9tat du compte de l\u2019utilisateur Master1 le passant de \u2018super utilisateur\u2019 \u00e0 \u2018enregistr\u00e9\u2019. Les diff\u00e9rents \u00e9tats autoris\u00e9s sont accessibles dans la table ##_usergroups. Par d\u00e9faut, le groupe public \u00e0 un group_id \u00e9gal \u00e0 1, enregistr\u00e9 \u00e0 le group_id \u00e9gal \u00e0 2 et super utilisateur le group_id \u00e9gal \u00e0 8<br \/>\nEvidemment, apr\u00e8s ex\u00e9cution de la requ\u00eate, une tentative de connexion est douloureuse surtout si la requ\u00eate ci-dessus n\u2019\u00e9tait pas d\u00e9lib\u00e9r\u00e9ment souhait\u00e9e !<\/p>\n<p>Heureusement, vous avez la parade dans la requ\u00eate m\u00eame, il suffit de relancer la requ\u00eate ci-dessus, l\u00e9g\u00e8rement modifi\u00e9e !<br \/>\nII-b-2 Accorder l\u2019autorisation d\u2019administrer un site \u00e0 un identifiant donn\u00e9.<br \/>\nUPDATE gucl0_user_usergroup_map umJOIN `gucl0_users` us\u00a0 ON um.user_id=us.idSET um.group_id = 8WHERE us.username = &lsquo;master1&rsquo;<br \/>\nApr\u00e8s avoir v\u00e9rifi\u00e9 dans la table ##_usergroups que l\u2019identifiant associ\u00e9 au \u2018super utilisateur\u2019 est bien 8, ce qui vous livre du m\u00eame coup le code de la requ\u00eate permettant de transformer n\u2019importe quel utilisateur enregistr\u00e9 en \u2018super utilisateur\u2019, et par extension, de promouvoir ( ??) n\u2019importe quel groupe \u00e0 \u2018super utilisateur\u2019 ou \u00e0 n\u2019importe quel autre niveau d\u2019ailleurs.<br \/>\nLister les \u2018administrateurs\u2019 existant avant de les passer tous au niveau \u2018super utilisateur\u2019, est bien \u00e9videmment devenu pour vous un jeu d\u2019enfant :<br \/>\nSELECT us.id, us.name, us.username, ug.idFROM `gucl0_users` us JOIN gucl0_user_usergroup_map um ON um.user_id=us.idJOIN gucl0_usergroups ug ON ug.id = um.group_idWHERE ug.title = &lsquo;administrateur&rsquo;<br \/>\nRequ\u00eate qui retourne la liste des utilisateurs ayant le droit d\u2019administrateur de votre site et vous livre du m\u00eame coup l\u2019id correspondant (7 pour mon site, ce qui est la valeur par d\u00e9faut)\u00a0 :<br \/>\nAssez jou\u00e9 avec le feu ! Passons \u00e0 quelques requ\u00eates d\u2019un usage plus utile ou en tout cas plus fr\u00e9quent.<br \/>\nVous avez besoin de modifier dans le contenu de vos articles un nom de marque, un slogan, voire une phrase ou une image dont l\u2019url doit \u00eatre chang\u00e9 ? Facile : Rappelez-vous de notre requ\u00eate pour lister toutes les occurrences du mot Joomla! dans vos articles :<br \/>\nSELECT id, title, introtext, `fulltext`, date(created) as &lsquo;Cr\u00e9\u00e9 le&rsquo;FROM `br8l3_content`WHERE introtext LIKE &lsquo;%joomla!%&rsquo; OR `fulltext` LIKE &lsquo;%joomla!%&rsquo;<br \/>\nSur un site fra\u00eechement install\u00e9 avec les textes par d\u00e9faut de la version fran\u00e7aise de Joomla!, cette requ\u00eate retourne 13 occurrences du mot Joomla!, je vous propose \u00e0 titre d\u2019exercice de remplacer Joomla! par \u2026 WordPress\u00a0 (franchement : dans la pratique, faites plut\u00f4t le contraire !) :<br \/>\nUPDATE br8l3_content c SET c.introtext = REPLACE(c.introtext, &lsquo;Joomla!&rsquo;, &lsquo;Wordpress&rsquo;), c.fulltext = REPLACE(c.fulltext, &lsquo;Joomla!&rsquo;, &lsquo;Wordpress&rsquo;)<br \/>\n Attention : la fonction REPLACE de mySQL est case-sensitive, par cons\u00e9quent Joomla! et joomla! ne retournent pas le m\u00eame ensemble d&rsquo;information (alors que la fonction LIKE de notre clause_de_s\u00e9lection\u00a0 dans la requ\u00eate SELECT de l\u2019\u00e9pisode 2 n\u2019est pas case-sensitive elle! En outre, je vous recommande la plus extr\u00eame attention dans l\u2019utilisation de cette requ\u00eate. R\u00e9fl\u00e9chissez m\u00e9ticuleusement \u00e0 ce que vous demandez \u00e0 mySQL d\u2019effectuer. Dans la demande ci-dessus, sur le site de d\u00e9monstration install\u00e9 par Joomla! \u00ab\u00a0joomla\u00a0\u00bb n\u2019appara\u00eet pas que dans le texte, mais \u00e9galement dans des url (ex : \/\/help.joomla.org), ce qui ne fournit pas \u00e9videmment les r\u00e9sultats attendus, (\/\/help.wordpress.org) apr\u00e8s remplacement. Par cons\u00e9quent n\u2019oubliez jamais le conseil de d\u00e9but : sauvegardez d\u2019abord votre base de donn\u00e9es.<br \/>\nConclusion partielle<br \/>\nEffectuer des requ\u00eates SQL de substitution, n&rsquo;est pas plus compliqu\u00e9 que d&rsquo;effectuer des requ\u00eates de s\u00e9lection. Il faut juste bien en mesurer le risque et prendre les mesures pr\u00e9ventives qui s&rsquo;imposent. Lorsque le mal est fait, il est souvent t(trop) tard pour revenir en arri\u00e8re et parfois m\u00eame impossible. Le remplacement de joomla par wordpress dans l&rsquo;exemple ci-dessus en est un exemple parfait, qui saurait dire, pour revenir en arri\u00e8re apr\u00e8s l&rsquo;ex\u00e9cution de la requ\u00eates quels occurrences d wordpress doivent \u00eatre remplac\u00e9s par joomla ?<br \/>\n\u00a0Il nous reste \u00e0 parler des commandes SQL DELETE et INSERT, \u00e0 aborder \u00e9galement l&rsquo;\u00e9criture des proc\u00e9dures stock\u00e9es, &#8230; donc &#8230; \u00e0 tr\u00e8s bient\u00f4t !<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nous allons voir comment faciliter l&rsquo;indexaction de votre site par les moteurs de recherche avec l&rsquo;utilisation d&rsquo;un sitemap ou plan de site en fran\u00e7ais.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[13],"tags":[],"class_list":["post-342","post","type-post","status-publish","format-standard","hentry","category-archives"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Du SQL pour pimenter Joomla! - Partie 3 | Cinnk<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/cinnk.com\/fr\/du-sql-pour-pimenter-joomla-partie-3\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Du SQL pour pimenter Joomla! - Partie 3 | Cinnk\" \/>\n<meta property=\"og:description\" content=\"Nous allons voir comment faciliter l&rsquo;indexaction de votre site par les moteurs de recherche avec l&rsquo;utilisation d&rsquo;un sitemap ou plan de site en fran\u00e7ais.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cinnk.com\/fr\/du-sql-pour-pimenter-joomla-partie-3\/\" \/>\n<meta property=\"og:site_name\" content=\"Cinnk\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Cinnk.formation\" \/>\n<meta property=\"article:published_time\" content=\"2020-10-07T14:49:45+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cinnk.com\/wp-content\/uploads\/2024\/10\/Logo-font.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"500\" \/>\n\t<meta property=\"og:image:height\" content=\"500\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Cinnk\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@CinnkCom\" \/>\n<meta name=\"twitter:site\" content=\"@CinnkCom\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Cinnk\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/cinnk.com\/fr\/du-sql-pour-pimenter-joomla-partie-3\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/cinnk.com\/fr\/du-sql-pour-pimenter-joomla-partie-3\/\"},\"author\":{\"name\":\"Cinnk\",\"@id\":\"https:\/\/cinnk.com\/fr\/#\/schema\/person\/eacaed860bb77e88b654cab0718cdc3d\"},\"headline\":\"Du SQL pour pimenter Joomla! &#8211; Partie 3\",\"datePublished\":\"2020-10-07T14:49:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/cinnk.com\/fr\/du-sql-pour-pimenter-joomla-partie-3\/\"},\"wordCount\":2508,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/cinnk.com\/fr\/#organization\"},\"articleSection\":[\"Archives\"],\"inLanguage\":\"fr-FR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/cinnk.com\/fr\/du-sql-pour-pimenter-joomla-partie-3\/\",\"url\":\"https:\/\/cinnk.com\/fr\/du-sql-pour-pimenter-joomla-partie-3\/\",\"name\":\"Du SQL pour pimenter Joomla! - Partie 3 | Cinnk\",\"isPartOf\":{\"@id\":\"https:\/\/cinnk.com\/fr\/#website\"},\"datePublished\":\"2020-10-07T14:49:45+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/cinnk.com\/fr\/du-sql-pour-pimenter-joomla-partie-3\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/cinnk.com\/fr\/du-sql-pour-pimenter-joomla-partie-3\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/cinnk.com\/fr\/du-sql-pour-pimenter-joomla-partie-3\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/cinnk.com\/fr\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Du SQL pour pimenter Joomla! &#8211; Partie 3\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/cinnk.com\/fr\/#website\",\"url\":\"https:\/\/cinnk.com\/fr\/\",\"name\":\"Cinnk\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/cinnk.com\/fr\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/cinnk.com\/fr\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/cinnk.com\/fr\/#organization\",\"name\":\"Cinnk\",\"url\":\"https:\/\/cinnk.com\/fr\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/cinnk.com\/fr\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/cinnk.com\/wp-content\/uploads\/2023\/10\/logo-svg-orange_new.svg\",\"contentUrl\":\"https:\/\/cinnk.com\/wp-content\/uploads\/2023\/10\/logo-svg-orange_new.svg\",\"width\":125,\"height\":32,\"caption\":\"Cinnk\"},\"image\":{\"@id\":\"https:\/\/cinnk.com\/fr\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Cinnk.formation\",\"https:\/\/x.com\/CinnkCom\",\"https:\/\/www.instagram.com\/cinnk\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/cinnk.com\/fr\/#\/schema\/person\/eacaed860bb77e88b654cab0718cdc3d\",\"name\":\"Cinnk\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/cinnk.com\/fr\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/2110805a2e278c633c677ec50fd5a9944d8f66b4fac05f86ebb21a2f87be8e0b?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/2110805a2e278c633c677ec50fd5a9944d8f66b4fac05f86ebb21a2f87be8e0b?s=96&d=mm&r=g\",\"caption\":\"Cinnk\"},\"sameAs\":[\"https:\/\/cinnk.com\"],\"url\":\"https:\/\/cinnk.com\/fr\/author\/cinnkdev\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Du SQL pour pimenter Joomla! - Partie 3 | Cinnk","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/cinnk.com\/fr\/du-sql-pour-pimenter-joomla-partie-3\/","og_locale":"fr_FR","og_type":"article","og_title":"Du SQL pour pimenter Joomla! - Partie 3 | Cinnk","og_description":"Nous allons voir comment faciliter l&rsquo;indexaction de votre site par les moteurs de recherche avec l&rsquo;utilisation d&rsquo;un sitemap ou plan de site en fran\u00e7ais.","og_url":"https:\/\/cinnk.com\/fr\/du-sql-pour-pimenter-joomla-partie-3\/","og_site_name":"Cinnk","article_publisher":"https:\/\/www.facebook.com\/Cinnk.formation","article_published_time":"2020-10-07T14:49:45+00:00","og_image":[{"width":500,"height":500,"url":"https:\/\/cinnk.com\/wp-content\/uploads\/2024\/10\/Logo-font.jpg","type":"image\/jpeg"}],"author":"Cinnk","twitter_card":"summary_large_image","twitter_creator":"@CinnkCom","twitter_site":"@CinnkCom","twitter_misc":{"\u00c9crit par":"Cinnk","Dur\u00e9e de lecture estim\u00e9e":"12 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/cinnk.com\/fr\/du-sql-pour-pimenter-joomla-partie-3\/#article","isPartOf":{"@id":"https:\/\/cinnk.com\/fr\/du-sql-pour-pimenter-joomla-partie-3\/"},"author":{"name":"Cinnk","@id":"https:\/\/cinnk.com\/fr\/#\/schema\/person\/eacaed860bb77e88b654cab0718cdc3d"},"headline":"Du SQL pour pimenter Joomla! &#8211; Partie 3","datePublished":"2020-10-07T14:49:45+00:00","mainEntityOfPage":{"@id":"https:\/\/cinnk.com\/fr\/du-sql-pour-pimenter-joomla-partie-3\/"},"wordCount":2508,"commentCount":0,"publisher":{"@id":"https:\/\/cinnk.com\/fr\/#organization"},"articleSection":["Archives"],"inLanguage":"fr-FR"},{"@type":"WebPage","@id":"https:\/\/cinnk.com\/fr\/du-sql-pour-pimenter-joomla-partie-3\/","url":"https:\/\/cinnk.com\/fr\/du-sql-pour-pimenter-joomla-partie-3\/","name":"Du SQL pour pimenter Joomla! - Partie 3 | Cinnk","isPartOf":{"@id":"https:\/\/cinnk.com\/fr\/#website"},"datePublished":"2020-10-07T14:49:45+00:00","breadcrumb":{"@id":"https:\/\/cinnk.com\/fr\/du-sql-pour-pimenter-joomla-partie-3\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cinnk.com\/fr\/du-sql-pour-pimenter-joomla-partie-3\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/cinnk.com\/fr\/du-sql-pour-pimenter-joomla-partie-3\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/cinnk.com\/fr\/"},{"@type":"ListItem","position":2,"name":"Du SQL pour pimenter Joomla! &#8211; Partie 3"}]},{"@type":"WebSite","@id":"https:\/\/cinnk.com\/fr\/#website","url":"https:\/\/cinnk.com\/fr\/","name":"Cinnk","description":"","publisher":{"@id":"https:\/\/cinnk.com\/fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/cinnk.com\/fr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/cinnk.com\/fr\/#organization","name":"Cinnk","url":"https:\/\/cinnk.com\/fr\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/cinnk.com\/fr\/#\/schema\/logo\/image\/","url":"https:\/\/cinnk.com\/wp-content\/uploads\/2023\/10\/logo-svg-orange_new.svg","contentUrl":"https:\/\/cinnk.com\/wp-content\/uploads\/2023\/10\/logo-svg-orange_new.svg","width":125,"height":32,"caption":"Cinnk"},"image":{"@id":"https:\/\/cinnk.com\/fr\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Cinnk.formation","https:\/\/x.com\/CinnkCom","https:\/\/www.instagram.com\/cinnk"]},{"@type":"Person","@id":"https:\/\/cinnk.com\/fr\/#\/schema\/person\/eacaed860bb77e88b654cab0718cdc3d","name":"Cinnk","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/cinnk.com\/fr\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/2110805a2e278c633c677ec50fd5a9944d8f66b4fac05f86ebb21a2f87be8e0b?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2110805a2e278c633c677ec50fd5a9944d8f66b4fac05f86ebb21a2f87be8e0b?s=96&d=mm&r=g","caption":"Cinnk"},"sameAs":["https:\/\/cinnk.com"],"url":"https:\/\/cinnk.com\/fr\/author\/cinnkdev\/"}]}},"_links":{"self":[{"href":"https:\/\/cinnk.com\/fr\/wp-json\/wp\/v2\/posts\/342","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cinnk.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cinnk.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cinnk.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cinnk.com\/fr\/wp-json\/wp\/v2\/comments?post=342"}],"version-history":[{"count":0,"href":"https:\/\/cinnk.com\/fr\/wp-json\/wp\/v2\/posts\/342\/revisions"}],"wp:attachment":[{"href":"https:\/\/cinnk.com\/fr\/wp-json\/wp\/v2\/media?parent=342"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cinnk.com\/fr\/wp-json\/wp\/v2\/categories?post=342"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cinnk.com\/fr\/wp-json\/wp\/v2\/tags?post=342"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}