Sitemap en while/for

WRInaute discret
Bonjour,

Voilà j'ai environ 2500 pages commençant par -www.monsite.com/annuaire/site-1.html et allant donc jusqu'à -www.monsite.com/annuaire/site-2505.html

Je sais qu'il est possible de les déclarer dans un sitemap via un while ou un for mais cela dit je ne maitrise pas cette technique, j'ai essayé mais sans formation dans ce domaine je ne suis pas parvenu.
Quelqu'un pourrait-il me dire quoi mettre dans la partie .xml et quoi mettre du côté .php ?
Merci
 
WRInaute impliqué
Salut,

A priori, tu pourrais :
  • mettre en place une règle dans ton .htaccess qui renvoie les requètes vers sitemap.xml vers sitemap-xml.php
  • faire un fichier sitemap-xml.php qui ressemble à qqch dans ce style :
    • on récupère toutes les url des sites dans un tableau
    • on les colle sous forme de xml avec un truc du style
      Code:
      $debut_xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
      <urlset xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"
      xsi:schemaLocation=\"http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd\" xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">
      ";
      $fin_xml = "
      </urlset>";
      $str_xml = "";
      for ($i = 0; $i < $nb_sites; $i+)
      {
        $str=xml.= "
        <url>
          <loc>$tab_sites[$i][\"url\"]</loc>
          <lastmod>$tab_sites[$i][\"lastmodif\"]</lastmod>
          <changefreq>$tab_sites[$i][\"changefreq\"]</changefreq>
          <priority>0.5</priority>
        </url>
      ";
      }
      $str_xml = $debut_xml . $str_xml . $fin_xml;
  • et tu renvoies le tout en utf-8, avec le bon mime type

Bon, c'est écrit à l'arrache, mais le principe y est : te prends pas la tête, c'est juste du texte.
 
WRInaute discret
Merci, mais je n'ai rien compris. :lol:
Si tu peux me la refaire en faisant comme ci tu t'adressais à un enfant de deux ans je préférerais.
Merci
 
WRInaute passionné
le principe à adapter : un fichier .txt suffit amplement :)
Bon ecrit a l'arrach mais ca doit fonctionner.

Code:
<?php
// tu ouvres ton fichier et/ou le cree s'il n'existe pas
$f = fopen("tonsitemap.txt", "a+");
// ton nombre de page (dans ton cas 2505)
$nbpage = 2505;
  
for ($i=1;$i<=2505;$i++) {
     $url = 'www.monsite.com/annuaire/site-'.$i'.html';
     // tu ecris dans le fichier
     fwrite($f, $url."\n");
}

fclose($f);
?>
 
WRInaute discret
Merci,

En gros sans les commentaires ça fait ça :

Code:
<?php
$f = fopen("www.trucmuche.com/sitemap.txt", "a+");
$nbpage = 2505;  
for ($i=1;$i<=2505;$i++) {
     $url = 'www.trucmuche.com/annuaire/site-'.$i'.html';
     fwrite($f, $url."\n");
}
fclose($f);
?>
Mais je le mets où ce script php et je mets quoi dans sitemap.txt ? :oops:
 
WRInaute passionné
Tu le mets dans ton site (a la racine par exemple, enregistré avec l'extension .php) puis tu l'appelles via ton navigateur
ex : www.tonsite.fr/lescript.php

Le script te créé ton fichier sitemap (au meme endroit ou tu as mis ton script)
Une fois généré tu vas dans tes googlewebmastertools -> sitemap -> nouveau sitemap et tu rentres l'URL www.tonsite.fr/sitemap.txt
 
WRInaute discret
Ca marche pas :

Code:
Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in /homez.41/microast/www/boucle.php on line 5

Voilà le script.php (appelé boucle.php)
Code:
<?php
$f = fopen("www.micro-astuce.com/sitemap.txt", "a+");
$nbpage = 2505;  
for ($i=1;$i<=2505;$i++) {
     $url = 'www.micro-astuce.com/annuaire/site-'.$i'.html';
     fwrite($f, $url."\n");
}
fclose($f);
?>

Cela dit les liens "site_?" sont eux-même générés par un scrip, c'est peut-être pour ça que ça ne marche pas :
http://www.micro-astuce.com/annuaire/gastronomie-et-alimentation-p1-22.html
lien : plus de détails sur ce site
 
WRInaute discret
Code:
La concaténation est foireuse entre le $i et le .html

Ah ben alors si on me donne des concaténations foireuses, alors là ... :lol:

Tu peux me dire comment rectifier ?
 
WRInaute accro
Pour la concaténation, remplacer
Code:
$url = 'www.micro-astuce.com/annuaire/site-'.$i'.html';
Par
Code:
$url = 'www.micro-astuce.com/annuaire/site-'.$i.'.html';
 
WRInaute discret
Merci,

Ca avance mais il y a toujours une erreur :

Code:
Warning: fopen(www.micro-astuce.com/sitemap.txt) [function.fopen]: failed to open stream: No such file or directory in /homez.41/microast/www/boucle.php on line 2

Warning: fwrite(): supplied argument is not a valid stream resource in /homez.41/microast/www/boucle.php on line 6

Warning: fwrite(): supplied argument is not a valid stream resource in /homez.41/microast/www/boucle.php on line 6

Warning: fwrite(): supplied argument is not a valid stream resource in /homez.41/microast/www/boucle.php on line 6

Warning: fwrite(): supplied argument is not a valid stream resource in /homez.41/microast/www/boucle.php on line 6

Warning: fwrite(): supplied argument is not a valid stream resource in /homez.41/microast/www/boucle.php on line 6

Warning: fwrite(): supplied argument is not a valid stream resource in /homez.41/microast/www/boucle.php on line 6

Warning: fwrite(): supplied argument is not a valid stream resource in /homez.41/microast/www/boucle.php on line 6
ect .....
 
WRInaute accro
Le script boucle.php est à la racine de ton serveur ?

Si oui, remplaces

Code:
$f = fopen("www.micro-astuce.com/sitemap.txt", "a+");

par

Code:
$f = fopen("sitemap.txt", "w+");
 
WRInaute discret
Un dernier truc à l'attention des lecteurs de ce topic car le sitemap tel quel est refusé par Google.
En effet si on lit ce post on comprend pourquoi :
https://www.webrankinfo.com/forum/t/sitemap-simple-fichier-texte.50442/#p480600

Il manque http:// dans le code.

Donc en faisant :
Code:
<?php
$f = fopen("sitemap.txt", "w+");
$nbpage = 2505;  
for ($i=1;$i<=2505;$i++) {
     $url = 'http://www.micro-astuce.com/annuaire/site-'.$i.'.html';
     fwrite($f, $url."\n");
}
fclose($f);
?>

Google accepte les url.
 
WRInaute passionné
Je dirais meme plus ($nbpage) ;)
Code:
<?php
$f = fopen("sitemap.txt", "w+");
$nbpage = 2505; 
for ($i=1;$i<=$nbpage;$i++) {
     $url = 'http://www.micro-astuce.com/annuaire/site-'.$i.'.html';
     fwrite($f, $url."\n");
}
fclose($f);
?>
 
WRInaute discret
Code:
for ($i=1;$i<=$nbpage;$i++)
Ca changera quoi ?

Entre temps j'ai opté pour une version .xml

Code:
<?php
$f = fopen("sitemap.xml", "w+");
$entete ='<?xml version="1.0" encoding="UTF-8"?> ';
$entete .='<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9
   http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"
   xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> ';
fwrite($f, $entete."\n");
$nbpage = 2505;  
for ($i=1;$i<=2505;$i++) {
     $url = "<url><loc>http://www.monsite.com/annuaire/site-$i.html</loc></url>";
     fwrite($f, $url."\n");
}
$footer='</urlset>';
fwrite($f, $footer."\n");
fclose($f);
?>
 
WRInaute passionné
Code:
....
$nbpage = 2505; 
for ($i=1;$i<=2505;$i++) {
...

Syntaxiquement parlant tu définis une variable $nbpage que tu n'exploites pas donc soit tu la définie et tu l'utilises, soit tu l'effaces :)

Code:
// tu mets directement le nombre de pages dans la boucle
for ($i=1;$i<=2505;$i++) {
ou
Code:
// tu définis la variable $nbpage et tu utilises cette variable dans la boucle
$nbpage = 2505; 
for ($i=1;$i<=$nbpage;$i++) {
 
WRInaute discret
Etant donné qu'il s'agit d'un annuaire, n'y aurait-il pas une possibilité pour ne pas donner un nombre de pages précises mais de laisser le script stopper seul quand il arrive en dernière page ?
 
WRInaute passionné
bah compter le nombre d'annuaires avec une requete mysql
Code:
$result = mysql_query('SELECT COUNT(id) AS id_annuaire FROM ta_table_annuaire');
$count = mysql_fetch_array($result);
$nb_page = $count[0];
... la suite du script précédent
 
Discussions similaires
Haut