Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1425 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  affichage d'un menu

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

affichage d'un menu

n°1985933
Oranjade
Posté le 20-04-2010 à 14:39:03  profilanswer
 

Bonjour à tous,
 
Dans mon site en php, j'ai un menu horizontal à double niveau. Tout s'affiche correctement lorsque j'active les liens du menu. En revanche, dès que j'active un lien externe au menu du type "contact", la ligne du sous-menu est invisible. Le site est construit de la manière suivante :
 
index.php (je passe les meta et head)

Code :
  1. <body>
  2.         <div id="site">
  3.                 <?php include('./functions.php'); ?>
  4.                 <?php include('./public/top.php'); ?>
  5.                 <div id="container">
  6.                         <?php
  7.                         define('PATH', './includes/');
  8.                         $tableau = glob(PATH.'*.inc.php');
  9.                         if(isset($_GET['page']) && in_array(PATH.$_GET['page'].'.inc.php', $tableau))
  10.                         {
  11.                         $pageinc = PATH.$_GET['page'].'.inc.php';
  12.                     }
  13.                     else
  14.                         {
  15.                         $pageinc = PATH.'1.inc.php';
  16.                     }
  17.                     include $pageinc;
  18.                         ?>
  19.                         <div class="spacer"> </div>
  20.                         <div id="bloc_img"></div>
  21.                 </div>
  22.                 <?php include('./public/bottom.php'); ?>
  23.         </div>
  24. </body>


 
top.php : dans lequel figure tous les liens internes et externes au menu

Code :
  1. <a href="index.php" id="logo"><img src="img/logo.gif" alt="Logo" /></a>
  2. <a href="index.php?page=contact" id="contact"><img src="img/contact.gif" alt="contact" /></a>
  3. <dl id="menu">
  4.         <dt><a href="index.php?page=1" title="p1" <?php stylen1(1); ?>>menu1</a></dt>
  5. <dd <?php stylen1(1); ?>>
  6.                 <ul>
  7.                         <li><a href="index.php?page=1&amp;rubrique=1" title="1-1" <?php stylen2(1,1); ?>>Sous-menu1</a></li>
  8.                         <li><a href="index.php?page=1&amp;rubrique=2" title="1-2" <?php stylen2(1,2); ?>>Sous-menu2</a></li>
  9.                         <li><a href="index.php?page=1&amp;rubrique=3" title="1-3" <?php stylen2(1,3); ?>>Sous-menu3</a></li>
  10.                         <li><a href="index.php?page=1&amp;rubrique=4" title="1-4" <?php stylen2(1,4); ?>>Sous-menu4</a></li>
  11.                 </ul>
  12.         </dd>
  13.         <dt><a href="index.php?page=2" title="p2" <?php stylen1(2); ?>>menu2</a></dt>
  14.         <dd <?php stylen1(2); ?>>
  15.                 <ul>
  16.                         <li><a href="index.php?page=2&amp;rubrique=1" title="2-1" <?php stylen2(2,1); ?>>Sous-menu1</a></li>
  17.                         <li><a href="index.php?page=2&amp;rubrique=2" title="2-2" <?php stylen2(2,2); ?>>Sous-menu2</a></li>
  18.                         <li><a href="index.php?page=2&amp;rubrique=3" title="2-3" <?php stylen2(2,3); ?>>Sous-menu3</a></li>
  19.                         <li><a href="index.php?page=2&amp;rubrique=4" title="2-4" <?php stylen2(2,4); ?>>Sous-menu4</a></li>
  20.                 </ul>
  21.         </dd>
  22. </dl>


 
fonction.php

