Et avec un titre comment faire ??

Nouveau WRInaute
Bonjour à tous,

Après qu'Olivier Duffez m'ait répondu en me disant que c'était possible, mais comme en lisant le tuto ici https://www.webrankinfo.com/dossiers/techniques/tutoriel-url-rewriting je n'ai absolument rien compris je viens à vous :)

J'ai déjà lu pas mal de forums, tuto et je n'arrive pas à trouver une réponse.

Voici l'url d'une de mes news : http://www.bordeauxpaquebots.com/news.php?id=37 dont le titre est "Point sur les escales 2012"

Je souhaiterais donc voir dans l'url quelquechose du genre http://www.bordeauxpaquebots.com/37-Point-sur-les-escales-2012

Enfin le but est qu'il y ait un titre.

Quelqu'un pourrait il m'expliquer donc comment faire la manipulation ?

Merci à vous
 
Nouveau WRInaute
Désolé du double post, mais j'ai trouvé quelquechose qui ne marche qu'à 50%

J'ai relu tous les commentaires du tutos, et appliqué un: voici mon htaccess

Options +FollowSymlinks
RewriteEngine on
RewriteRule ^news-(.+)-([0-9]+).html$ /news.php?id=$2 [L]

Les problèmes sont:

-Que j'écrive cela http://www.bordeauxpaquebots.com/news-tralalalalala-37.html ou http://www.bordeauxpaquebots.com/news-nimportequoi-37.html , la news s'affiche

- Sur ma page d'index, si on clique sur le titre de la news, l'url affiché est toujours http://www.bordeauxpaquebots.com/news.php?id=37 et non avec le titre ;(
 
WRInaute passionné
Salut JohnAtthane,

L'url rewriting demande un peut plus de manipulations qu'un simple fichier .htaccess à remplir. Je ne suis pas très doué dans le domaine mais je vais quand même tenter de t'orienter.

Dans un premier temps, il faut transmettre en "GET" les bonnes variables. Pour le moment tu ne transmet que "id" » "news.php?id=37". Il faut transmettre également le titre de la page avec une variable "titre" par exemple » "news.php?id=37&titre=Point sur les escales 2012".

Ensuite, dans ta page de destination, tu récupères le tout :
Code:
$id=$_GET["id"];//correspond à 37
$titre=$_GET["titre"];// correspond à "Point sur les escales 2012"

On s’oriente maintenant vers le fichier .htaccess :
Code:
RewriteEngine on
RewriteBase /

RewriteRule  ^([0-9]*)-(.*)\.php$  news.php?id=$1&titre=$2 [L]
Cette règle indique qu'il faut ré écrire "news.php?id=37&titre=Point sur les escales 2012" en "37-Point sur les escales 2012.php".

Comme tu le constates, le titre n'est pas ré écrit correctement, il faut donc ajouter une fonction qui transforme le titre en supprimant les espaces, passer les majuscules en minuscules, etc...

Dans un fichier "fonctions.php appelé par une "include" ou directement dans le fichier de destination :
Code:
function OptimiseUrl($chaine)
{    
    $chaine=strtolower($chaine);
 
    $accents = Array("/é/", "/è/", "/ê/","/ë/", "/ç/", "/à/", "/â/","/á/","/ä/","/ã/",
"/å/", "/î/", "/ï/", "/í/", "/ì/", "/ù/", "/ô/", "/ò/", "/ó/", "/ö/");
    $sans = Array("e", "e", "e", "e", "c", "a", "a","a", "a","a", "a", "i", "i", "i", 
"i", "u", "o", "o", "o", "o");
 
    $chaine = preg_replace($accents, $sans,$chaine);  
    $chaine = preg_replace('#[^A-Za-z0-9]#','-',$chaine);
 
   // Remplace les tirets multiples par un tiret unique
   $chaine = ereg_replace( "\-+", '-', $chaine );
   // Supprime le dernier caractère si c'est un tiret
   $chaine = rtrim( $chaine, '-' );
 
    while (strpos($chaine,'--') !== false) $chaine = str_replace('--','-',$chaine);
 
    return $chaine; 
}

