Script sitemap

franck05
WRInaute discret
WRInaute discret
 
Messages: 110
Inscription: 30 Nov 2003

Script sitemap

Message le Dim Nov 27, 2005 20:39

Bonjour,

Je suis à la recherche d'un script pour faire le plan d'un site de façon dynamique, c'est un site url rewrité mais je ne trouve pas mon bonheur...

est ce que quelqu'un aurait un tuyau merci d'avance...


medium69
WRInaute passionné
WRInaute passionné
 
Messages: 2485
Inscription: 7 Mai 2005

Message le Dim Nov 27, 2005 22:45

Voici un script très simple que je me sert :
Je l'ai mis dans des fonctions.

Cette fonction est à appelée par chaque page que vous voulez mettre dans le sitemap
Code: Tout sélectionner
function sitemapBdd() {
   global $uriSitemap;
   
   if   (defined('SITEMAP') ) { // Cela me sert pour définir une autre url dans certains cas (pour mon glossaire par exemple, je définis cette constante pour indiquer une url légèrement modifiée)
         $url = $uriSitemap;
         }
   else   { // Si la constante n'est pas définie, on récupère l'url
         $url = $_SERVER['REQUEST_URI'];
         }
   
   if      (eregi('/index.php', $url) ) { // Si on est sur l'acceuil, l'url ne sera composé que du nom de domaine pour éviter le duplicate content (cela implique bien sur qu'aucun de vos autres fichier se nomme index.php)
         $url = '/';
         }
         
   $date = date('Y-m-d', time() ); // On récupère la date

   if   ($url) { // si on à une url on la cherche dans la BDD
      $res_urlSitemap = sqlSitemap('url sitemap', 'trouver l\'url '.$url.' dans le sitemap.', $url); // requête SQL
      $nbUrlSitemap = mysql_num_rows($res_urlSitemap);
      
      if      ($nbUrlSitemap == 1) { // Si l'url est trouvée, on modifie la date et on incrémente le compteur de visite
            $traitement = sqlSitemap('modification données url', 'modifier les données de '.$url.' dans le sitemap.', $url, $date); // requête SQL
            }
      else   { // on insère l'url, la date et on incrémente le compteur
            
            $traitement = sqlSitemap('enregistrement url', 'Enregistrer les infos de l\'url '.$url.' dans le sitemap.', $url, $date); // requête SQL
            }
      }
}


Code: Tout sélectionner
/* *********************** */
/* Requêtes sur la BDD du sitemap */
/* *********************** */
function sqlSitemap($sql, $desc, $var1 = '', $var2 = '') { // type de requêtes SQL, description de la requête SQL, variable
      
   $T_sitemap   = nom de ta table;
      
   switch   ($sql) { // Création des requêtes               
         case 'création sitemap' : // Créaion du sitemap limité à 50 000 url (pour faire un sitemap plus grand, il vous faudra modifier un peu le code)
         $sql = 'SELECT url, date FROM '.$T_sitemap.' ORDER BY id LIMIT 0,50000';
         break;               
         case 'enregistrement url' : // incrémentation du compteur de visite pour l'url (x)
         $sql = 'INSERT INTO '.$T_sitemap.' (id, url, date, nb) VALUES ("", "'.$var1.'", "'.$var2.'", 1)';
         break;               
         case 'modification données url' : // incrémentation du compteur de visite pour l'url (x)
         $sql = 'UPDATE '.$T_sitemap.' SET nb = nb + 1, date = "'.$var2.'" WHERE url = "'.$var1.'"';
         break;               
         case 'url sitemap' : // sélection de l'url (x)
         $sql = 'SELECT * FROM '.$T_sitemap.' WHERE url = "'.$var1.'"';
         break;         
         }
         
// Je me sert de plusieurs fonction personnelle pour la connection à une base de donnée avec gestion d'erreur personnalisée. Je vous laisse le soin de codé cette partie pour la connection   

$sql_connection = connection à votre base de données  // Connection à la BDD
   $res = envoi de la requête $sql // Envoi de la requête
   mysql_close(); // Fermeture de la connection
   
   return $res; // On retourne le résultat de la requête
}