Code :
  1. <?php
  2. function stylen1($a)
  3. {
  4.         if(isset($_GET['page'])) {$page = $_GET['page'];} else{$page = 1;}
  5.        
  6.         if($a == $page)
  7.         {
  8.                 echo('class="active"');
  9.         }
  10. }
  11. function stylen2($a,$b)
  12. {
  13.         if(isset($_GET['page'])) {$page = $_GET['page'];} else{$page = 1;}
  14.         if(isset($_GET['rubrique'])) {$rubrique = $_GET['rubrique'];} else{$rubrique = 0;}
  15.        
  16.         if(($b == $rubrique))
  17.         {
  18.                 echo('class="active"');
  19.         }
  20. }
  21. function insertion()
  22. {
  23.         if(isset($_GET['page'])) {$page = $_GET['page'];}
  24.         else {$page = 1;}
  25.        
  26.         if(isset($_GET['rubrique'])) {$rubrique = $_GET['rubrique'];}
  27.         else {$rubrique = 0;}
  28.        
  29.         $file = 'includes/'.$page.'/'.$rubrique.'.php';
  30.        
  31.         include($file);
  32. }
  33. ?>


 
Prenons l'exemple du fichier contact

Code :
  1. <div id="illustrations" class="contact"></div>
  2. <div id="corps">
  3.         <h1>Contact</h1>
  4.     <p>texte du paragraphe</a></p>
  5. </div>


 
J'ignore d'où vient le problème.
En analysant le code, je pense qu'il vient du fichier "top.php" qui ne donne pas l'instruction d'activer le menu. J'ai donc essayé d'intégrer "<?php stylen2(1,1); ?>" dans la ligne ci-dessous, sans résultat.
<a href="index.php?page=contact" id="contact"><img src="img/contact.gif" alt="contact" /></a>
Manquerait-il l'instruction <?php insertion(); ?> dans mon fichier "contact.php"
 
Dois-je intervenir sur le fichier "functions.php" ou "top.php" ?
Je tourne un peu en rond, auriez-vous une piste ?
Merci d'avance pour votre aide.  

mood
Publicité
Posté le 20-04-2010 à 14:39:03  profilanswer
 

n°1985987
aspirateur
Posté le 20-04-2010 à 16:35:15  profilanswer
 

Une fonction doit retourner quelquechose.  
 
Essaye de rajouter dans tes fonctions return $variable
 
J'ai l'impression que tu confond fonction et include non ?

n°1986014
Oranjade
Posté le 20-04-2010 à 17:46:18  profilanswer
 

Tout d'abord, merci de la réponse, ça fait plaisir de ne pas se sentir seule face à son problème.
En effet, ce n'est pas très clair.  
Une fonction permet de mener des actions pour afficher quelque chose (une sorte de raccourci pour éviter de refaire les mêmes manipulations)
Pour moi, Include est une fonction qui permet d'insérer un certain code dans ma page.
Est-ce exact ?
Mon objectif est que : lorsque j'active un lien hors menu, celui-ci s'affiche avec ses 2 niveaux comme sur la page d'accueil (index.php).
 
Donc, selon "cette" logique, pour que mon menu (top.php) apparaisse comme sur l'état d'index je dois intégrer l'instruction d'activer le menu par défaut. Mais où et comment ?
 
Tu me dis d'ajouter return $variable.
Est-ce que je peux, par ce biais, lui donner une instruction du genre :
Quand la page a afficher n'est pas incluse dans le menu, alors, active par défaut le menu tel qu'il apparaît dans la page d'accueil ?
 
Comme tu vois, ce n'est pas si clair...

n°1986156
aspirateur
Posté le 21-04-2010 à 09:40:48  profilanswer
 

Essaye de remplacer les

 

echo('class="active"');

 

de tes fonctions par un $retour="active";

 

Et ensuite avant le } qui ferme ta fonction insère un return $retour;

 

et refait le test, dis moi si ca marche

 

EDIT: je viens de relire ton code, je sais pas si tu peux utiliser des $_GET dans les fonctions, je t'avoue que j'ai jamais essayé. Si jamais ca ne fonctionne pas, regarde de ce coté.

Message cité 1 fois
Message édité par aspirateur le 21-04-2010 à 09:44:26
n°1986165
Arcan_-
Posté le 21-04-2010 à 10:25:40  profilanswer
 

Salut,
 
Tu as un "</a>" qui traine dans ton fichier contact.
Changes tes dl,dd,dt par des ul et li.
 
Tu as du css?
Est possible de voir la page ?

n°1986238
Oranjade
Posté le 21-04-2010 à 12:48:03  profilanswer
 

En faisant ce remplacement, je perds totalement mon niveau 2.
Par ailleurs, mon menu fonctionne très bien avec les 2 niveaux à partir du moment où j'active des liens du menu.
 
Comment donner une instruction par défaut si c'est une page hors menu comme l'index, à savoir page [1] rubrique [0] ?
 
Quand je regarde mon fichier top.php et que je compare le lien vers "contact" et celui de l'index, il manque l'instruction d'afficher le menu
 
# <a href="index.php?page=contact" id="contact"><img src="img/contact.gif" alt="contact" /></a>
#
# <dl id="menu">
#         <dt><a href="index.php?page=1" title="p1" <?php stylen1(1); ?>>menu1</a></dt>
 
Je ne sais pas si je dois intervenir sur le fichier "top.php" ; "functions.php" et ou "contact.php"
 
En tout cas, merci de tes idées, au moins, j'avance en procédant par élimination.

n°1986313
Arcan_-
Posté le 21-04-2010 à 14:31:18  profilanswer
 

Par défaut, quand tu es sur ton index, $_GET['page'] n'est pas défini.

Citation :

function stylen1($a)
{
        if(isset($_GET['page'])) {$page = $_GET['page'];} else{$page = 1;}
       
        if($a == $page)
        {
                echo('class="active"');
        }
}


Ce qui fait que : stylen1(1) affiche "classe="active" sur l'index.
Ce n'est plus le cas sur la page contact.
 

Citation :

<body>
        <div id="site">
                <?php include('./functions.php'); ?>


Généralement, les inclusions des fichiers de configuration, fonction, classes... se font au début du fichier.

n°1986399
Oranjade
Posté le 21-04-2010 à 19:16:09  profilanswer
 

Merci Arcan_- de ta réponse,
 
