[RESOLU] Aide pour le contenu

Mammouth du PHP | 702 Messages

11 déc. 2012, 17:26

comment tu appelle tes pages a inclure, montre moi la forme d'un lien quelconque de ton menu.php.

Par exemple le lien qui amène sur ta page ou sont affichées les news

Eléphant du PHP | 69 Messages

11 déc. 2012, 18:11

http://nomdedomaine.fr/accueil.php

>> Sera affiché les news

Mammouth du PHP | 702 Messages

11 déc. 2012, 18:23

c'est un peu n'importe quoi ton code, si j'ai bien compris tous tes fichiers reprennent la structure du fichier index.php sauf que tu fais tes includes pour les menus et autres ?

pourquoi ne pas faire un seul fihcier index.php et faire une include seulement du contenu central qui change?

Eléphant du PHP | 69 Messages

11 déc. 2012, 18:43

C'est exactement ce que je viens de faire lol, tu as lus dans mes pensés ?!

En fait au lieu de faire 10 milles includes, j'en ai fait qu'une seul avec tout dedans, je sais pas pourquoi j'y est pas penser au départ oO

<?php include("include/base.php"); ?>

AU LIEU DE

<?php include("module/banniere.php"); ?>
<?php include("module/menu.php"); ?>
<?php include("module/flash.php"); ?>
<?php include("module/contenu.php"); ?>
<?php include("module/bloc.php"); ?>
<?php include("module/copyright.php"); ?>

