8791 sujets

Développement web côté serveur, CMS

Bonjour,

je suis en train de faire mon site internet ou j'ai implanté un fils d'ariane.
Il fonctionne tres bien c'est cool. Le probleme est que je n'arrive pas à le rendre cliquable. C'est a dire que s'il y a écrit : index > general > presentation. Si je clique sur index, il me renvoie à www.monsite.fr/index

Mon fil fonctionne via un table SQL. Il y a tout dedant. En faite au debut de sort tout ce qui est dans le tableau et je le gere sur ma page apres.
Il contient l'id de chaque page. Le nom de chaqu'une d'elles qui est utilise pour l'url rewriting. Un ariane qui est la meme chose que le nom mais écrit plus proprement car c'est ce qui est affiché sur le fil d'arine. Et parents qui contient l'id du parent.

Le code de mon fil est le suivant :

<?php
		$sql="SELECT * FROM categories";
						$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
						while($data=mysql_fetch_assoc($req)){
							$stock[$data['id']] = array(
								'id' => $data['id'],
								'nom' => $data['nom'],
								'ariane' => $data['ariane'],
								'parent' => $data['id_parent']
							);			
					   }
					   $id=$_GET['id'];

                                     if(isset($id) && preg_match("/^[0-9]+$/",$id)){
						if(file_exists("pages/$pages.html")){

						$current_category=$id;
					   $start = $current_category;
					   $ariane[] = $stock[$start]['ariane'];
					   while($stock[$start]['parent']!=0) {
						   $ariane[] = $stock[$stock[$start]['parent']]['ariane'];
						   $start = $stock[$start]['parent'];
					   }
					   krsort($ariane);
					   echo implode(' > ', $ariane);




Le probleme est que je ne sais pas comment mettre un lien avec un implode.
Si quelqu'un a une idée... je suis preneur !! Parceque là je sèche...

Merci d'avance !
Et joyeux noel !
Salut,

je ne comprends pas bien ta question : un lien est un lien (qu'il soit écrit directement en html ou généré en php). Où est le problème ?
en faite j'utilise ma bdd pour generer mon fil d'ariane. Je le mets dans un table et j'affiche mon table. Je l'affiche avec un implode. Le probleme est qu'il sorte mais sans lien (ils sont non cliquable). Et je voudrai les rendre cliquable. que par exemple si j'ai www.monsite.fr/sport/velo mon fil est : index > sport > velo.

Mais je ne peux pas cliquer sur velo pour aller sur la page velo ou meme si sport pour aller sur sport.

j'espere que j'ai reussi a etre plus clair Smiley biggrin
Coucou !
Alors je viens de m'apercevoir que ca ne fonctionne pas à 100%. Je m'explique :
J'ai tout fais comme dans le tuto qui est extra au passage. Seulement j'ai ajouté un url rewriting. Et ou est le problème me direz vous ?
Le problème est au niveau des liens lorsqu'on clic sur le fil d'Ariane. J'ai du les modifier pour qu'il ne ressemble plus à index.php?id_page=...

J'ai donc ajouté une donné à la table ou j'y passe le nom.
Voila ma fonction qui va lire le serveur :

function extraction_infos_DB() {
	$strSQL = 'SELECT * FROM `pages` WHERE `Id_page` = '.$_ENV['id_page'];
	$resultat = requete_SQL($strSQL);
	$tabl_result = mysql_fetch_array($resultat);
	$_ENV['nom'] = $tabl_result['nom'];
	$_ENV['mots_cles'] = $tabl_result['Mots_cles'];
	$_ENV['description'] = $tabl_result['Description'];
	$_ENV['titre'] = $tabl_result['Titre'];
	$_ENV['contenu'] = $tabl_result['Contenu'];
	$_ENV['id_parent'] = $tabl_result['Id_parent'];
	$pages = $_ENV['nom'];

}


Et voila ma fonctionne chemin de fer.



// Affiche le chemin de fer.
// Paramètres : id de la page en cours -> $idpage
// Renvoie : chemin complet -> $chemin_complet
function affiche_chemin_fer($idpage) {
	// on définit la variable pour éviter le warning
	$chemin_complet = "";
	// Si l'id de la page en cours est différent de 0 
	// (0 = page parente de la page racine = inexistante)
	if ($idpage != 0) {
		// on récupère les informations de la page en cours dans la DB
		$strSQL = 'SELECT `nom`, `Titre`, `Id_parent` FROM `pages` WHERE `Id_page` = '.$idpage;
		$resultat = requete_SQL($strSQL);
		$tabl_result = mysql_fetch_array($resultat);
		$nom = $tabl_result['nom'];
		$titrepage = $tabl_result['Titre'];
		$idparent = $tabl_result['Id_parent'];

		// création du lien vers la page en cours
		if($nom!="accueil"){
		$chemin_page_en_cours = ' -> <a href="'.$nom.'">'.$titrepage.'</a>';
		}
		else{
		$chemin_page_en_cours = ' -> <a href="/">'.$titrepage.'</a>';
		}
		// Concaténation du lien de la page N-1 et
		// du lien de la page en cours
		$chemin_complet = affiche_chemin_fer($idparent).$chemin_page_en_cours;
	}
	// renvoie le chemin complet
	return $chemin_complet;
}


C'est à ce niveau la que ça pose probleme je suppose:

$chemin_page_en_cours = ' -> <a href="'.$nom.'">'.$titrepage.'</a>';


Mais que mettre à la place ?
Je vais faire un exemple pour essayer d'etre plus clair :
En faite la par exemple j'ai : index > sport > vélo.
Le lien de vélo est www.monsite.fr/sport/velo donc ok.
Le lien de sport est www.monsite.fr/sport/sport donc pas ok.

J'avais eu l'idée de mettre un / devant le .$nom mais du coup c'est sport qui fonctionne mais vélo ne fonctionne plus.

Quelqu'un a une idée ? Smiley sweatdrop
merci d'avance en tout cas.
Et si tu mettais ton menu dans un tableau avec les antécédents ?

Je m'explique, tu crées une table sql pour ton menu avec trois colonnes : index, menu précédent, menu.

cela donnerait un truc du genre

index/menu/précédent
1/index/
2/sport/index
3/velo/sport
etc...

et donc pour le menu velo tu fais une recherche du mot velo, tu cherches l'antécédent, avec un while tu fais une boucle ( tant qu'on trouve un antécédent on continue de chercher ) et en même temps tu l'incrémentes dans une variable. ( par exemple $lien=$precedent."/".$lien; )
ce qui fait que la variable $lien incluerait le lien tout au long du while. Et donc quand le while est fini tu complètes le lien par exemple $lien="http://www.monsite.com/".$lien;

en espérant que l'idée te sera utile...
oui c'est pas bete. Je me suis penché sur ce que tu as proposé mais quand je regarde le code que j'ai c'est le meme systeme en faite.
function affiche_chemin_fer($idpage) {
	// on d&#43497;nit la variable pour &#44521;ter le warning
	$chemin_complet = "";
	// Si l'id de la page en cours est diff&#44261;nt de 0 
	// (0 = page parente de la page racine = inexistante)
	if ($idpage != 0) {
		// on r&#43317;p&#40165; les informations de la page en cours dans la DB
		while($idpage!=0){
		$strSQL = 'SELECT `nom`, `Titre`, `Id_parent` FROM `pages` WHERE `Id_page` = '.$idpage;
		$resultat = requete_SQL($strSQL);
		$tabl_result = mysql_fetch_array($resultat);
		$nom = $tabl_result['nom'];
		$titrepage = $tabl_result['Titre'];
		$idparent = $tabl_result['Id_parent'];
		
		// cr&#43188;ion du lien vers la page en cours
		if($nom!="accueil"){
		$chemin_page_en_cours = ' -> <a href="'.$nom.'">'.$titrepage.'</a>';
		}
		else{
		$chemin_page_en_cours = ' -> <a href="/">'.$titrepage.'</a>';
		}
		// Concat&#44001;tion du lien de la page N-1 et
		// du lien de la page en cours
		$chemin_complet = affiche_chemin_fer($idparent).$chemin_page_en_cours;
		}
	}
	// renvoie le chemin complet
	return $chemin_complet;
}


on relance la fonctionne affiche_chemin_fer tant que que l'id page n'est pas à 0.
Faudrai que j'ajoute une condition au milieu je pense.
Salut,

Pourquoi ne pas tout simplement garder les url des pages visitées en session ?
Puis récupéré le titre à coup de strrchr et substr.