Script sitemap

WRInaute discret
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...
 
WRInaute passionné
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:
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:
/* *********************** */
/* 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:
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=\"https://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
 
WRInaute discret
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 ?
 
WRInaute passionné
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:
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]
 
WRInaute discret
Salut,

Bon j'ai un petiti problème car la fonction sqlSitemap doit retourner un tableu, or return ne renvoie pas un tableau...
 
WRInaute passionné
franck05 a dit:
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.

https://www.webrankinfo.com/forum/t/script-relatif-a-mysql-gestion-derreur-etc.39218/

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:
 
Nouveau WRInaute
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
 
WRInaute discret
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:
 
WRInaute accro
franck05 a dit:
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 :)
 
Nouveau WRInaute
serval2a a dit:
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+
 
Discussions similaires
Haut