developer.jelix.org is not used any more and exists only for history. Post new tickets on the Github account.
developer.jelix.org n'est plus utilisée, et existe uniquement pour son historique. Postez les nouveaux tickets sur le compte github.

Opened 14 years ago

Closed 10 years ago

Last modified 10 years ago

#12 closed enhancement (fixed)

Générateur sitemap.xml

Reported by: gunt Owned by: Surfoo
Priority: low Milestone: Jelix 1.2 beta
Component: jelix:core response Version:
Severity: minor Keywords:
Cc: dominique.papin@… Blocked By:
Blocking: Documentation needed: no
Hosting Provider: Php version:

Description

Un module qui générerait un sitemap.xml pour Google. Il permettrait de favoriser le référencement d'un CMS dans le moteur de recherche Google.

Actuellement le générateur existe en Python, mais pas encore en PHP5.

La documentation Google Sitemap : https://www.google.com/webmasters/sitemaps/docs/fr/protocol.html

Script existant en PHP :

http://www.webrankinfo.com/google/sitemaps/faq_52_227.htm

Attachments (4)

12-sitemap.diff (7.2 KB) - added by Surfoo 12 years ago.
12-sitemap-2.diff (9.6 KB) - added by Surfoo 12 years ago.
12-sitemap.3.diff (10.8 KB) - added by Surfoo 12 years ago.
12-sitemap.4.diff (12.7 KB) - added by Surfoo 12 years ago.

Download all attachments as: .zip

Change History (23)

comment:1 Changed 13 years ago by laurentj

  • Milestone set to Later

comment:2 Changed 13 years ago by laurentj

  • Priority changed from normal to low
  • Severity changed from major to minor

comment:3 Changed 13 years ago by laurentj

  • Milestone Not planed yet or later deleted

Milestone Not planed yet or later deleted

comment:4 Changed 12 years ago by laurentj

  • Documentation needed unset

pour les specs : http://www.sitemaps.org/

comment:5 Changed 12 years ago by ametaireau

a wordpress plugin exists to generate sitemaps. maybe this one will be usefull: http://www.arnebrachhold.de/projects/wordpress-plugins/google-xml-sitemaps-generator/

comment:6 Changed 12 years ago by laurentj

Idea : the future generator could use the urls.xml file...

Changed 12 years ago by Surfoo

comment:7 Changed 12 years ago by Surfoo

  • Owner set to Surfoo
  • Status changed from new to assigned

Voilà un premier jet pour un sitemap très simple. Ça ne gère pas encore le fichier urls.xml ni le sitemap index (d'ailleurs faut retirer sitemapindex.tpl dans le manifest, j'ai oublié)

Je me suis inspiré du code des autres classes concernant le RSS.

Qu'est ce que vous pensez de tout ça ? Je me suis arêté là pour le moment car j'ai besoin d'avis en fait : Est ce qu'il ne vaudrait pas mieux écrire un fichier xml plutôt ? Si oui, comment faire la mise à jour du/des fichier(s) quand il y a de nouvelles URL ? (Cron ?) Comment gérer les multiple sitemap index s'ils sont générés dynamiquement comme dans mon code ? Et comment gérer les différentes URLs dans le code ?

Beaucoup de question, oui :)

Pour un exemple d'utilisation dans un controlleur :

function index() {
        $rep = $this->getResponse('sitemap');
        $item = $rep->addUrl(jUrl::get('jelix~'), '2008-12-10', 'always', '1');
        $item = $rep->addUrl('http://www.google.fr/', '15-11-2008 15:45', 'yearly', '0.5');
        $item = $rep->addUrl('http://www.jelix.org/');
        return $rep;
}

comment:8 Changed 12 years ago by laurentj

  • Component changed from jelix:utils to jelix:core response
  • Milestone set to Jelix 1.2

Conçernant ton patch :

  • pas de propriété $charset. Selon la specification, http://www.sitemaps.org/fr/protocol.php, le charset doit toujours être en UTF-8. Ne tient compte du charset que pour la sortie des erreurs.
  • tu as oublié le sitemapindex.tpl
  • pas de $countUrl : suffit de faire un count sur $urlsList
  • tu as oublié de déclarer $urlsList
  • renommer $_mainTpl en $contentTpl, déclarer cette variable en public, ça permettra de proposer son propre template avec du contenu en statique.
  • pour les même raison, renommer $_template en $content et la déclarer en public.
  • @since 1.2
  • pas de $url->loc = htmlspecialchars($loc); . Ça doit être fait dans le template avec le modificateur escxml.

Est ce qu'il ne vaudrait pas mieux écrire un fichier xml plutôt ?

je ne comprend pas, c'est ce que ta réponse fait non ?

Comment gérer les multiple sitemap index s'ils sont générés dynamiquement comme dans mon code ?

Il faudra autant d'actions que de sitemap, et avoir une sitemapindex pour déclarer les urls des sitemaps et générer le sitemap index.

Et sinon, tes exemples sont faux : on ne peut pas déclarer des urls qui ne font pas parti du site même. Elles seront ignorées par le moteur d'indexation.

On pourrait aussi avoir une méthode importFromUrlsXml, qui importerait les urls complètes du fichier urls.xml, mais seulement celles qui n'ont pas de paramètres, vu qu'on ne peut pas deviner la valeur de ces paramètres.

À mon avis, on ne peut pas faire plus automatique.

Faudrait prévoir un cache aussi (on pourra voir ça une fois quand on aura jCache).

Changed 12 years ago by Surfoo

comment:9 Changed 12 years ago by Surfoo

Merci pour les infos, j'ai tout corrigé.

Revoilà un exemple d'utilisation, addSitemap() n'est pas obligé d'être utilisé :

class defaultCtrl extends jController {

    function index() {
        $view = $this->getResponse('sitemap');
        $view->addSitemap(jUrl::get('default:sitemap1'));
        $view->addSitemap(jUrl::get('default:sitemap2'), '2008-12-21 12:27:36');

        return $view;
    }

    function sitemap1() {
        $view = $this->getResponse('sitemap');
        $view->addUrl(jUrl::get('jelix~'), '2006-11-06', 'yearly', '0.5');

        return $view;
    }

    function sitemap2() {
        $view = $this->getResponse('sitemap');
        $view->addUrl(jUrl::get('jelix~'), '2006-11-06', 'yearly', '0.9');
        $view->addUrl(jUrl::get('jelix~'), '2006-11-06', 'yearly', 0.5);

        return $view;
    }
}

Changed 12 years ago by Surfoo

comment:10 Changed 12 years ago by Surfoo

  • review set to review?

Voilà, j'ai rajouté l'import des URLs venant du fichier urls.xml.

On peut utiliser l'import automatique via importFromUrlsXml(), dans ce cas là le fichier sitemap ne contient que l'URL. Sinon, getUrlsFromUrlsXml() renvoie le tableau des pathinfo de urls.xml et là il y a la possibilité de personnaliser les données dans le contrôleur en utilisant addUrl().

Changed 12 years ago by Surfoo

comment:11 Changed 12 years ago by Surfoo

j'ai rajouté des méthodes pour pinger google, live, ask et yahoo pour indiquer le sitemap.

comment:12 Changed 11 years ago by bibo

A propos du patch de Surfoo, j'ai quelques questions :

  • quel est l'intéret pour vous de faire une réponse plutôt qu'une classe utilitaire ?
  • un fichier sitemap déclare des urls uniquement pour le domaine sur lequel il est hébergé et plus restrictif encore : si le sitemap est accessible à l'url www.toto.fr/sitemap/sitemap.xml.gz, il ne peut déclarer que des urls préfixées par www.toto.fr/sitemap/. Or dans les méthodes de ping, on prend en paramètre un $module pour le sitemap. Ca me semble un poil source d'erreurs.

En fait, il me semble plus pertinent pour la majorité des cas (au moins pour le mien :)) d'avoir un fichier en dur à la racine du site et de le gzippé pour une meilleur perf. Avoir une classe utilitaire plutot qu'une réponse me semble suffisant.

Qu'en pensez vous ?

comment:13 Changed 11 years ago by bibo

  • Cc dominique.papin@… added

comment:14 Changed 11 years ago by laurentj

  • review changed from review? to review+

faudrait comme je le dis, gérer un cache du sitemap.

Sinon, ça me va, si on enlève ces methodes ping, parce que je ne suis pas sûr que les urls que l'on donne au ping soit correctes, comme le dit bibo.

comment:15 Changed 10 years ago by laurentj

  • Resolution set to fixed
  • Status changed from assigned to closed

comment:16 Changed 10 years ago by laurentj

  • Documentation needed set

comment:17 Changed 10 years ago by Surfoo

  • Documentation needed unset

comment:18 Changed 10 years ago by laurentj

  • Documentation needed set

english doc is missing

comment:19 Changed 10 years ago by laurentj

  • Documentation needed unset
Note: See TracTickets for help on using tickets.