Pour répondre au 1er message
Le "</a>" qui traine dans mon fichier contact est une erreur de copier/coller (en fait j'ai un lien)
J'ai bien un css

Code :
  1. @import url('reset.css');
  2. body
  3. {
  4. font-family:Arial, Helvetica, sans-serif;
  5. background-color:#0e5dc5;
  6. font-size: 12px;
  7. color: #858585;
  8. text-align: left;
  9. }
  10. object
  11. {
  12. display: block;
  13. outline: none;
  14. }
  15. #site
  16. {
  17. width:960px;
  18. position: relative;
  19. margin: 0 auto;
  20. background-image: url(img/background.jpg);
  21. background-repeat: repeat;
  22. background-color: #fff;
  23. }
  24. a#logo
  25. {
  26. display: block;
  27. position:absolute;
  28. top:0px;
  29. left:0px;
  30. }
  31. a#acces
  32. {
  33. display: block;
  34. position:absolute;
  35. top:0px;
  36. right:0px;
  37. }
  38. a:hover#acces 
  39. {
  40. background-image:url(img/acces_pros_ro.gif);
  41. top:1px;
  42. right:1px;
  43. }
  44. dl#menu
  45. {
  46. height: 36px;
  47. margin: 0 auto;
  48. padding: 50px 0 0 78px;
  49. background-image: url(img/haut.jpg);
  50. background-repeat: no-repeat;
  51. }
  52. dl#menu dt
  53. {
  54. float: left;
  55. height: 36px;
  56. margin:0 4px 0 0;
  57. line-height: 24px;
  58. font-size:10px;
  59. width:130px;
  60. font-weight: bold;
  61. }
  62. dl#menu dt a
  63. {
  64. display: block;
  65. height: 36px;
  66. background-image: url(img/ro_on.gif);
  67. padding: 0 10px;
  68. color: #fff;
  69. text-transform: uppercase;
  70. }
  71. dl#menu dt a:hover,dl#menu dt a.active
  72. {
  73. background-image: url(img/ro_off.gif);
  74. }
  75. dl#menu dd
  76. {
  77. display: none;
  78. }
  79. dl#menu dd.active
  80. {
  81. display: block;
  82. position: absolute;
  83. top: 85px;
  84. left: 78px;
  85. }
  86. dl#menu dd ul
  87. {
  88. height: 30px;
  89. width: 803px;
  90. background-image: url(img/ro_off_sub.gif);
  91. background-repeat: repeat-x;
  92. }
  93. dl#menu dd ul li
  94. {
  95. float: left;
  96. height: 30px;
  97. line-height: 30px;
  98. }
  99. dl#menu dd ul li a
  100. {
  101. color: #000;
  102. padding: 2px 5px;
  103. border-left: 1px solid #000;
  104. }
  105. dl#menu dd ul li a.active
  106. {
  107. color: #fff;
  108. }
  109. #container
  110. {
  111. width:803px;
  112. position: relative;
  113. margin: 30px auto 0 78px;
  114. background-color:#fff;
  115. }
  116. div#container a:link { color: #0CF;}
  117. div#container a:visited { color: #F90;}
  118. div#container a:hover { color: #F60;}
  119. #dossiers
  120. {
  121. width:220px;/*250*/
  122. padding:10px;
  123. float:left;
  124. }
  125. #dossiers a
  126. {
  127. display:block;
  128. padding-left:120px;
  129. background-repeat: no-repeat;
  130. }
  131. #dossiers a.dossier1 {background-image:url(img/dossier1.jpg); padding-top:30px;height:100px;}
  132. #dossiers a.dossier2 {background-image:url(img/dossier2.jpg); padding-top:10px;height:120px;}
  133. #dossiers a.dossier3 {background-image:url(img/dossier3.jpg); padding-top:30px;height:100px;}
  134. #corps
  135. {
  136. width:512px;
  137. padding:10px;
  138. float:left;
  139. border-left: 1px dotted #0CF;
  140. }
  141. div#corps h1
  142. {
  143. margin-bottom:14px;
  144. font-size:14px;
  145. color:#333333;
  146. font-weight: bold;
  147. }
  148. div#corps h2
  149. {
  150. font-size:12px;
  151. color:#0e5dc5;
  152. margin-bottom:2px;
  153. }
  154. div#corps p
  155. {
  156. margin-bottom:10px;
  157. }
  158. div#corps ul
  159. {
  160. margin-bottom:10px;
  161. line-height:18px;
  162. }
  163. div#corps ul li
  164. {
  165. list-style-type:disc;
  166. list-style:inside;
  167. font-size:11px;
  168. color:#999999;
  169. }
  170. #illustrations
  171. {
  172. width:220px;
  173. height:390px;
  174. margin-top:20px;
  175. padding:10px;
  176. float:left;
  177. background-repeat: no-repeat;
  178. }
  179. .histoire { background-image:url(img/notre_histoire.png);}
  180. .contact { background-image:url(img/contact.jpg);}
  181. .mentions_legales { background-image:url(img/mentions_legales.jpg);}
  182. #bloc_img
  183. {
  184. background: url(img/img_bloc.jpg) no-repeat;
  185. margin:0 auto;
  186. height: 16px;
  187. width:803px;
  188. clear: both;
  189. }
  190. #bas
  191. {
  192. display: block;
  193. }
  194. #footer
  195. {
  196. width:960px;
  197. text-align: center;
  198. height: 34px;
  199. color: #000;
  200. text-decoration: none;
  201. font-size:0.9em;
  202. background-image:url(img/footer.jpg);
  203. background-repeat:repeat-x;
  204. margin: 0 auto;
  205. padding:5px 0 0;
  206. }
  207. #footer a { color: #000; text-decoration: none;}
  208. #footer a:hover { color: #fff; text-decoration:none;}
  209. #footer p { margin-top:4px;}
  210. #footer #nav li
  211. {
  212. list-style-type: none;
  213. margin:5px 5px 0 0;
  214. display:inline;
  215. }
  216. .spacer
  217. {
  218. clear: both;
  219. font-size: 1px;
  220. height: 1px;
  221. }


 
Pour le second message...

Citation :

Par défaut, quand tu es sur ton index, $_GET['page'] n'est pas défini.


Je pensais qu'il l'était du fait que dans le fichier top.php soit notifié

Code :
  1. <dt><a href="index.php?page=1" title="p1" <?php stylen1(1); ?>>menu1</a></dt


ce qui renvoie au fichier "functions.php"  

Code :
  1. :
  2.    1. <?php
  3.    2. function stylen1($a)
  4.    3. {
  5.    4.         if(isset($_GET['page'])) {$page = $_GET['page'];} else{$page = 1;}
  6.    5.       
  7.    6.         if($a == $page)
  8.    7.         {
  9.    8.                 echo('class="active"');
  10.    9.         }
  11.   10. }


En lien avec le fichier "index.php"

Code :
  1. <?php include('./functions.php'); ?>


 
C'est un peu compliqué.  
Je donnerai bien le lien vers le site mais le problème est que le php ne s'affiche pas difficile d'analyser le code.
Que puis-je faire pour faciliter la compréhension du problème : envoyer par mail les fichiers sources ?
Encore merci Arcan_- et Aspirateur de votre suivi.

n°1986432
Alisteroid
Posté le 21-04-2010 à 23:04:31  profilanswer
 

aspirateur a écrit :

Essaye de remplacer les
EDIT: je viens de relire ton code, je sais pas si tu peux utiliser des $_GET dans les fonctions, je t'avoue que j'ai jamais essayé. Si jamais ca ne fonctionne pas, regarde de ce coté.


$_GET, $_POST, $_SERVER, $_SESSION etc sont des superglobales, les superglobales sotn accessibles n'importe ou dans ton application, que ce soit une fonction, une classe ...

n°1986461
aspirateur
Posté le 22-04-2010 à 08:14:42  profilanswer
 

Oranjade a écrit :


Pour le second message...

Citation :

Par défaut, quand tu es sur ton index, $_GET['page'] n'est pas défini.


Je pensais qu'il l'était du fait que dans le fichier top.php soit notifié


 
tu as bien à la fin de ton adresse "?page=blabla"  ?
 

Alisteroid a écrit :


$_GET, $_POST, $_SERVER, $_SESSION etc sont des superglobales, les superglobales sotn accessibles n'importe ou dans ton application, que ce soit une fonction, une classe ...


 
Merci, je ne savais pas ;) (ou plutot je me suis jamais posé la question :p )