Cette fonction (ou le code) est à mettre dans une page d'administration (création de votre sitemap selon votre désir) ou par exemple sur la page d'accueil avec quelques petites modification (Création de votre sitemap par vos visiteurs)
Code: Tout sélectionner
function sitemapXml() {
   $baseUrl = http://www.NDD;
   $fichier = 'sitemap.xml'; // nom du ficher XML
   $path = ''; // pour placer le fichier xml en racine
   $fp = fopen($path.$fichier, "w");
   $sitemap = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
   $sitemap .= "<urlset xmlns=\"http://www.google.com/schemas/sitemap/0.84\">\n";
   
   fwrite($fp, $sitemap);
   
   $res_liste = sqlSitemap('création sitemap', 'créer le sitemap.'); // requête SQL
   
   while   (list($a, $b) = mysql_fetch_array($res_liste) ) {
         $a = ereg_replace('&','&amp;', $a);
         $nbUrl ++;
         $sitemap = "\t<url>\n";
         $sitemap .= "\t\t<loc>$baseUrl$a</loc>\n"; // L'url à indexée
         $sitemap .= "\t\t<lastmod>$b</lastmod>\n"; // la date sera toujours la date de dernière visite de la page
         $sitemap .= "\t\t<changefreq>weekly</changefreq>\n"; // vous pouvez changer cette valeur selon votre choix
         //$sitemap .= "\t\t<priority>0.5</priority>\n"; // idem pour cette dernière
         $sitemap .= "\t</url>\n";
         
         fwrite($fp, $sitemap);
         }
   $sitemap = "</urlset>\n";
   
   fwrite($fp, $sitemap);
   fclose($fp);

/*Le code suivant est à laisser uniquement dans une partie privative. Elle vous donne quelques infos. */
   echo '<p>Le sitemap contient '.$nbUrl.' url.<br />
   <a href="http://www.NDD/'.$fichier.'">voir le fichier généré : '.$fichier.'</a></p>';
}


Si je n'ai pas été assez clair, n'hésite pas à me demander des précision.

L'avante de ce code est que tu peux géré très facilement ton sitemap.
Le code ne demande qu'à être amélioré.

Par exemple, comme le nombre de visite est comptabilisé dans la BDD, on peut très bien s'en servir pour qualifier une priorité différente selon les pages.

Il permet aussi de ne pas indexé certaines pages ou au contraire de modifier un peu l'url comme dans mon exemple :
-http://www.science-et-vie.net/glossaire,terme,HTML.html
sera transformé par cela (je récupère le nom de la page concerné via la BDD):
-http://www.science-et-vie.net/glossaire,terme,HyperText,Markup,Language.html

franck05
WRInaute discret
WRInaute discret
 
Messages: 110
Inscription: 30 Nov 2003

Message le Dim Nov 27, 2005 23:01

ouah super merci !!! :P
ça à l'air vraiment bien sur ton site pil poil ce que je charchais...

Je le teste dans la semaine car je n'aurais pas ma connexion au web en début de semaine, je te tiens au courrant si ça marche ....

est ce que pour la table tu aurait un fichier sql comme ça j'ai les types
et les longueurs des champs ?


medium69
WRInaute passionné
WRInaute passionné
 
Messages: 2485
Inscription: 7 Mai 2005

Message le Dim Nov 27, 2005 23:19

Le code que j'ai dans toute les pages pour l'indexation ou non (il est installé en bas de page car d'autre constante peuvent être définie dans les pages :
if (!eregi('[=#]', $_SERVER['REQUEST_URI']) && !defined('NO_SITEMAP') ) { // Si la page est autorisée pour l'indexage. Dans le premier !eregi, je n'indexe pas les url avec des ancres ou le signe = (pour mon cas, quand le visiteur change de skin, l'url n'est pas rewrité en partie)
sitemapBdd(); // Modification de la BDD pour le sitemap
}


Sur les page que tu ne veux pas indexé : define('NOSITEMAP', true);

Encore un exmple toujours pour mon cas :
Code: Tout sélectionner
if   ($glossaire['texte']) { // si le terme à été défini
                     define('SITEMAP', true); // on autorise l'indexation
                     $terme = traitementCaractereUrl($glossaire['nom']);
                     $uriSitemap = '/glossaire'.REW.'terme'.REW.$terme.'.html'; // on modifie l'url avec le nom par défaut pour éviter le duplicate content
                     }
                  if   ($glossaire['texte'] == '[à définir]' || !$glossaire['texte']) { // Si le terme est à définir ou si il n'est pas encore défini
                     define('NO_SITEMAP', true); // pas d'indexation dans le sitemap
                     define('META_ROBOT', true); // pas d'indexation par les robots      
                     define('NO_GOOGLE', true); // Pas d'affichage d'Adsense (trop peu de contenu)
                     }


Voici les infos de la table

:arrow: id - int(11) - auto incrément - attibrut UNSIGNED
:arrow: url - varchar(255)
:arrow: date - date
:arrow: nb - int(11) - attibrut UNSIGNED[/quote]

franck05
WRInaute discret
WRInaute discret
 
Messages: 110
Inscription: 30 Nov 2003

Message le Lun Nov 28, 2005 9:34

Super merci je testerai dès que possible :)

