Page 1 sur 1

Récupérer le titre d'une page pour créer une path bar

Posté : 06 nov. 2006, 12:29
par fque
Bonjour à tous,

je souhaite récupérer le titre d'une page à l'autre afin de créer une path bar de navigation du type :

Accueil > Page x > Page y

mon titre de page est géré par une variable
$title
en fait je souhaite créer dynamiquement cette path bar

par avance merci

Posté : 06 nov. 2006, 12:36
par Ajoloca
Bonjour,

Les sessions seront tes amies;

Posté : 06 nov. 2006, 12:43
par fque
peux-tu m'en dire d'avantage sur la marche à suivre ?

merci

Posté : 06 nov. 2006, 12:55
par Ajoloca
Re,
L'utilisation de '$_SESSION[]' est très simple, ça s'utilise comme un tableau PHP et ça te permet de conserver des valeurs entre les pages.

La seule contrainte (si ça en est une) c'est que toutes tes pages doivent commencer par l'instruction
session_start()
Dans ton cas ça donnerait QQ chose du style
session_start();
/*
Ici ton code, comme l'affectation de $titre
.....
*/
if(!isset($_SESSION['path_bar']))
   $_SESSION['path_bar'] = $titre;
else
   $_SESSION['path_bar'] .= ' > ' . $titre;
Et pour l'afficher
echo $_SESSION['path_bar'];
Comme tu peux le voir il n'y-a rien de compliqué

EDIT:
En réalité c'est un peut plus complexe que ça pour gèrer le retour.

Posté : 06 nov. 2006, 13:08
par Vikchill
Le plus simple, c'est de savoir où tu es l'arborescence qu'est ton site, soit en ayant une structure de dossier reflètant cette arborescence (et donc tu mets le chemin de ton fichier racine>dossier1>sous-dossier3), soit en ayant une petite table de correspondance.

Posté : 06 nov. 2006, 13:18
par fque
j'ai mis en place le bout de code, il me génère bien le titre de la page mais pas les rubriques ou pages précédentes.

De plus dès que j'actualise ma page il m'affiche le titre en boucle :

page 1 > page 1 > page 1 > page 1 > page 1 ....

comprend pas !

Posté : 06 nov. 2006, 13:53
par Ryle
C'est parce que tu utilises une chaines de caractères que tu complètes de ton titre à chaque fois que tu ouvres la page... donc dès que tu recharges, il rajoute de nouveau le titre à la fin de ta chaine :)

Au lieu d'une chaine, je te suggère d'utiliser un tableau, qui sera plus pratique pour empiler ou dépiler les éléments de ton arborescence. Il te faut ensuite t'assurer que tu n'ajoutes pas deux fois le même élément et que tu les retires bien lorsque tu remontes d'un niveau...

ce n'est pas forcément ce qu'il y a de plus simple à faire.. tout dépend de la structure de ton site. Si possible le mieux serait de t'appuyer sur les dossiers comme Vikchill le conseil... sinon bah c'est des galères d'empilement et de dépilement à gérer pour savoir où tu en es dans ton arbo :)

Posté : 06 nov. 2006, 14:28
par fque
j'ai une arbo du type :

Rep 1 avec un index.php - Sous-rep 1 avec un index.php
Rep 2 avec un index.php - Sous-rep 2 avec un index.php
Rep 3 avec un index.php - Sous-rep 3 avec un index.php

etc...

quelle solution serait la plus adaptée ?

Posté : 06 nov. 2006, 14:59
par Ajoloca
Re,

Je crois que vous vous compliquez la vie
ceci devrait fonctionner sans trop de soucis
<?php
session_start();
$titre = "acceuil";

$titreDepart = 'acceuil';
if ($titreDepart == $titre) unset ($_SESSION['path_bar']); // Page acceuil, on démarre la session

if(!isset($_SESSION['path_bar'])){ // SESSION non initialisée
	$_SESSION['path_bar'] = $titreDepart;
}
else{
	$titreExiste = strstr($_SESSION['path_bar'], " > $titre");
	if($titreExiste === false && $titreExiste != $_SESSION['path_bar']){ // Le titre n'est pas dans la chaine, on concatène
		$_SESSION['path_bar'] .= " > $titre";
	}
	else{
		$debPath = substr($_SESSION['path_bar'], 0, (strlen($_SESSION['path_bar']) - strlen($titreExiste)));
		$_SESSION['path_bar'] = $debPath . " > $titre";
	}
}
echo $_SESSION['path_bar'] . '<br />';
?>
<a href='ess1.php'>page suivante</a>
La page suivante, on ne chage que le titre et les liens
<?php
session_start();
$titre = "page 1";