mood
Publicité
Posté le 22-04-2010 à 08:14:42  profilanswer
 

n°1986485
Arcan_-
Posté le 22-04-2010 à 09:44:38  profilanswer
 

Tant que tu n'as pas "?page=xxxx" dans ton url, $_GET['page'] ne sera pas défini.
 
S'il n'est pas défini, $page dans ta fonction stylen1 aura "1" comme valeur.
Donc stylen1(1) affichera toujours "classe="active"".
 
Quand tu es sur ta page contact, $_GET['page'] (et donc $page dans ta fonction) est défini (il a "contact" pour valeur) => stylen(1) n'affiche rien.
 
Ton menu ne s'affiche que si $a == $page.
Il faudrait que tu aies stylen1('contact') pour que le menu s'affiche quelque part, ou que tu modifie la condition de ta fonction stylen(1).

n°1986631
Oranjade
Posté le 22-04-2010 à 13:50:00  profilanswer
 

Citation :

Tant que tu n'as pas "?page=xxxx" dans ton url, $_GET['page'] ne sera pas défini.


Mon url a la forme suivante
http://www..................../index.php?page=contact
Les conditions sont donc bien réunies ?
 
Comme plusieurs pages sont concernées (lien hors menu), je cherche l'instruction qui dise :  
Si lien hors menu alors afficher par défaut la position (et non le contenu) du menu {$page = 1;} {$rubrique = 0;}
Ce n'est en effet pas le contenu de la page 1 rubrique 0 (correspondant au menu à double niveau) que je cherche mais son affichage
Une telle instruction devrait se trouver dans ce fichier "functions.php" ?