franck05
WRInaute discret
WRInaute discret
 
Messages: 110
Inscription: 30 Nov 2003

Message le Mer Nov 30, 2005 9:31

Salut,

Bon j'ai un petiti problème car la fonction sqlSitemap doit retourner un tableu, or return ne renvoie pas un tableau...


medium69
WRInaute passionné
WRInaute passionné
 
Messages: 2485
Inscription: 7 Mai 2005

Message le Mer Nov 30, 2005 19:20

franck05 a écrit:Salut,

Bon j'ai un petiti problème car la fonction sqlSitemap doit retourner un tableu, or return ne renvoie pas un tableau...


C'est à dire ? il te retourne quoi ?

Dans mon cas, je me sert de plusieurs fonctions pour la connection à une BDD.
Elles me gère la connection x, l'envoi de la requête x, et me retourne le numéro d'erreur francisé avec la description x en cas d'erreur.

Si cela peut te rendre service, j'avais fait un post sur ce principe.
Je te donne l'adresse, afin que tu vois si cela peut t'aider.

http://www.webrankinfo.com/forums/viewtopic_39218.htm

Il est vrai que je fais une utilisation abusive des fonctions dans mes scripts afin de mieux géré les mises à jour et amélioration de code.
Le revers, c'est que pour décrire certaines partie de mon script, ce n'est pas évident. D'autant, que je prend soin au passage de changer les nom de variables et autre pour les exemple.

N'hésite pas à me redemander si tu as un soucis.

Et pense aussi à lire tes MP :wink:

midou
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 16
Inscription: 2 Juil 2005

Message le Mer Déc 21, 2005 1:51

Bonjour medium69,

je cherche à créer un sitemap pour mon site mais je ne trouve pas un outil simple !
je n'ai pas très bien compris comme t'utilise les codes et les fonctions que t'as cité précédemment 8O
peux tu m'expliquer comment je puisse intégrer un sitemap simplement ou si tu connais un autre outil ça serait cool
j'ai utilisé yoodamap mais j'ai un pb car il me ressort que la page d'accueil sur le fichier sitemap.xml

merci d'avance


serval2a
WRInaute accro
WRInaute accro
 
Messages: 3457
Inscription: 21 Mar 2005

Message le Mer Déc 21, 2005 7:28

Bonjour,

Essaie, http://www.blocklayer.com/googlesitemap/ avec un réglage des paramètres d'exclusion ça devrait le faire.

franck05
WRInaute discret
WRInaute discret
 
Messages: 110
Inscription: 30 Nov 2003

Message le Mer Déc 21, 2005 14:38

moi je suis toujours scié de voir sur ce forum des gens qui viennent en demandant des conseils simple alors que sur leur site ils proposent des prestations de développement et/ou référencement professionnel,
faudrait arreter de fumer là ! :twisted:


e-kiwi
Modérateur
Modérateur
 
Messages: 15618
Inscription: 23 Déc 2003

Message le Mer Déc 21, 2005 14:40

franck05 a écrit:moi je suis toujours scié de voir sur ce forum des gens qui viennent en demandant des conseils simple alors que sur leur site ils proposent des prestations de développement et/ou référencement professionnel,
faudrait arreter de fumer là ! :twisted:


passes ton chemin et ne répond pas alors :)

midou
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 16
Inscription: 2 Juil 2005

Message le Mer Déc 21, 2005 15:25

serval2a a écrit:Bonjour,

Essaie, http://www.blocklayer.com/googlesitemap/ avec un réglage des paramètres d'exclusion ça devrait le faire.


Merci Serval2a, j'ai créé le sitemap avec cet outil (le seul qui a pu crowler les pages du site)

Franck05 même un professionnel peut trouver qques difficultés parfois à resoudre de simples pb ... Personne n'est parfait heuresement
En fait c'est simple de créer un sitemap mais quand on essai 2 ou 3 méthodes et que ça marche pas on doit se demabder pkoi!! pour ma question il s'agit d'un autre pb que j'ai résolu independament de la création du sitemap.

A+


medium69
WRInaute passionné
WRInaute passionné
 
Messages: 2485
Inscription: 7 Mai 2005

Message le Mer Déc 21, 2005 19:03

Tu as besoin d'aide ou pas alors ?

midou
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 16
Inscription: 2 Juil 2005

Message le Mer Déc 21, 2005 19:16

non c'est bon j'ai réussi à créer mon sitemap
merci quand même

A bientôt


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité