8768 sujets

Développement web côté serveur, CMS

Pages :
Bonjour,
Alors je me pose une question, mon site fonctionne pas inclusion de page en php comme ceci:
<? if(empty($_GET['page'])) {
			include('modules/news/news.php');
		}
		else
		{	
			$page = $_GET['page'] . '.php';
			if(file_exists($page)) {
				include($page);
			}
			else {
				include('404.php');
			}
		}?>

Et donc j'ai juste le centre de ma page qui change, et je me demandait comment faire pour changer le title de chaque pages quand meme?
A part le faire en Javascript?
Avez vos une solution?
Merci
Salut,

Une des solutions consiste à utiliser les fonctions de Bufferisation de sortie. Cela te permet d'executer du code php sans avoir l'affichage.

Voici comment tu peux faire :

<?php 
# Création et initalisation du buffer
ob_start();

if(empty($_GET['page'])) {
  include('modules/news/news.php');
} else {	
  $page = $_GET['page'] . '.php';

  if(file_exists($page)) {
    include($page);
  } else {
    include('404.php');
  }
}

# On récupère le contenu du tampon de sortie
$content_page = ob_get_contents();

# On vide le tampon de sortie
ob_end_clean();

include('header.php');
echo $content_page;
include('footer.php');
?>


Ensuite il te suffit de rajouter une variable $_TITLE dans chaque page web et de rajouter cela dans le header.php :

<head>
 <title><?php echo $_TITLE; ?></title>
</head>


J'éspère que cela t'aidea Smiley cligne
Salut,

hum ... mais si c'est quasi du HTML ça ou il y a une difficulté que je comprends pas.

si ton code commence par les lignes que tu nous a montrées et qu'il y a pas de déclaration avant de <title> et ben il suffit de faire commencer les pages de contenu que tu appelles par:

<html><head><title>titre de la page page</title></head>

j'ai verifié quand même pour pas dire des bétises Smiley langue et ca passe.

EDIT : héhé j'ai été battu en vitesse. pour 17 secondes arrgg Smiley langue Smiley bawling Smiley lol

pascal
Modifié par CPascal (05 May 2007 - 20:06)
hum hum,

c'est pas moi qui est proposer.

mais je dirais qu'hormis l'interêt d'avoir la possibilité de mettre la page en cache ( c'est le but en général mais je pense que tu parlais de ce cas en particulier)

l'autre avantage c'est de rendre l'affichage plus rapide quand ça s'affiche mais au pris d'un delai avant l'affichage.

Ici tous depend si on peut utiliser ma methode: tous en statique html
où si le titre demande une reflexion...je sais pas moi recherche dans un tableau que sais-je.

pascal
Modifié par CPascal (05 May 2007 - 21:26)
Super_baloo8 a écrit :
Euh, une petite question qui va vous paraitre bête, mais quel est l'intérét (avantage) d'utiliser le buffer de php ?

L'intérêt est de pouvoir executer du code php et d'afficher le résultat lorsque l'on en a besoin. Bien entendu, cela n'a aucun intérêt si la solution que propose pascal peut être utilisé. Sinon, dans la cas contraire, sans la bufferisation, on afficherai le contenu des pages avant le header et le footer.

CPascal a écrit :
EDIT : héhé j'ai été battu en vitesse. pour 17 secondes arrgg langue bawling lol

C'est grâce à mon tout nouveau clavier V8 4 touches motrices Smiley biggrin Smiley cligne
cerede2000 a écrit :

Et donc j'ai juste le centre de ma page qui change

Hum vous avez pas tout lut...
Le code se trouve au milieu de la page, par conséquent il y a deja un head et plein d'autre chose dans la page.

Voila la page complete:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Benjy-Mobile</title>
<link rel="shortcut icon" type="image/x-icon" href="./favicon.ico" />
<link rel="stylesheet" href="./index.css" type="text/css" />
<link rel="stylesheet" href="./modules/news/news.css" type="text/css" />
<link rel="stylesheet" href="./mail.css" type="text/css" />
<link rel="stylesheet" href="./tuto/tuto.css" type="text/css" />
</head>
<body>
<div id="conteneur">
	<div id="header">
		<img src="ban.png" width="350" height="88" alt=""/>
	</div>

	<div id="haut">
		<ul class="menuhaut">
			<li>
				<a href="index.php" onmouseover="document.imag.src='startbutton_clik.gif';" onmouseout="document.imag.src='startbutton_low.gif';">
					<img class="startimg" src="startbutton_low.gif" name="imag" alt="Retour &agrave; l'index"/>
				</a>
			</li>
			<li>
				<img class="gripimg" src="frame_grip.gif" alt=""/>
			</li>
			<li class="menuhautli">
				<a href="http://tigen.org" target="_blank">
					Ti-Gen.org
				</a>
			</li>
			<li>
				<img class="gripimg" src="frame_grip.gif" alt=""/>
			</li>
			<li class="menuhautli">
				<a href="http://www.forummobile.com" target="_blank">
					ForumMobile.com
				</a>
			</li>
			<li>
				<img class="gripimg" src="frame_grip.gif" alt=""/>
			</li>
			<li class="menuhautli">
				<a href="http://www.univ-reims.fr" target="_blank">
					Universit&eacute; de Reims
				</a>
			</li>
			<li>
				<img class="gripimg" src="frame_grip.gif" alt=""/>
			</li>
		</ul>
	</div>

	<div id="gauche">
		<div class="corpsmenu">
			<h2>
				<span class="spatitremen">
					<img src="info.gif" width="16" height="16" align="left" alt=""/>Pages:
				</span>
			</h2>
			<div class="basmeng">
				Page SE:
				<ul>
					<li>
						<a href="?page=./tuto/tuto1">
							Tuto encodage vidéo mobile
						</a>
					</li>
					<li>
						<a href="?page=./tuto/tuto2">
							Fichiers originaux
						</a>
					</li>
				</ul>
			</div>
		</div>
	</div>

	<div id="droite">
		<div class="corpsmenu">
			<h2>
				<span class="spatitremen">
					<img src="info.gif" width="16" height="16" align="left" alt=""/>Info Visiteur:
				</span>
			</h2>
			<p class="basmen">
				<? include('modules/heure/date.php'); 
				echo 'Votre IP: ', $adress; ?>
			</p>
		</div>
		<div class="corpsmenu">
			<h2>
				<span class="spatitremen">
					<img src="info.gif" width="16" height="16" align="left" alt=""/>Compteur:
				</span>
			</h2>
			<p class="basmen">
				<?php include('modules/visite/visite.php');
  				echo $compteur_j . '<br/>'; //Compteur journalier
  				echo '<br/>' . $compteur_c . '<br/>'; //Compteur de connectés
				echo '<br/>' . $compteur; //Compteur total ?> 
			</p>
		</div>
		<div class="corpsmenu">
			<h2>
				<span class="spatitremen">
					<img src="info.gif" width="16" height="16" align="left" alt=""/>Contact:
				</span>
			</h2>
			<p class="basmen">
				<a onmouseover="window.status='M&rsquo;envoyer un mail!!';return true;" onmouseout="window.status='';return true;" href="index.php?page=mail">
					<img src="contact.gif" width="26" height="26" alt=""/>
				</a>
			</p>
		</div>
	</div>

	<div id="centre">
		<?php if(empty($_GET['page'])) {
			include('modules/news/news.php');
		}
		else
		{	
			$page = $_GET['page'] . '.php';
			if(file_exists($page)) {
				include($page);
			}
			else {
				include('404.php');
			}
		}?>
	</div>

	<div id="pied">
       	<a href="modules/news/admin.php">
			Benjy&copy;2006
		</a>
		<?php echo $nbquery . ' requête(s)';?>
		<a href="http://validator.w3.org/check?uri=referer" target="_blank">
			<img src="validhtml.png" border="0" width="80" height="15" alt="Valid XHTML 1.0 Transitional"/>
		</a>
		<a href="http://jigsaw.w3.org/css-validator/validator?uri=http://bbjess.free.fr/" target="_blank">
			<img src="validcss.png" border="0" width="80" height="15" alt="Valid XHTML 1.0 Transitional"/>
		</a>
	</div>
</div>
</body>
</html>


Mais bon pour l'instant le JS reste le plus simple :S Mais bon niveau referencement c'est pas top je pense...
Pour pouvoir modifier ton titre à la volée en php il faut avoir une architecture comme celle ci :

Header + Footer (deux fichiers en php)

Plus le fichier appeller en php aussi.

C'est le fichier appeller qui appellera tes deux autre fichiers, et ainsi tu pourra crée des variables pour changer tes titres, et les renseigner directement dans la page appelé qui traitera les deux autre fichiers.

Sinon, il suffisait d'aller voir ce tutorial pour comprendre Smiley cligne

@ymhotepa

Pour le buffer php, je voulais le savoir pour moi même, vos réponses ne sont pas clair pour moi, ou soit j'ai du mal à suivre.

J'ai une site, que je suis en train de faire, ou tout le contenu est en base de donnée.

J'utilise l'url rewriting pour créer les url. Donc j'ai un seul fichier qui me permet de créer toutes les pages dont j'ai besoin.

Donc en gros, j'appelle toujours le même fichier, ou je remplace toutes les variable pour créer ma page.

J'ai donc une structure à trou, et je remplis les trous par ce que j'ai en base de donnée. Est-ce que le buffer me permettra d'avoir un traitement plus rapide ? (le traitement n'est pas long, mais si je peux l'améliorer c'est un plus.)

Merci
Modifié par Super_baloo8 (05 May 2007 - 22:35)
cerede2000 a écrit :
Le code se trouve au milieu de la page, par conséquent il y a deja un head et plein d'autre chose dans la page.

Rien ne t'empêche de placer le bloc php qui inclue la page + fonction de bufferisation et de mettre $content_page à la place dans le code html comme cela :

<?php 
# Création et initalisation du buffer
ob_start();

if(empty($_GET['page'])) {
  include('modules/news/news.php');
} else {	
  $page = $_GET['page'] . '.php';

  if(file_exists($page)) {
    include($page);
  } else {
    include('404.php');
  }
}

# On récupère le contenu du tampon de sortie
$content_page = ob_get_contents();

# On vide le tampon de sortie
ob_end_clean();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
...
<div id="centre">
 <?php echo $content_page; ?>
</div>
...
</html>


EDIT : Cette fois c'est moi qui me suis fait prendre de vitesse et en plus de 2 secondes Smiley bawling Smiley langue Smiley biggrin
Modifié par ymhotepa (05 May 2007 - 22:37)
ymhotepa a écrit :

EDIT : Cette fois c'est moi qui me suis fait prendre de vitesse et en plus de 2 secondes Smiley bawling Smiley langue Smiley biggrin



Smiley biggol

Je repose ma question car je ne sais pas si tu l'as lu Smiley smile

"Sylvain" a écrit :
@ymhotepa

Pour le buffer php, je voulais le savoir pour moi même, vos réponses ne sont pas clair pour moi, ou soit j'ai du mal à suivre.

J'ai une site, que je suis en train de faire, ou tout le contenu est en base de donnée.

J'utilise l'url rewriting pour créer les url. Donc j'ai un seul fichier qui me permet de créer toutes les pages dont j'ai besoin.

Donc en gros, j'appelle toujours le même fichier, ou je remplace toutes les variable pour créer ma page.

J'ai donc une structure à trou, et je remplis les trous par ce que j'ai en base de donnée. Est-ce que le buffer me permettra d'avoir un traitement plus rapide ? (le traitement n'est pas long, mais si je peux l'améliorer c'est un plus.)

Merci
Ce qui peut être intéressant si le contenu de tes pages web ne varie que très rarement c'est d'utiliser la bufferisation de sortie afin de créer des pseudo pages statiques. Cela revient à créer un certain système de cache.

Pour cela, il te suffit de créer les fichiers html qui contiendront le code php executé par le serveur. Ils contiendront au final du code html. Et c'est à ce niveau qu'intervient la bufferisation. En effet, lorsque tu executeras le code php, celui-ci sera interprété et les sorties (echo, print, etc..) seront affichées à l'écran. La bufferisation permet d'éviter cela et d'obtenir le résultat de l'interprétation du php dans une variable.

Je pense qu'un petit exemple sera plus parlant parce que je ne sais pas si je suis bien clair.

$file_name = le nom du fichier que tu aura généré;

// tu peux ici effectuer des tests pour voir si le contenu de la page à changer. Si tel est le cas tu recrée le fichier

// Début de la bufferisation
ob_start();

/* ici tu places ton code php ou tu inclues le(s) fichiers désiré */

// tu enregistres ensuite le résultat dans le fichier
$p = @file_put_contents($file_name, ob_get_contents());

// on vide le buffer
ob_end_clean();


Sinon à part pour faire cela et réglé le problème de cerede2000, je ne vois pas d'autre utilisation. D'un autre côté, je n'ai pas assez utiliser cette fonctionnalité pour t'en parler plus, désolé. Smiley decu

J'éspère cependant que cela t'aidera Smiley cligne
Je connait le faite de séparer l'en tête et le pied de page. Mais bon l'inclusion c'est pour avoir le moins de fichier possible donc si on commence a faire 15millions d'en têtes juste pour les titres des pages...
Ca serais tellement beau de ne pas devoir faire quelques sacrifices (2 fichiers supplémentaire, ou soit aucun fichier à rajouter si tu inclus dès l'entete) juste pour le référencement et l'accessibilité ...
a écrit :

Sinon à part pour faire cela et réglé le problème de cerede2000, je ne vois pas d'autre utilisation.

La bufférisation de sortie permet aussi d'une part d'éviter le fameux message header already send et d'autre part, permet de compresser la page à la volée pour un affichage plus rapide (avec ob_gzhandler).
Salut !

puisque le title dépend de la page pourquoi ne pas faire :
<?php
if (isset($_GET['page'])) {	
	$numpage = intval($_GET['page']);
} 
else 
{
	$numpage = 0;
}

if ($numpage < 0 or $numpage > 2 ) {	
	$numpage = 100;
}


$title = array(
    0 => 'Benjy-Mobile',
    1 => 'News',
    2 => '...',
    100 => 'Page inconnue',
);
?>
<!DOCTYPE html PUBLIC...

et plus loin :
<title><?php echo $title[$numpage] ?></title>
D'après moi, il n'y a pas besoin d'utiliser la bufférisation pour avoir un title variable.

Personnellement, je fais comme ça :

[b]index.php[/b]
<?php
$titre = "Accueil";
include("header.php");
?>
<p>Hello world !</p>
<?php include("footer.php"); ?>

[b]header.php[/b]
<!doctype ...... >
<html ....... >
<head>
<title><?php echo $titre; ?>
......
</head>
<body>
......

[b]footer.php[/b]
......
</body>
</html>

QuentinC a écrit :
D'après moi, il n'y a pas besoin d'utiliser la bufférisation pour avoir un title variable.

Donc dans ce cas là tu ne gardes pas le principe de départ fourni par cerede c'est à dire de n'avoir qu'un seul fichier contenant à la fois le header et le footer et de n'inclure que le contenu.

Ta solution ressemble à celle proposée par super_baloo à savoir inclure le header et le footer dans chaque page
Salut,

il me semble qu'Heyoan a indiqué une piste intéressante ... il faudrait qu'on sache comment les titres de pages sont liés à la variable $_GET['page'], mais on peut toujours envisager ce qu'il a proposé.
<title><?php
   $titles = array(
      'accueil' => 'Page d\'accueil',
      'news' => 'Les dernières nouvelles',
      ...
   );
   if (array_key_exists($_GET['page'], $titles)) {
      echo $titles[$_GET['page']];
   }
   else {
      echo 'Page introuvable';
   }; 
?></title>
Pages :