$titreDepart = 'acceuil';
if ($titreDepart == $titre) unset ($_SESSION['path_bar']); // Page acceuil, on démarre la session

if(!isset($_SESSION['path_bar'])){ // SESSION non initialisée
	$_SESSION['path_bar'] = $titreDepart;
}
else{
	$titreExiste = strstr($_SESSION['path_bar'], " > $titre");
	if($titreExiste === false && $titreExiste != $_SESSION['path_bar']){ // Le titre n'est pas dans la chaine, on concatène
		$_SESSION['path_bar'] .= " > $titre";
	}
	else{
		$debPath = substr($_SESSION['path_bar'], 0, (strlen($_SESSION['path_bar']) - strlen($titreExiste)));
		$_SESSION['path_bar'] = $debPath . " > $titre";
	}
}
echo $_SESSION['path_bar'] . '<br />';
?>
<a href='ess.php'>page pr&eacute;c&eacute;dente</a><br />
<a href='ess2.php'>page suivante</a>
Et la dernière, idem pour titre et liens
<?php
session_start();
$titre = "page 2";

$titreDepart = 'acceuil';
if ($titreDepart == $titre) unset ($_SESSION['path_bar']); // Page acceuil, on démarre la session

if(!isset($_SESSION['path_bar'])){ // SESSION non initialisée
	$_SESSION['path_bar'] = $titreDepart;
}
else{
	$titreExiste = strstr($_SESSION['path_bar'], " > $titre");
	if($titreExiste === false && $titreExiste != $_SESSION['path_bar']){ // Le titre n'est pas dans la chaine, on concatène
		$_SESSION['path_bar'] .= " > $titre";
	}
	else{
		$debPath = substr($_SESSION['path_bar'], 0, (strlen($_SESSION['path_bar']) - strlen($titreExiste)));
		$_SESSION['path_bar'] = $debPath . " > $titre";
	}
}
echo $_SESSION['path_bar'] . '<br />';
?>
<a href='ess1.php'>page pr&eacute;c&eacute;dente</a><br />
Et faire un fichier de la partie répétitive pour l'inclure dans chaque page.

Posté : 06 nov. 2006, 16:01
par Ajoloca
Pour l'inclusion (j'avais pas fait sur le précent post)
Le fichier à include (path_bar.php)
<?php
$titreDepart = 'acceuil';
if ($titreDepart == $titre) unset ($_SESSION['path_bar']); // Page acceuil, on démarre la session

if(!isset($_SESSION['path_bar'])){ // SESSION non initialisée
	$_SESSION['path_bar'] = $titreDepart;
}
else{
	$titreExiste = strstr($_SESSION['path_bar'], " > $titre");
	if($titreExiste === false && $titreExiste != $_SESSION['path_bar']){ // Le titre n'est pas dans la chaine, on concatène
		$_SESSION['path_bar'] .= " > $titre";
	}
	else{
		$debPath = substr($_SESSION['path_bar'], 0, (strlen($_SESSION['path_bar']) - strlen($titreExiste)));
		$_SESSION['path_bar'] = $debPath . " > $titre";
	}
}
?>
Le fichier de départ (ess.php)
<?php
session_start();
$titre = "acceuil";
include_once('path_bar.php');
echo $_SESSION['path_bar'] . '<br />';
?>
<a href='ess1.php'>page suivante</a>
Le fichier intermédiaire (ess1.php)
<?php
session_start();
$titre = "Page 1";
include_once('path_bar.php');
echo $_SESSION['path_bar'] . '<br />';
?>
<a href='ess.php'>page pr&eacute;c&eacute;dente</a><br />
<a href='ess2.php'>page suivante</a>
Et le dernier(ess2.php)
<?php
session_start();
$titre = "Page 2";
include_once('path_bar.php');
echo $_SESSION['path_bar'] . '<br />';
?>
<a href='ess1.php'>page pr&eacute;c&eacute;dente</a><br />
<a href='ess.php'>D&eacute;but</a>

Posté : 06 nov. 2006, 17:12
par fque
meci beaucoup !

Posté : 06 nov. 2006, 17:17
par Ajoloca
De rien. Si ça correspond à ce que tu voulais, marque le sujet comme résolu.