(J'ai changé le nom du dossier aussi)

Donc dans sont centre il y a une DIV (id=contenu"), et c'est dans cette DIV que le contenu change selon la page ou l'on est

Ce qui veut dire si je suis sur accueil
<div id="contenu" >

 <div id="news" >
 le tralala
 </div>

</div>
Mais il faut que les news s'affiche uniquement sur accueil, quand je suis sur club le contenu doit être les horaires.

Vous me conseillez d'ailleurs quel technique

1er technique !
<div id="contenu" >

     <?php if(condition) { ?>
 
          <div> j'écris tous le code de mes news </div>
 
     <?php } ?>

</div>
2éme technique
<div id="contenu" >

     <?php if(condition) { ?>
 
          <?php include("module/news.php"); ?>
 
     <?php } ?>

</div>
Il faut dire que avec la 1ére, j'aurai absolument presque tout sur une même page oO

Donc bien-sur la condition que j'ai écrite est c'elle que vous m'avez proposer au dessus que d'ailleurs je ne comprend pas est espère que vous allez m'aider :)

Mammouth du PHP | 702 Messages

12 déc. 2012, 10:39

ça change pas grand chose...

D'abord il faut que tu change tous tes liens du menu,
ce que je te conseil c'est de passer un paramètre que tu peux appeler page ou p en url

exemple si tu a un fichier index.php qui inclue une page d'accueil nommée accueil.php
tu fais un lien index.php?p=accueil ou index.php?page=accueil. Bien entendu tu fois faire chaque lien sous cette forme
Ces liens tu les mets dans le menu et de même a chaque fois que tu veux appeler une page.
si tu prend le paramètre p dans la fonction tu vois tu as le $_GET['p'] par contre si tu change tu veux l'appeler page ou autre
tu devras faire les changements afférents dans les fonctions ci dessous.

En suite la ou doivent être affichée et inclue tes pages tu fais un code d'inclusion du genre
                       <?php
                                if (!isset($_GET['p'])) {
                                    $_GET['p'] = 'accueil';
                                };
                                getPage($_GET['p']);
                                ?>
Ensuite tu créé une fonction getPage qui fera les inclusions que tu rajoute dans ta librairie de fonctions.
Si tu n'as pas de librairie de fonction ce qui peut arriver tu la met juste avant d'appeler la fonction.

Mais ce que je te recommande plutôt que d'écrire des fonctions à droite ou à gauche c'est directement de créer une fichier
que tu appelle comme tu veux par exemple fonctions.php et dans ce fichier tu mets toutes les fonctions que tu utilisera.

Ensuite tu inclue sur fichier sur ton index.php
function getPage($var) {

   if (isset($var))) {
        // page respectant la structure => on l'inclut directement
        if(file_exists('pages_php/' . $var . '.php')) // on vérifie que le fichier existe bien
        { 
        include('pages_php/' . $var . '.php'); // à adapter si tes pages sont dans un répertoire différent ou pas.
        }
         else {
          inlude('pages_php/accueil.php'); // Si le fichier n'existe pas tu inclue la page d'accueil 
         };
    } else {
        //Aucune page spécifiée => default page si aucune page n'est trouvée tu inclu ta page d'accueil.
        inlude('pages_php/accueil.php');
    }
A partir de cela maintenant que tu inclue tes pages de façon plus propre tu peux savoir sur quelle page tu te situ en fonction des paramètres de l'url.

ensuite tu n'as plus besoin de mettre
 <?php if(condition) { ?>
 
          <div> j'écris tous le code de mes news </div>
 
     <?php } ?>
car tu inclu le module de news dans ta page d'accueil ainsi il ne sera affiché que sur la page d'accueil.

ViPHP
xTG
ViPHP | 7331 Messages

12 déc. 2012, 11:32

Attention à file_exists, c'est un trou béant dans la sécurité si le safe_mode n'est pas activé.

Mammouth du PHP | 702 Messages

12 déc. 2012, 11:48

normalement par défaut il est activé, c'est vrai que j'aurais du lui préciser.

Eléphant du PHP | 69 Messages

12 déc. 2012, 16:10

Jolie réponse.

En revanche, je suis un peu perdu donc on va faire étape par étape :)

1 - Tous mes liens ont été changés
<li class="onglet" ><a href="accueil.php?page=accueil" >ACCUEIL</a></li>

AU LIEU DE 

<li class="onglet" ><a href="accueil.php" >ACCUEIL</a></li>
2 - Donc pour ma part, j'ai :

$_GET['page']

Ce qui m'intéresse ce trouve après le '?' je suppose.

3 - Ici, j'ai :
<?php
	
		if (!isset($_GET['page'])) 
		{
		
			$_GET['page'] = 'accueil';
			
		};
		
		getPage($_GET['page']);
		
	?>
Si j'ai bien compris, ce code permet d'afficher l'accueil si il n'y as pas de contenu.

En revanche, la fonction getPage je comprend pas quel est sont rôle et ce qu'elle fait :/

Et ceux que tu as marqué là, tu me demande de creer un fichier fonction.php d'y mettre tous ce que tu viens de me donner et de l'inclure dans les pages ou j'en ai besoin ?

Parce que la, une librairie de fonctions, qu'est-ce ?
Ensuite tu créé une fonction getPage qui fera les inclusions que tu rajoute dans ta librairie de fonctions.
Si tu n'as pas de librairie de fonction ce qui peut arriver tu la met juste avant d'appeler la fonction.

Mais ce que je te recommande plutôt que d'écrire des fonctions à droite ou à gauche c'est directement de créer une fichier
que tu appelle comme tu veux par exemple fonctions.php et dans ce fichier tu mets toutes les fonctions que tu utilisera.

Ensuite tu inclue sur fichier sur ton index.php
Si tu peux me détaillé, avec un exemple je te serai redevable !!

Merci

Mammouth du PHP | 702 Messages

12 déc. 2012, 16:17

Si j'ai bien compris, ce code permet d'afficher l'accueil si il n'y as pas de contenu.
Oui, tu as bien compris. Il faut toujours un contenu.

la fonction getPage elle a pour rôle de chercher ton fichier une fois l'appel de la page et de l'inclure s'il existe.

A défaut tu aurais du faire pour chaque page
<?php  if(isset$($_GET['page']) && $_GET['page'] =='accueil') { include('accueil.php')  ; }; ?>
imagine si tu as 1000 pages à inclure de la sorte ? je te dis ça car je faisais comme ça avant et mes pages faisaient 160 ko ^^ la elles font 30/40ko maxi

en fait la fonction getpage elle sera utilisée que sur l'index, donc tu peux la mettre dans ton index.php

mais le soucis c'est que si tu es amené a utiliser plusieurs fonctions, imagine si tu utilise plusieurs fois la même fonction sur différentes pages ?

Pourquoi réécrire autant de fois la fonction ?

Faire une librairie c'est juste mettre un include sur ta page index.php qui va regrouper toutes les fonctions que tu utilisera.

ça n'est pas obligatoire, tu peux tout mettre dans index.php mais si tu as un volume important d'une part le poids de ta page augmente et enfin c'est difficilement maintenable.

D'ou l'intérêt de hiérarchiser et de bien déterminer ce qui est nécessaire. La en l'occurrence je te suggérais de mettre la fonction dans un include et de faire uniquement un appel de la
fonction la ou tu souhaites afficher tes pages.

Eléphant du PHP | 69 Messages

12 déc. 2012, 18:38

Je comprend tout mais j'ai dû mal au niveau du placement, je sais pas ou je dois écrire, quand include etc.

Donc je vais t'expliquer comment je suis organiser.

Racine du site

Image

L'index est une intro donc moi ma base est accueil.php

Le code que j'inclus direct sur les pages est :
<?php include("include/base.php"); ?>
<?php include("include/fonction.php"); ?>
Mon dossier include :

Image

Le code base.php
<?php

		try
		{
			$bdd = new PDO('mysql:host=mysql51-64.perso;dbname=kextreme', 'kextreme', 'JwVESGwI');
			$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
		}
		
		catch (PDOException $e)
		{
			echo 'Impossible de ce connecter à la BDD : ' . $e->getMessage();
		} 
		
	?>
	
	<div id="banniere" ></div>
	
	<div id="menu" >
		<ul>
		
			<li class="separateur" ></li>
			<li class="onglet" ><a href="accueil.php?page=accueil" >ACCUEIL</a></li>
			<li class="separateur" ></li>
			<li class="onglet" ><a href="club.php?page=club" >CLUB</a></li>
			<li class="separateur" ></li>
			<li class="onglet" ><a href="equipe.php?page=equipe" >EQUIPE</a></li>
			<li class="separateur" ></li>
			<li class="onglet" ><a href="galerie.php?page=galerie" >GALERIE</a>
			<li class="separateur" ></li>
			<li class="onglet" ><a href="projet.php?page=projet" >PROJET</a></li>
			<li class="separateur" ></li>
			<li class="onglet" ><a href="contact.php?page=contact" >CONTACT</a></li>
			<li class="separateur" ></li>
			
			<a href="../entraineur" id="silhouette" ></a>
			
	     </ul>	
	</div>
	
	<div id="flash" >
		<p>Les informations flash seront renseignées ici</p>
	</div>
	
	<div id="corps" >
		<div id="contenu" >

                ICI DOIT APPARAÎTRE LE CONTENU SELON LA PAGE VISITÉE

		</div>
		
		<div id="bloc" >
			<div id="logo" ></div>
			<div id="partenaire" ></div>
			<div id="divers" ></div>
	     </div>	
	</div>
	
	<div id="copyright" >
		<p>Le copyright sera placer ici</p>
	</div>
Le code donc de fonction.php
<?php
	
		if (!isset($_GET['page'])) 
		{
		
			$_GET['page'] = 'accueil';
			
		};
		
		getPage($_GET['page']);
		
	?>
En revanche une fois héberger erreur - Parse error: syntax error, unexpected '[', expecting ')' in /homez.506/siteweb/www/site/include/fonction.php on line 11
Qui est la ligne (getPage($_GET['page']);)

Dans le dossier module il y aura les contenus affichés selon les pages (news.php pour accueil, horraire.php pour club etc.)

Donc moi je reviens entre la div contenu, de base.php

Et j’insère ton code qui générera le contenu selon la page visitée
function getPage($var) {

   if (isset($variable)))
 {
        
        if(file_exists('pages_php/' . $var . '.php')) // on vérifie que le fichier existe bien
        { 
             include('pages_php/' . $var . '.php'); // à adapter si tes pages sont dans un répertoire différent ou pas.
        }
         else {
                inlude('pages_php/accueil.php'); // Si le fichier n'existe pas tu inclue la page d'accueil 
         };
    } else {
        //Aucune page spécifiée => default page si aucune page n'est trouvée tu inclu ta page d'accueil.
        inlude('pages_php/accueil.php');
    }
Et là j’avoue que ce code, je ne le comprend pas oO

Avec tout mon contenu, pourrai-tu me faire un exemple pour que je comprenne ?

Merci d'avance !

Mammouth du PHP | 702 Messages

12 déc. 2012, 18:52

la y'a une parenthèse fermente en trop
 if (isset($variable)))
...

mais quoi que tu ne comprend pas ? ? ?

Ligne à ligne:
function getPage($var) {

   if (isset($variable)) // on teste l'existence de la variable $_GET['page']
 {
        
        if(file_exists('pages_php/' . $var . '.php')) // on vérifie que le fichier existe bien (fichier physique sur le server)
        { 
             include('pages_php/' . $var . '.php'); // on inclu le fichier tu dois adapter le chemin vu que tes pages semble être sur la racine, tu dois supprimer 'pages_php/'
        }
         else {
                inlude('pages_php/accueil.php'); // Si le fichier n'existe pas tu inclue la page d'accueil , pareil vu que tout est à la racine pas besoin de mettre 'pages_php/'
         };
    } else {
        //Aucune page spécifiée => default page si aucune page n'est trouvée tu inclu ta page d'accueil.
        inlude('pages_php/accueil.php');
    }
je vois pas quoi te dire de plus, ce code est relativement simple...

sinon tu peux te prendre la tête a faire pour chaque page un truc du genre
<?php if(isset($_GET['page'])) && $_GET['page']=='accueil') {include 'accueil.php' ; } ?>
si tu as 1000 pages bien 1000 fois cette ligne et ton fichier fera plus de 200ko à coup sur,

avec ce code en 10 ligne tu inclue tout tes fichiers...(pour la fonction getPage) que j'ai créé.