Code :
  1. <?php
  2. function stylen1($a)
  3. {
  4. if(isset($_GET['page'])) {$page = $_GET['page'];} else{$page = 1;}
  5. if($a == $page)
  6. {
  7.  echo('class="active"');
  8. }
  9. }
  10. function stylen2($a,$b)
  11. {
  12. if(isset($_GET['page'])) {$page = $_GET['page'];} else{$page = 1;}
  13. if(isset($_GET['rubrique'])) {$rubrique = $_GET['rubrique'];} else{$rubrique = 0;}
  14. if(($b == $rubrique))
  15. {
  16.  echo('class="active"');
  17. }
  18. }
  19. function insertion()
  20. {
  21. if(isset($_GET['page'])) {$page = $_GET['page'];}
  22. else {$page = 1;}
  23. if(isset($_GET['rubrique'])) {$rubrique = $_GET['rubrique'];}
  24. else {$rubrique = 0;}
  25. $file = 'includes/'.$page.'/'.$rubrique.'.php';
  26. include($file);
  27. }
  28. ?>


 
Si oui, est-ce que ça pourrait être quelque chose du style

Code :
  1. function stylen0($a,$b)
  2. {
  3. $page = 1; $rubrique = 0;
  4. {
  5.  echo('class="active"');
  6. }
  7. }


 
Ensuite, dans mon fichier "top.php" qui réunit l'ensemble des liens du site (menu et hors menu) dont voici quelques lignes

Code :
  1. <a href="index.php?page=contact" id="acces"><img src="img/acces.gif" alt="Acc&egrave;s" /></a>
  2. <dl id="menu">
  3. <dt><a href="index.php?page=1" title="titre" <?php stylen1(1); ?>>titre</a></dt>
  4. <li><a href="index.php?page=6&amp;rubrique=5" title="Liens" [#f0000e]<?php stylen2(6,5); ?>[/#e2001c]>Liens</a></li>


il faudrait que la ligne du contact intègre l'appel de l'instruction

Code :
  1. <a href="index.php?page=contact" id="acces" <?php stylen0(1,0); ?>><img src="img/acces.gif" alt="Acc&egrave;s" /></a>


 
J'ai testé et en l'état ça ne fonctionne pas. Il me signale une erreur sur le fichier "functions.php" qui correspond à "include($file);" de la function insertion()
Toutefois, avant de vérifier chaque ligne, virgule, position, symbole... pourriez-vous me dire si la logique est bonne ?

n°1986889
Arcan_-
Posté le 23-04-2010 à 09:16:16  profilanswer
 

Ta fonction stylen0() telle qu'elle est là ne sert à rien :

  • tes arguments ne sont pas utilisés,
  • pas de condition,
  • des "{" et "}" qui trainent...,
  • elle affichera toujours class="active"...


Tu pourrais tout aussi bien faire :

Code :
  1. <a href="index.php?page=contact" id="acces" <?php stylen1('contact'); ?>><img src="img/acces.gif" alt="Acc&egrave;s" /></a>

n°1986940
Oranjade
Posté le 23-04-2010 à 11:14:49  profilanswer
 

ok, je crois qu'il faut que je reprenne tout depuis le début. Je vais essayer de bien comprendre chaque élément du code en espérant parvenir à débloquer mon problème.
En tout cas, merci à tous de votre aide


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  affichage d'un menu

 

Sujets relatifs
Problème d'affichage d'un menu en CSS (résolu)Menu déroulant en JVS: problème d'affichage
Pb affichage sous ie image background sous menu liProblème affichage menu déroulant CSS/java sous IE
[PHP/MYSQL] Affichage de tables dans le menu puis ...Problème d'affichage d'un menu avec Mozilla
|JS| souci d'affichage de sous-menuBouton "modifier les sources" ou menu affichage/source
affichage d'un formulaire MENU à l'ouverture de la base de donnée[résolu]"Focus" sur une ligne à l'affichage d'un menu déroulant
Plus de sujets relatifs à : affichage d'un menu


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR