Pages :
Bonjour,
Étant noob en développement j'ai créé un site via un sitebuilder mais afin d'alléger celui-ci je suis parti sur le sujet clos : https://forum.alsacreations.com/topic-1-38756-1-Header-footeretcontenu.html afin d'obtenir un header et un footer qui ne changent jamais mais pouvoir modifier le contenu de la partie centrale de la page.
J'ai placé mes liens de pages à afficher dans le header.php et quand je clique sur un des liens, la page appelée s'affiche en plein écran sans le header ni le footer. Seule la page accueil s'affiche correctement avec le header et le footer.

Help ! Smiley bawling
Bonjour,
je suis aussi débutant mais je viens de faire la même chose sur mon site. Tu as placé des include dans chacune des pages statiques ou tu as fais autrement ?
J'ai ça en début de chaque page appelée :
<script language="javascript" type="text/javascript">
			var cur_page_data = {pageid:"1", pagename:"a_propos"};
		</script>
		<div id="content" class="site-content">

<div id="primary" class="content-area">
	<main id="main" class="site-main" role="main">
		
<article id="post-1" class="post-1 page type-page status-publish hentry">

	<div class="entry-content">
J'ai fait mon index.php comme ça :
<?php
$id_page = isset($_GET['id_page']) ? intval($_GET['id_page']) : 0; // récupération de la variable passée dans l'URL si elle existe
$pages = array('accueil.php', 'a_propos.php', 'candidature_libre.php', 'prestations.php', 'partenaires.php', 'cg.php'); // tableau des pages à inclure (id_page 0, 1, 2, ...)
if( $id_page > count($pages)-1 ) $id_page = 0; // Si id_page n'existe pas on affiche la page d'accueil
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
	<title>Test</title>
</head>
<body>
<?php
require_once('header.php');
if (file_exists($pages[$id_page])) {
    include($pages[$id_page]);
} else {
    echo "Cette page n'existe pas.";
}
require_once('footer.php');
?>
</body>
</html>


Il n'est pas bon ?
Donc on est bien d'accord que c'est à partir de cette page que vont être appelées les pages souhaitées (accueil, à propos...).
Dans la page que je veux afficher (a propos) dans index.php, le code que j'utilise n'est pas bon ?
Modifié par lordbdp (20 Apr 2020 - 14:33)
Hello,

tu utilise ton index.php comme un container de tout ton site ...
Je pense que Jean-Pierre voulait te dire que tu dois inclure le header et le footer qui est le même pour toutes tes pages, sur CHACUNE de tes pages, comme ceci par exemple
index:

<body>
    <?php
require('header.php');
?>
    <div class="taPageIndex">
ICI LE CONTENU DE TA PAGE INDEX
</div>
    <?php 
require("footer.php"); ?>
?>
</body>


Page grenouilles:

<body>
    <?php
require('header.php');
?>
    <div class="taPageGrenouilles">
ICI LE CONTENU DE TA PAGE GRENOUILLES
</div>
    <?php 
require("footer.php"); ?>
?>
</body>


Page aspirateurs:

<body>
    <?php
require('header.php');
?>
    <div class="taPageAspirateurs">
ICI LE CONTENU DE TA PAGE ASPIRATEURS
</div>
    <?php 
require("footer.php"); ?>
?>
</body>


on ne parle pas ici d'une page avec arguments de page dans l'url Smiley cligne
Oui mais pourquoi je n'ai que la page accueil qui s'affiche correctement avec entête et pied et pour les autres pages il n'affiche plus entête et pied ?
Tu as vérifié si tu avais des erreurs console ?
Et le chemin de tes pages est les même ?
Imagine que tes pages header.php et footer.php soient dans un dossier nommé "COMMON"
Disons que index.php soit à la racine et et que autrepage.php soit dans un dossier "OTHER"
Donc, dans index.php, tu dois faire un include avec ce chemin:

<?php require('./COMMON/header.php'); ?>

Si tu remet le même chemin, ça ne fonctionnera pas ...
Il faut donner un chemin correspondant à l'endroit d'où est appelé le fichier à inclure:

