Page 1 sur 2

include

Publié : 25 avr. 2009, 07:52
par Gagea
Bonjour,
Sur une version d'essai du site de mon asso, je tente d'incorporer include.
J'ai un souci : sur la page index tous les liens fonctionnent mais dès que je suis sur une autre page, rien ne va plus.
http://kompozer.stesteve.free.fr/Arobase_CSS/index.php
La page menuInc.html est visible à l'url http://kompozer.stesteve.free.fr/Arobas ... nuInc.html. Dans l'arborescence elle se trouve à la racine comme l'index, alors que toutes les autres pages sont dans des dossiers et sous-dossiers. J'ai bien fait attention au chemin <?php include("../menuInc.html");?>
Si quelqu'un peut m'aider à trouver mon erreur... Merci

Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.0.9) Gecko/2009040821 Firefox/3.0.9

Publié : 25 avr. 2009, 11:51
par Fabrice.Tres.Net
Gagea,

Ton problème vient du fait que tu as index, et ensuite des autres fichiers php dans des sous répertoires. Index et ces fichiers ne peuvent utiliser le même menu à inclure puisque le chemin relatif d'accès à un fichier donné depuis un répertoire fils ou depuis le père n'est pas le même !

Par exemple
vieClub/horaires.php
. /horaires.php ou ../vieClub/horaires.php (depuis horaires.php )

Donc il te faut au moins 2 "menus" différents

Publié : 25 avr. 2009, 13:23
par Gagea
Merci Fabrice pour ta réponse,
Je pensais pouvoir utiliser le même menu sur les 37 pages où se trouve ce menu en modifiant simplement le chemin en fonction de l'arborescence.
Comme je ne vois pas, pour l'instant, comment m'y prendre, je vais abandonner cette idée de menus différents.

Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.0.9) Gecko/2009040821 Firefox/3.0.9

Re: include

Publié : 25 avr. 2009, 14:33
par ~HP
Gagea a écrit :

Code : Tout sélectionner

<?php include("../menuInc.html");?>
Heu… en lisant la documentation :
http://fr2.php.net/manual/fr/function.include.php
on ne fait pas d'include de .html !

Message envoyé avec : Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; fr-FR; rv:1.9.1b5pre) Gecko/20090424 Minefield/3.5b5pre

Re: include

Publié : 25 avr. 2009, 15:07
par Ymai
Bonjour
~HP a écrit : Heu… en lisant la documentation :
http://fr2.php.net/manual/fr/function.include.php
on ne fait pas d'include de .html !
Serait-il possible de préciser:
- le passage précis dans la page où la règle est indiquée
- les raisons de cet ostracisme htmlien?
Je suis un peu inquiet: je fais tout le temps des include de code html pur.

Serait-ce le *et exécute* de
La fonction include() inclut et exécute le fichier spécifié en argument.
qui pose la limitation?

Message envoyé avec : Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.9.0.9) Gecko/2009042113 Ubuntu/8.04 (hardy) Firefox/3.0.9

Publié : 25 avr. 2009, 15:21
par Ymai
Gagea a écrit :Comme je ne vois pas, pour l'instant, comment m'y prendre, je vais abandonner cette idée de menus différents.
Un truc que j'utilise, mais qui n'est pas très beau (à mon goût) est d'ajouter, dans chaque répertoire, un autre include contenant le chemin vers la racine où se trouve le code du menu

Code : Tout sélectionner

+repertoire1
:
+repertoire2 +repertoirea
:            +repertoireb
+-repertoire3+repertoirec
             +repertoired+repertoirex
                         +repertoirey
Le menu se trouve dans le répertoire "repertoire1"
Dans le répertoire2, je dépose un fichier "chemin.inc.php" contenant le chemin vers "repertoire2", soit

Code : Tout sélectionner

<?php $chemin="../repertoire1"; ?>
Dans les répertoires a, b, c, le fichier contient alors

Code : Tout sélectionner

<?php $chemin="../../repertoire1"; ?>
Dans les répertoire x, y le fichier contient:

Code : Tout sélectionner

<?php $chemin="../../../repertoire1"; ?>
Cela étant fait, dans chaque fichier où doit figurer le menu, deux instructions permettent de retrouver le chemin:

Code : Tout sélectionner

<?php
require ("chemin.inc.php");
require ($chemin."menu.inc.php");
?>
Il y aura sûrement plein de monde qui viendra donner une meilleure solution.

Message envoyé avec : Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.9.0.9) Gecko/2009042113 Ubuntu/8.04 (hardy) Firefox/3.0.9
[modo]Je déplace vers "développement web" où il y aura certainement plus de répondant[/modo]

Re: include

Publié : 25 avr. 2009, 16:25
par calimo
Ymai a écrit :Bonjour
~HP a écrit : Heu… en lisant la documentation :
http://fr2.php.net/manual/fr/function.include.php
on ne fait pas d'include de .html !
Serait-il possible de préciser:
- le passage précis dans la page où la règle est indiquée
- les raisons de cet ostracisme htmlien?
Je pense que HP veut dire qu'on n'inclut pas un fichier .html complet (avec doctype, élément <html> etc.), mais seulement le bout de code dont on a besoin.

Message envoyé avec : Mozilla/5.0 (X11; U; Linux x86_64; fr; rv:1.9.0.9) Gecko/2009042113 Ubuntu/8.10 (intrepid) Firefox/3.0.9

Re: include

Publié : 25 avr. 2009, 17:45
par ~HP
Ymai a écrit :Je suis un peu inquiet: je fais tout le temps des include de code html pur.
Ce n'est pas ce qu'il faudrait faire…
Ymai a écrit :Serait-ce le *et exécute* de
La fonction include() inclut et exécute le fichier spécifié en argument.
qui pose la limitation?
Probablement…

Message envoyé avec : Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; fr-FR; rv:1.9.1b5pre) Gecko/20090424 Minefield/3.5b5pre

Publié : 25 avr. 2009, 17:58
par Gagea
Ymai a écrit :Le menu se trouve dans le répertoire "repertoire1"
Dans le répertoire2, je dépose un fichier "chemin.inc.php" contenant le chemin vers "repertoire2", (je suppose qu'il s'agit de repertoire1) soit

Code : Tout sélectionner

<?php $chemin="../repertoire1"; ?>
Merci Ymai pour cette solution. Bien que je n'y connaisse absolument rien en php je vais essayer.
Dans mon cas le menu se trouve à la racine du dossier de site et non dans un répertoire. Si j'ai bien compris je dépose dans les répertoires de premier niveau un fichier chemin.inc.php contenant le code

Code : Tout sélectionner

<?php $chemin="../"; ?>
afin d'indiquer le chemin pour remonter à la racine
etc...
Questions de néophyte :
Dans Kompozer peut-on écrire ce code avec l'Editeur et faut-il le placer dans le head ?

Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.0.9) Gecko/2009040821 Firefox/3.0.9

Publié : 30 avr. 2009, 16:15
par Ymai
Ouuups... J'ai un peu perdu ce fil de vue...

S'il n'est pas trop tard...

Le code en question ne devrait pas être écrit avec KompoZer mais avec un éditeur de texte externe.
Le fichier correspondant ne contenant que

Code : Tout sélectionner

<?php $chemin="../"; ?>
et absolument rien d'autre.

Le

Code : Tout sélectionner

<?php
include ("chemin.inc.php");
include $chemin."menu.inc.html"
?>
se trouvera très bien dans le <head>, lui.

Mais je persiste à dire que ce n'est pas très élégant, tout cela.

Publié : 01 mai 2009, 09:12
par Gagea
Pour le moment j'en suis toujours au même point quant à l'utilisation de include. Je n'ai pas fait d'autres essais.
J'ai vu sur un tuto d'Alsacreation, récemment mis à jour, qu'il préconisaient l'emploi d'adresses absolues pour indiquer le chemin en partant de la racine du site. http://www.alsacreations.com/tuto/lire/ ... a-PHP.html
Mettre un / précédant l'url de la page php, c'est peut-être plus simple.

Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10

Publié : 01 mai 2009, 09:18
par Ymai
Bonjour
Gagea a écrit :Mettre un / précédant l'url de la page php, c'est peut-être plus simple.
Oui, c'est nettement plus simple. Mais ce n'est pas toujours praticable.
Il faut alors que la racine du site se trouve aussi sur la racine du serveur.
Sur des hébergements mutualisés, ce n'est jamais le cas.
Lorsque, par exemple, le site se trouve obligatoirement dans le répertoire /www/ , la référence "/" pointe en-dessous de la racine.

Publié : 01 mai 2009, 09:53
par Gagea
Merci Ymai pour cette précision. Il faut vraiment penser à tous les cas possibles ! Les problèmes sont insoupçonnables pour des profanes comme moi.

Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10

Publié : 01 mai 2009, 12:23
par ~HP
pour info :

Code : Tout sélectionner

dirname(__FILE__)
donne le chemin complet depuis la racine vers le script en cours… même si celui ci est lui même inclus…

Code : Tout sélectionner

require_once(dirname(__FILE__).'/includes/lib.maLib.php');
en PHP 5.3 il y a la "constante magique" :

Code : Tout sélectionner

__DIR__
qui remplit le même rôle.

Code : Tout sélectionner

require_once(__DIR__.'/includes/lib.maLib.php');
PHP 5.3 : __DIR__ : Constante indiquant le répertoire du fichier courant

L'avantage étant que les inclusions se font toujours par rapport à la racine du système de fichier.

Message envoyé avec : Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; fr-FR; rv:1.9.1b5pre) Gecko/20090430 Minefield/3.5b5pre

Publié : 02 mai 2009, 07:28
par lpgc
j'ai fait un petit test chez moi sur tes pages et çà fonctionne très très bien

Code : Tout sélectionner

include "./menuInc.html";
OU
include "menuInc.html";
OU
include "http://localhost/test/menuInc.html";

mais pas include "../menuInc.html";
qui remonte au répertoire parent
. = répertoire courant
.. = répertoire supérieur

Un truc particulier :
un include dans une boucle PHP

for ... include
inclut le code à chaque boucle

ainsi un
for ... include_once n'effectuera l'include qu'une seule fois
et le code ne sera pas incorporé dés la seconde itération de la boucle

un
for ... include
plantera si vous avez dans l'include des function php
il faut alors tester leur existence


Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10