Actuellement tes liens sont sous la forme :
Code:
<a href="http://www.bordeauxpaquebots.com/news.php?id=37">Point sur les escales 2012</a>
et doivent avoir un code à peut près similaire à :
Code:
<a href="http://www.bordeauxpaquebots.com/news.php?id=<?php echo $id;?>"><?php echo $titre;?></a>
Il faut donc modifier tout tes liens de la façon suivante :
Code:
<a href="http://www.bordeauxpaquebots.com/<?php echo $id;?>-<?php echo OptimiseUrl($titre);?>.php"><?php echo $titre;?></a>
Dans cet exemple, la variable "$titre" associé à la fonction "OptimiseUrl" » "OptimiseUrl($titre)" donne comme résultat » "point-sur-les escales-2012".
L'action cumulé du fichier .htaccess + fonction OptimiseUrl + modification des liens donne comme résultat une url du type :
Code:
http://www.bordeauxpaquebots.com/37-point-sur-les-escales-2012.php

Dans le même style : Url rewriting du site dynamique
En espérant t'avoir aidé..
 
Nouveau WRInaute
Salut,

Merci de ton aide. J'ai bien compris la fin, mais pas le début. Le
Code:
$titre=$_GET["titre"];
doit se mettre où?

Sur ma page news.php j'ai cela:

Code:
<?php
	
	/*
	Connexion à la BDD
	*/
	me identifs
	
	/*
	Affichage d'une news en particulier
	*/
	if(isset($_GET['id'])){
	
		$id = intval(htmlentities($_GET['id']));
		/*
		Si l'id !=0, intval renvoie quelque chose de bon
		*/
		if($id != 0){
			
			$sql = 'SELECT * FROM news WHERE id='.$id.'';
			$req = mysql_query($sql) or die(mysql_error());
			$data = mysql_fetch_assoc($req);
			
			echo '<h1 class="news">'.stripslashes($data['titre']).'</h1>';
			echo '<div class="fond_contenu">';
			echo '<p class="date"> écrit le : '. date("d/m/Y G:i",strtotime ($data['timestamp'])).'</p>';
			echo '<p class="fond_contenu">'.(stripslashes($data['contenu'])).'</p>';
			echo '</div>';
			
			
		}
		/*
		id ==0, intval renvoie certainement qqch de faux
		*/
		else
		{
			echo "Erreur";
		}
	
	}
	
		
	/*
Listage des 5 dernières news
	*/
	else
	{
	
	$sql = 'SELECT * FROM news ORDER BY id DESC LIMIT 0,10';
	$req = mysql_query($sql) or die(mysql_error());
	
	echo '<h1></h1>';
	
	while($data = mysql_fetch_assoc($req)){
				?>
		<div>
		<h2 class="news"><a href="news.php?id=<?php echo $data['id']; ?>"><?php echo stripslashes($data['titre']);?></a><span class="date">écrit le: <?php echo date("d/m/Y G:i", strtotime ($data['timestamp'])); ?></span></h2>
        <div class="fond_contenu"><!--  Cadre News --><p><strong><?php echo stripslashes($data['description']); ?></strong></p></div><!--  Fin Cadre de News -->
        <p>&nbsp;</p>
	  </div>
		<?php
		
	}
		
	}
	
	
	?>


J'ai bien tenté de le mettre sous
Code:
$id = intval(htmlentities($_GET['id']));
mais le lien reste seulement l'ID. Je pense donc qu eje le met à la mauvaise place
 
WRInaute passionné
Salut,

Sur ta page d'accueil, il faut que tu ajoutes dans un premier temps le titre sur tes urls pour que ça donne un truc du style "id-titre.php".
Code:
<a href="<?php echo $data['id']; ?>-<?php echo OptimiseUrl($data['titre']);?>.php"><?php echo stripslashes($data['titre']);?></a>
N'oublie pas la fonction à insérer dans ton fichier...

Dans ton fichier news.php après
Code:
$id = intval(htmlentities($_GET['id']));
tu ajoutes
Code:
$titre = htmlspecialchars($_GET["titre"]);
Dans le listage des 5 dernières news, tu modifies la ligne
Code:
<a href="news.php?id=<?php echo $data['id']; ?>"><?php echo stripslashes($data['titre']);?></a>
en
Code:
<a href="<?php echo $data['id']; ?>-<?php echo OptimiseUrl($data['titre']);?>.php"><?php echo stripslashes($data['titre']);?></a>
 
Nouveau WRInaute
Salut,

Merci beaucoup, là j'ai compris !!
Je tente se soir en rentrant de la fac et je dirais si ça fonctionne. Mais ça devrait le faire, merci beaucoup !!
 
Discussions similaires
Haut