<?php require('../COMMON/header.php'); ?>

C'est une idée, au cas où tu n'y ai pas pensé Smiley cligne
Modérateur
A quoi ressemble ton lien vers la page a_propos.php par exemple?

Est ce quelque chose comme index.php?id_page=a_propos.php comme le suggère ton code ?
Voilà le code utilisé dans index.php

<?php
$id_page = isset($_GET['id_page']) ? intval($_GET['id_page']) : 0; // récupération de la variable passée dans l'URL si elle existe
$pages = array('accueil.php', 'a_propos.php', 'candidature_libre.php', 'prestations.php', 'partenaires.php', 'cg.php'); // tableau des pages à inclure (id_page 0, 1, 2, ...)
if( $id_page > count($pages)-1 ) $id_page = 0; // Si id_page n'existe pas on affiche la page d'accueil
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
	<title>Test</title>
</head>
<body>
<?php
require_once('header.php');
if (file_exists($pages[$id_page])) {
    include($pages[$id_page]);
} else {
    echo "Cette page n'existe pas.";
}
require_once('footer.php');
?>
</body>
</html>
Modérateur
gcyrillus a écrit :
A quoi ressemble ton lien vers la page a_propos.php par exemple?

Est ce quelque chose comme index.php?id_page=a_propos.php comme le suggère ton code ?


Tu as déjà partager ce morceau de code d'où mes questions Smiley cligne

Cette portion de code ne devrais jamais etre interpréter : echo "Cette page n'existe pas."; car if( $id_page > count($pages)-1 ) $id_page = 0; , ton erreur provient probablement de l'URL Smiley decu


Cdt

Edit Tu devrais avoir pour que cela fonctionne en fonction de ton script, tous tes morceaux de pages dans le même dossier que index.php (header, footer, et les contenus de chaque pages : accueil, a propos, etc..) et les liens de ton menu (dans header je suppose) avec le numéro correspondant dans ton array $pages.

Rapport à ton script en image, cela donnerait ceci : upload/1588456270-2857-scriptfalsc.jpg
Modifié par gcyrillus (02 May 2020 - 23:52)
J'ai compris, testé et trouvé !!!!!

1) J'ai modifié le début de mon index.php par cela :
<?php
$id_page = isset($_GET['id_page']) ? intval($_GET['id_page']) : 0; // récupération de la variable passée dans l'URL si elle existe
$pages = array(0 => 'accueil.php', 1 => 'a_propos.php', 2 => 'candidature_libre.php', 3 => 'prestations.php', 4 => 'partenaires.php', 5 => 'cg.php'); // tableau des pages à inclure (id_page 0, 1, 2, ...)
?>

et j'ai supprimé la partie echo.

2) Dans le header j'avais juste homis de remplacer le lien direct de la page appelée par le lien contenant le No de la page souhaitée.
En clair j'avais par exemple :
<a href="candidature_libre.php" style="  font-family:; " >Candidature libre</a>

au lieu d'avoir ça :
<a href="index.php?id_page=2" style="  font-family:; " >Candidature libre</a>


Maintenant ça marche ^^.

Merci pour toute vos explications Smiley cligne

PS : La partie echo, je la garde ou non du coup ?
Modérateur
lordbdp a écrit :

PS : La partie echo, je la garde ou non du coup ?


Oui, 'cette page n'existes pas' sera affiché si le fichier correspondant à la page appeler n'existe pas . C'est ce que veut dire ta condition.
https://www.php.net/manual/fr/function.file-exists.php

par exemple si tu appelles la page partenaires.php stockées dans $pages , mais que tu as créer un fichier partenaire.php (sans S aussi important que dans AlsacréationS) , et bien le fichier à inclure n'existeras pas et ton echo te seras utile pour comprendre que tu as tenter d'inclure un fichier qui n'est pas présent là où il aurait du...

Bonne continuation Smiley cligne
cdt
Modifié par gcyrillus (06 May 2020 - 11:36)
Pages :