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

Eléphanteau du PHP | 21 Messages

06 nov. 2006, 12:29

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

ViPHP
ViPHP | 1961 Messages

06 nov. 2006, 12:36

Bonjour,

Les sessions seront tes amies;
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Eléphanteau du PHP | 21 Messages

06 nov. 2006, 12:43

peux-tu m'en dire d'avantage sur la marche à suivre ?

merci

ViPHP
ViPHP | 1961 Messages

06 nov. 2006, 12:55

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.
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Eléphant du PHP | 193 Messages

06 nov. 2006, 13:08

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.

Eléphanteau du PHP | 21 Messages

06 nov. 2006, 13:18

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 !

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

06 nov. 2006, 13:53

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 :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 21 Messages

06 nov. 2006, 14:28

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 ?

ViPHP
ViPHP | 1961 Messages

06 nov. 2006, 14:59

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.
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

ViPHP
ViPHP | 1961 Messages

06 nov. 2006, 16:01

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>
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Eléphanteau du PHP | 21 Messages

06 nov. 2006, 17:12

meci beaucoup !

ViPHP
ViPHP | 1961 Messages

06 nov. 2006, 17:17

De rien. Si ça correspond à ce que tu voulais, marque le sujet comme résolu.
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein