Bonjour,
Afin de rendre plus facilement réutilisable des pages Php / HTML, je
cherche à stocker les données d'un menu.
Chaque "menuitem" est composé de trois chaînes, le nom sur le bouton,
un lien, et enfin un titre.
J'avais testé un truc qui fonctione sur une partie plus simple (la
partie "administration") du site, sans titre de page. J'utilisais un
menudata.php:
<?php
$menu = array(
"Consulter" => "./protect/corps_consulter.php",
"Nettoyer" => "./protect/corps_nettoyer.php",
"Finir" => "./protect/corps_finir.php");
?>
Je suis donc tenté de faire:
<?php
$menu1liens = array(
"Accueil" => "chapitres.php?chapitre=accueil.htm",
"Liens" => "chapitres.php?chapitre=liens.php",
"Chapitres 1 & 2" =>
"chapitres.php?chapitre=ch01_02.htm");
Ça me semble jouable, d'autant que ce ne sera exploité que par une
boucle qui génèrera du html, mais ça me choque un peu. En C j'aurais
pensé à un tableau de structures, en traitant d'un façon ou d'une autre
le nombre de structures.
Que me conseillez-vous ? Est-il "normal" d'utiliser des classes sans
méthodes en tant que structures ? Y a-t-il alors une façon simple
d'initialiser un tableau d'instances ? Genre:
CMenu TMenu[] = {{}{}{}};
Merci d'avance. Vu que le forum est modéré, j'aurais sans doute testé
la solution des deux tableaux associatifs avant la réponse ;-) ....
--
Pour répondre directement: enlever une lettre sur deux
wwaannaaddoooo -> wanadoo
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Bruno Desthuilliers
(snip)
Chaque "menuitem" est composé de trois chaînes, le nom sur le bouton, un lien, et enfin un titre. (snip)
Je suis donc tenté de faire: <?php $menu1liens = array( "Accueil" => "chapitres.php?chapitre¬cueil.htm", "Liens" => "chapitres.php?chapitre=liens.php", "Chapitres 1 & 2" => "chapitres.php?chapitre=ch01_02.htm");
Array("label"=>"Liens", "lien"=>"chapitres.php?chapitre=liens.php", "titre" => "Liste de liens"),
// etc... );
Que me conseillez-vous ? Est-il "normal" d'utiliser des classes sans méthodes en tant que structures ?
Ca s'appelle un struct en C et un Record en Pascal, non ?-)
Dans l'absolu, non, ça ne me choques pas, mais pour faire ça en php, la construction de base serait plutôt le tableau associatif AMHA (cf exemple ci-dessus)
Par ailleurs, quand tu défini une structure de données, en général, tu a des fonctions qui l'utilise... Donc si tu utilise déjà une classe pour ta structure de données, il y a probablement certaines de ces fonctions qui seraient aussi bien comme méthodes de ladite classe.
Y a-t-il alors une façon simple d'initialiser un tableau d'instances ? Genre: CMenu TMenu[] = {{}{}{}};
Non. Il faut faire un truc du genre:
class MenuItem { function MenuItem($label, $lien, $titre) { $this->label = $label; $this->lien = $lien; $this->titre = $titre; } }
$menu = Array( new MenuItem("Accueil", "chapitres.php?chapitre¬cueil.htm", "Livre Assembleur - Accueil"),
new MenuItem("Liens", "chapitres.php?chapitre=liens.php", "Liste de liens"),
// etc... );
Franchement, dans l'absolu, je ne suis pas sûr que le choix entre l'une et l'autre solution soit réellement stratégique !-)
Merci d'avance. Vu que le forum est modéré, j'aurais sans doute testé la solution des deux tableaux associatifs avant la réponse ;-) ....
Là, par contre, je me demande si tu ne te compliques pas un peu la vie en ayant deux tableaux à gérer au lieu d'un seul...
Mes deux centimes...
(snip)
Chaque "menuitem" est composé de trois chaînes, le nom sur le bouton, un
lien, et enfin un titre.
(snip)
Je suis donc tenté de faire:
<?php
$menu1liens = array(
"Accueil" => "chapitres.php?chapitre¬cueil.htm",
"Liens" => "chapitres.php?chapitre=liens.php",
"Chapitres 1 & 2" =>
"chapitres.php?chapitre=ch01_02.htm");
Array("label"=>"Liens",
"lien"=>"chapitres.php?chapitre=liens.php",
"titre" => "Liste de liens"),
// etc...
);
Que me conseillez-vous ? Est-il "normal" d'utiliser des classes sans
méthodes en tant que structures ?
Ca s'appelle un struct en C et un Record en Pascal, non ?-)
Dans l'absolu, non, ça ne me choques pas, mais pour faire ça en php, la
construction de base serait plutôt le tableau associatif AMHA (cf
exemple ci-dessus)
Par ailleurs, quand tu défini une structure de données, en général, tu a
des fonctions qui l'utilise... Donc si tu utilise déjà une classe pour
ta structure de données, il y a probablement certaines de ces fonctions
qui seraient aussi bien comme méthodes de ladite classe.
Y a-t-il alors une façon simple
d'initialiser un tableau d'instances ? Genre:
CMenu TMenu[] = {{}{}{}};
Non. Il faut faire un truc du genre:
class MenuItem
{
function MenuItem($label, $lien, $titre)
{
$this->label = $label;
$this->lien = $lien;
$this->titre = $titre;
}
}
$menu = Array(
new MenuItem("Accueil",
"chapitres.php?chapitre¬cueil.htm",
"Livre Assembleur - Accueil"),
new MenuItem("Liens",
"chapitres.php?chapitre=liens.php",
"Liste de liens"),
// etc...
);
Franchement, dans l'absolu, je ne suis pas sûr que le choix entre l'une
et l'autre solution soit réellement stratégique !-)
Merci d'avance. Vu que le forum est modéré, j'aurais sans doute testé la
solution des deux tableaux associatifs avant la réponse ;-) ....
Là, par contre, je me demande si tu ne te compliques pas un peu la vie
en ayant deux tableaux à gérer au lieu d'un seul...
Chaque "menuitem" est composé de trois chaînes, le nom sur le bouton, un lien, et enfin un titre. (snip)
Je suis donc tenté de faire: <?php $menu1liens = array( "Accueil" => "chapitres.php?chapitre¬cueil.htm", "Liens" => "chapitres.php?chapitre=liens.php", "Chapitres 1 & 2" => "chapitres.php?chapitre=ch01_02.htm");
Array("label"=>"Liens", "lien"=>"chapitres.php?chapitre=liens.php", "titre" => "Liste de liens"),
// etc... );
Que me conseillez-vous ? Est-il "normal" d'utiliser des classes sans méthodes en tant que structures ?
Ca s'appelle un struct en C et un Record en Pascal, non ?-)
Dans l'absolu, non, ça ne me choques pas, mais pour faire ça en php, la construction de base serait plutôt le tableau associatif AMHA (cf exemple ci-dessus)
Par ailleurs, quand tu défini une structure de données, en général, tu a des fonctions qui l'utilise... Donc si tu utilise déjà une classe pour ta structure de données, il y a probablement certaines de ces fonctions qui seraient aussi bien comme méthodes de ladite classe.
Y a-t-il alors une façon simple d'initialiser un tableau d'instances ? Genre: CMenu TMenu[] = {{}{}{}};
Non. Il faut faire un truc du genre:
class MenuItem { function MenuItem($label, $lien, $titre) { $this->label = $label; $this->lien = $lien; $this->titre = $titre; } }
$menu = Array( new MenuItem("Accueil", "chapitres.php?chapitre¬cueil.htm", "Livre Assembleur - Accueil"),
new MenuItem("Liens", "chapitres.php?chapitre=liens.php", "Liste de liens"),
// etc... );
Franchement, dans l'absolu, je ne suis pas sûr que le choix entre l'une et l'autre solution soit réellement stratégique !-)
Merci d'avance. Vu que le forum est modéré, j'aurais sans doute testé la solution des deux tableaux associatifs avant la réponse ;-) ....
Là, par contre, je me demande si tu ne te compliques pas un peu la vie en ayant deux tableaux à gérer au lieu d'un seul...
Mes deux centimes...
Pierre Maurette
(snip) [...]
Merci de votre réponse. Elle avait échappé à MesNews ou à ma vigilance. Entre temps, j'avais résolu le problème, en ayant corrigé une erreur d'analyse. J'ai gardé 2 tableaux (je n'avais pas pensé au tableau de deux tableaux). Ça donne:
Vous pouvez gueuler (j'aime ça !) sur le mélange PHP / HTML, sur le nommage des fichiers (.htm ou .php ?), sur les " ou ', ça me fera plaisir ;-)
-- Pour répondre directement: enlever une lettre sur deux wwaannaaddoooo -> wanadoo
Pierre Maurette
(snip)
[...]
Merci de votre réponse. Elle avait échappé à MesNews ou à ma vigilance.
Entre temps, j'avais résolu le problème, en ayant corrigé une erreur
d'analyse. J'ai gardé 2 tableaux (je n'avais pas pensé au tableau de
deux tableaux). Ça donne:
Merci de votre réponse. Elle avait échappé à MesNews ou à ma vigilance. Entre temps, j'avais résolu le problème, en ayant corrigé une erreur d'analyse. J'ai gardé 2 tableaux (je n'avais pas pensé au tableau de deux tableaux). Ça donne:
Vous pouvez gueuler (j'aime ça !) sur le mélange PHP / HTML, sur le nommage des fichiers (.htm ou .php ?), sur les " ou ', ça me fera plaisir ;-)
-- Pour répondre directement: enlever une lettre sur deux wwaannaaddoooo -> wanadoo
Pierre Maurette
bruno modulix
Pierre Maurette wrote:
(snip)
[...] Merci de votre réponse. Elle avait échappé à MesNews ou à ma vigilance. Entre temps, j'avais résolu le problème, en ayant corrigé une erreur d'analyse. J'ai gardé 2 tableaux (je n'avais pas pensé au tableau de deux tableaux).
Mmm... Le problème avec deux tableaux, c'est que ça fait deux points à maintenir en synchro, donc ça ouvre la possibilté d'un bug. Et puis je trouve ça plus difficile à comprendre comme structure - j'ai du lire le code une deuxième fois pour comprendre (mais je ne suis pas forcément une référence de ce point de vue là !-). Mais bon...
(snip code)
Vous pouvez gueuler (j'aime ça !) sur le mélange PHP / HTML, sur le nommage des fichiers (.htm ou .php ?), sur les " ou ', ça me fera plaisir ;-)
Non, merci.
-- bruno desthuilliers ruby -e "print ''.split('@').collect{|p| p.split('.').collect{|w| w.reverse}.join('.')}.join('@')"
Pierre Maurette wrote:
(snip)
[...]
Merci de votre réponse. Elle avait échappé à MesNews ou à ma vigilance.
Entre temps, j'avais résolu le problème, en ayant corrigé une erreur
d'analyse. J'ai gardé 2 tableaux (je n'avais pas pensé au tableau de
deux tableaux).
Mmm... Le problème avec deux tableaux, c'est que ça fait deux points à
maintenir en synchro, donc ça ouvre la possibilté d'un bug. Et puis je
trouve ça plus difficile à comprendre comme structure - j'ai du lire le
code une deuxième fois pour comprendre (mais je ne suis pas forcément
une référence de ce point de vue là !-). Mais bon...
(snip code)
Vous pouvez gueuler (j'aime ça !) sur le mélange PHP / HTML, sur le
nommage des fichiers (.htm ou .php ?), sur les " ou ', ça me fera
plaisir ;-)
Non, merci.
--
bruno desthuilliers
ruby -e "print 'onurb@xiludom.gro'.split('@').collect{|p|
p.split('.').collect{|w| w.reverse}.join('.')}.join('@')"
[...] Merci de votre réponse. Elle avait échappé à MesNews ou à ma vigilance. Entre temps, j'avais résolu le problème, en ayant corrigé une erreur d'analyse. J'ai gardé 2 tableaux (je n'avais pas pensé au tableau de deux tableaux).
Mmm... Le problème avec deux tableaux, c'est que ça fait deux points à maintenir en synchro, donc ça ouvre la possibilté d'un bug. Et puis je trouve ça plus difficile à comprendre comme structure - j'ai du lire le code une deuxième fois pour comprendre (mais je ne suis pas forcément une référence de ce point de vue là !-). Mais bon...
(snip code)
Vous pouvez gueuler (j'aime ça !) sur le mélange PHP / HTML, sur le nommage des fichiers (.htm ou .php ?), sur les " ou ', ça me fera plaisir ;-)
Non, merci.
-- bruno desthuilliers ruby -e "print ''.split('@').collect{|p| p.split('.').collect{|w| w.reverse}.join('.')}.join('@')"
Pierre Maurette
Pierre Maurette wrote:
(snip)
[...] [...]
Mmm... Le problème avec deux tableaux, c'est que ça fait deux points à maintenir en synchro, donc ça ouvre la possibilté d'un bug. Et puis je trouve ça plus difficile à comprendre comme structure - j'ai du lire le code une deuxième fois pour comprendre (mais je ne suis pas forcément une référence de ce point de vue là !-). Mais bon... OK. J'avais lu un peu rapidement le code de Bruno. Il est effectivement
bien supérieur à ce que j'avais. Je l'ai corrigé dans ce sens, ce n'était pas bien compliqué. Seul petit problème: le tableau est maintenant :
Je reçois dans $chapitre un champs "lien", par exemple "ch11_.htm". Il me semble que je ne peux récupérer directement le champs "titre" ? J'ai fait:
<?PHP foreach($menu as $menuitem){if($menuitem["lien"] == $chapitre)break;} echo $menuitem["titre"]; ?>
Y'a mieux ?
Bonne journée ...
-- Pour répondre directement: enlever une lettre sur deux wwaannaaddoooo -> wanadoo
Pierre Maurette
Pierre Maurette wrote:
(snip)
[...]
[...]
Mmm... Le problème avec deux tableaux, c'est que ça fait deux points à
maintenir en synchro, donc ça ouvre la possibilté d'un bug. Et puis je
trouve ça plus difficile à comprendre comme structure - j'ai du lire le
code une deuxième fois pour comprendre (mais je ne suis pas forcément
une référence de ce point de vue là !-). Mais bon...
OK. J'avais lu un peu rapidement le code de Bruno. Il est effectivement
bien supérieur à ce que j'avais.
Je l'ai corrigé dans ce sens, ce n'était pas bien compliqué. Seul petit
problème: le tableau est maintenant :
Mmm... Le problème avec deux tableaux, c'est que ça fait deux points à maintenir en synchro, donc ça ouvre la possibilté d'un bug. Et puis je trouve ça plus difficile à comprendre comme structure - j'ai du lire le code une deuxième fois pour comprendre (mais je ne suis pas forcément une référence de ce point de vue là !-). Mais bon... OK. J'avais lu un peu rapidement le code de Bruno. Il est effectivement
bien supérieur à ce que j'avais. Je l'ai corrigé dans ce sens, ce n'était pas bien compliqué. Seul petit problème: le tableau est maintenant :