Après il y a sans doutes d'autres méthodes je t'ai juste donné celle que j'utilise.

Eléphant du PHP | 69 Messages

12 déc. 2012, 19:06

Ta technique me plais bien, pas envie de copier 10 milles fois le bordel.

Mais par exemple, d'ou sort ce "$var"

On la jamais définit plus haut pourtant :/

Pourquoi 'pages_php...' je comprend pas là

ViPHP
xTG
ViPHP | 7331 Messages

12 déc. 2012, 19:48

Dans une fonction tu accèdes aux variables de la portée de la fonction dont celles de son prototype.
Donc :
function foo($bar){
  echo $bar;
}

foo(1); // = echo "1";
$int = 2;
foo($int); // = echo $int = echo $bar (avec $bar = $int) = echo "2"

Eléphant du PHP | 69 Messages

12 déc. 2012, 20:11

Je suis malheureusement perdu, je comprend plus rien :(

Juste pour afficher un contenu dans une page spécifique j'ai changé la moitié de mes pages.

Je sais pas ou je dois mettre quoi dans quel page pourquoi...

J'essais de comprend, mais j'ai vraiment du mal... désoler !

Si vous avez une méthode plus simple, ce serai géniale.

ViPHP
xTG
ViPHP | 7331 Messages

12 déc. 2012, 20:41

Voici une fonction corrigée et portant des noms de variable représentatifs :
function getPage($nomFichier = 'accueil') {
  if( is_string($nomFichier) ){ // on vérifie qu'on a bien un nom (éviter les erreurs d'appel avec une variable de type nombre, ect)
    if( file_exists('pages_php/' . $nomFichier . '.php') ){ // on vérifie que le fichier existe bien dans le dossier pages_php
      include('pages_php/' . $nomFichier . '.php'); // nous incluons le fichier
    }else{
      inlude('pages_php/accueil.php'); // Si le fichier $nomFichier n'existe pas tu inclues la page d'accueil
    }
  } else {
    // la variable passé en paramètre n'est pas une variable correcte
    include('pages_php/accueil.php'); // par défaut nous incluons la page d'accueil
  }
}

// exemple d'utilisation
$maPage = 'gallerie';
getPage($maPage); // incluera gallerie.php si le fichier existe, sinon accueil.php

// On teste maintenant l'appel sans paramètre
getPage(); // là c'est subtil, on incluera accueil.php grâce à la valeur par défaut dans le prototype de la fonction