2009-11-30 5 views
1

Je développe un site web simple. Il aura près de 20 pages. Il a une hiérarchie à 3 niveaux.Comment utiliser PHP include pour insérer un talon HTML sur toutes les pages d'un site Web

Home 
MenuStub 
    Category1 
     Page1 
     Page2 
    Category2 
     Page1 
     Page2 
    .... 
     .... 
     .... 

La navigation principale aura 4 - 5 éléments représentant chaque 'catégorie' Ce sera constant pour toutes les pages. Je ne suis même pas l'intention de mettre en évidence la catégorie actuelle ou quoi que ce soit.

Auparavant, j'ai décidé de mettre le menu HTML seul dans un fichier séparé et d'utiliser PHP include pour l'inclure dans toutes les pages.

Mais, les chemins relatifs peuvent être frustrants. Supposons que le fichier stub se trouve dans le répertoire racine.

Ainsi, dans les pages de niveau racine, le php include lira comme

include "menustub.html"; 

dans les pages de second niveau, il faut dire

include "../menustub.html"; 

et dans les pages de troisième niveau, il convient dire

include "../../menustub.html"; 

d'abord, est-ce la meilleure façon d'inclure un seul fichier sur un ll pages dans un site Web? Deuxièmement, si le site grandit, et beaucoup plus de niveaux sont ajoutés, le maintien de ce sera un problème. Si je décide soudainement de déplacer un ensemble de pages d'un ou plusieurs niveaux vers le haut ou vers le bas, je devrais manuellement aller et changer les chemins relatifs dans chaque fichier.

Ai-je oublié quelque chose ici? Y at-il un moyen universel de pointer vers un fichier particulier, que chaque page comprendra, quel que soit de l'endroit où il se trouve?

Quelle est la meilleure façon d'avoir un bout et de l'inclure dans toutes les pages sans avoir ces cauchemars d'entretien?

Répondre

1

Il serait beaucoup plus dynamique de faire en sorte que le fichier d'index fasse tout ce qui est inclus et d'utiliser les paramètres GET pour lui indiquer quelle page doit être incluse.

Par exemple, considérons une structure de répertoires comme ceci:

/ 
    index.php 
    /ui 
    header.html 
    menu.html 
    footer.html 
    Cat1/ 
     Page1.html 
     Page2.html 
    Cat2/ 
     Page3.html 
     Page4.html 

Si vous deviez appeler toujours le fichier d'index, y compris le nom de la catégorie et la page que vous vouliez voir, comme: index.php?category=Cat1&page=Page1, vous pourriez faire quelque chose comme ceci:

<?php 
// Include a header and a menu, defined in their own HTML files. 
include('ui/header.html'); 
include('ui/menu.html'); 

// Set up a list of valid categories and their sub pages. 
$pages = array(
    'Cat1' => array(
     'Page1', 
     'Page2' 
    ), 
    'Cat2' => array(
     'Page3', 
     'Page4' 
    ) 
); 

// Find the category and page to use. 
if(isset($_GET['category'], $pages[$_GET['category']])) { 
    $category = $_GET['category']; 
} else { 
    $category = 'Cat1'; 
} 
if(isset($_GET['page'], $pages[$category][$_GET['page']])) { 
    $page = $_GET['page']; 
} else { 
    $page = 'Page1'; 
} 

// Include the selected content page. 
include("ui/{$category}/{$page}.html"); 

// Include a footer 
include('ui/footer.html'); 
?> 

de cette façon, vous pouvez étendre le contenu aussi loin et profond que vous voulez sans avoir à répéter votre inclut dans chaque nouveau fichier.

+0

Salut, Atli. Dans l'un de mes autres sites Web, je suis une version simplifiée de votre approche. Cependant, je ne l'ai pas considéré pour mon site Web actuel parce que j'ai senti que quelque chose n'allait pas. Peut-être que j'ai tort de le penser. Est-ce une bonne pratique? Comme, montrant toujours seule la page d'index, mais incluez les bouts HTML selon les paramètres? Si oui, l'URL aura l'air un peu étrange non? Au lieu d'une belle URL comme http://www.example.com/games/fps/quake3, cela ressemblera à http://www.example.com?cat=games&subcat=fps&page=quake3. Comment puis-je utiliser votre approche MAIS montrer une belle URL comme le premier? –

+0

Lorsque vous commencez à travailler sur des éléments plus dynamiques - en utilisant des méthodes de conception plus sophistiquées - cela devient la méthode standard oui. Je vous recommande d'essayer de vous y habituer plus tôt que tard. - Quant à la question de l'URL. Regardez dans Url-Rewriting. Si vous utilisez Apache, vous pouvez le faire en utilisant le module 'mod_rewrite'. * (Voir 'http://httpd.apache.org/docs/2.0/misc/rewriteguide.html')* – Atli

+0

salut .. merci de confirmer que c'est une approche recommandée/standard. Merci également pour le module mod_rewrite. Regardera dedans aussi. –

3

moyens communs pour résoudre ce problème est soit en utilisant include_path: Dans votre config, ajoutez le répertoire avec ces fichiers à inclure chemin, et vous pouvez tout simplement faire

include "menustub.html"; 

de partout. Voir http://se2.php.net/manual/en/ini.core.php#ini.include-path Il peut être défini à partir de php.ini et dans le code. Je ne sais pas si elle peut être réglée dans les fichiers .htaccess

Une autre façon est de définir une variable de répertoire racine et toujours l'utiliser:

include "{$rootDir}/menustub.html"; 

Il y a aussi la possibilité d'utiliser append/précédez automatique, ce qui signifie vous devez indiquer à php de toujours ajouter ou ajouter un préfixe à un fichier, voir http://se2.php.net/manual/en/ini.core.php (fichier_auth_auto)

$ rootRep peut être défini à partir de la configuration ou automatiquement à l'aide de $ _SERVER ['DOCUMENT_ROOT'].Le premier est bon si vous l'utilisez pour des fichiers partagés (partagés entre plusieurs applications Web), ce dernier pour plus de commodité si les fichiers sont situés sous un répertoire webapp structure.

+1

Vous pouvez également utiliser l'élément '$ _SERVER ['DOCUMENT_ROOT']' pour trouver le répertoire racine de votre serveur HTTP, que vous pouvez utiliser à la place de '{$ rootDir}' dans votre deuxième exemple. Par exemple. 'include ($ _ SERVER ['DOCUMENT_ROOT']. '/menustub.html');'. – Atli

+0

Salut Brimstedt Je veux en savoir plus sur le include_path. On dirait la solution que je suis après. Est-ce quelque chose de global que tout le code de php (dans mon site Web) saura (n'importe où le code est). Comme je définis include_path et mettre un fichier - test.html - là, et je peux simplement utiliser include "test.html" quel que soit le fichier dans lequel je suis inclus. Est-ce que je t'ai eu raison? –

+0

atli: bon commentaire, je l'ai ajouté à la réponse senthil: ajouté doc lien – Brimstedt

Questions connexes