8710 sujets

Développement web côté serveur, CMS

Pages :
(reprise du message précédent)

Admettons que les menus des cinq contextes soient de deux types : menu_a.htm et menu_b.htm.
On aurait :

 switch($context)
{
	case 'accueil':
		$left = "menu_a.htm;			//	<< menu_a
		$mid = "mid_accueil.htm";      
		$right = "right_accueil.htm";
			break;
			
	case 'subject_1':
		$left = "menu_a.htm;			//	<< menu_a (le même)
		$mid = "mid_subject_1.htm";      
		$right = "right_subject_1.htm";
			break;

	case 'subject_2':
		$left = "menu_b.htm;			//	<< menu_b (un autre)
		$mid = "mid_subject_2.htm";      
		$right = "right_subject_2.htm";
			break;
...

C'est sans soucis particulier.
Mais t'es une vraie girouette toi !!! Smiley fache
Ce n'est pas le code que tu as proposé au posteur, désolé.
Ce n'est même pas représentatif de ce que le posteur à donné à l'origine.
Soit Malka a trouvé la solution, soit il/elle s'est sauvé(e) en courant.

Bison > Il y a juste une chose qui me chiffonne à propos de la "maintenabilité" des 2 codes. En utilisant un tableau, comme tu le proposes, on doit toujours ajouter manuellement les entrées du tableau. En dehors du gain de performances, pourquoi est-ce selon toi tellement plus maintenable ?
Le défaut majeur dans ce cas (array), c'est d'imposer 15 pages, à cause du préfixage left_ mid_ right_ ...


<div id="menu_gauche">',include ('left_'.$suite.'.htm'),'</div>
<div id="main">',include ('mid_'.$suite.'.htm'),'</div>
<div id="col_droite">',include ('right_'.$suite.'.htm'),'</div>';
GeorgesM a écrit :
Le défaut majeur dans ce cas (array), c'est d'imposer 15 pages, à cause du préfixage left_ mid_ right_ ...


Mais c'est excatement ce que tu as proposé dans ton code précédement je te signale, c'est toi qui a préfixé dans ton exemple.
Ensuite t'as édité ton post pour y changer la forme.

Sopo a écrit :

En utilisant un tableau, comme tu le proposes, on doit toujours ajouter manuellement les entrées du tableau.

Et comment tu fais avec un switch() ?????
T'es obligé d'ouvrir ton code pour ajouter les infos.
Avec un tableau, 1 valeur à ajouter.
Tu peux même travailler avec un bête fichier txt externe.

Les pseudo frames sont d'une simplicité déconcertante.
Puis sur un site il n'y a pas 2500 menus, entêtes et pied de page différents.
Modifié par Bison (10 Nov 2006 - 18:22)
Bison a écrit :

Mais c'est excatement ce que tu as proposé dans ton code précédement je te signale, c'est toi qui a préfixé dans ton exemple.
Ensuite t'as édité ton post pour y changer la forme.


Smiley eek
GeorgesM a écrit :

<?php

$context = (isset($_GET["page"])) ? $_GET["page"] : "accueil";



 switch($context)

{

	case 'accueil':

		$left = "left_accueil.htm;

		$mid = "mid_accueil.htm";      

		$right = "right_accueil.htm";

			break;

			

	case 'subject_1':

		$left = "left_subject_1.htm;

		$mid = "mid_subject_1.htm";      

		$right = "right_subject_1.htm";

			break;

			

	case 'subject_2':

		$left = "left_subject_2.htm;

		$mid = "mid_subject_2.htm";      

		$right = "right_subject_2.htm";

			break;

			

	default:     // Le param GET contient une valeur fantaisiste

		$left = "left_accueil.htm;

		$mid = "error.htm";      // un message d'erreur courtois et polis

		$right = "left_accueil.htm";



} 

// à ce stade, tout les cas de figures sont couverts...

?>



<body>



	<div id="menu_gauche">

		<?php include $left; ?>

	</div>



	<div id="main">

		<?php include $mid; ?>

	</div>



	<div id="col_droite">

		<?php include $right; ?>

	</div>



</body>

Otes-moi d'un doute, ceci est bien ton exemple de code ? Smiley rolleyes
Les fichiers sont bien préfixés, mise à part dans le default, les valeurs sont bien toutes différentes.
Donc mon exmple est calqué sur ce que tu préconisais, rien de plus. Smiley cligne

Tu restes persuadé que le switch est la solu alors que je sais que ça ne l'est pas. Smiley langue
Même le tuto du site phpdebutant a revu sa copie au sujet du switch() et des pseudo-frame depuis plus d'un an. Smiley cligne
L'exemple de code montre qu'il est possible de profiler le switch en fonction des besoins du développeur, et met l'accent aussi sur le traitement des valeurs fantaisistes.
L'exemple suivant montre comment modifier le switch pour autoriser la réutilisation de menu_a.htm.
Le préfixage n'est pas algorithmique, mais à des fins d'illustration.
Par contre, dans la solution array, on est obligé de distinguer 15 fichiers externes.


	case 'accueil':
		$left = "menu_a.htm;			//	<< menu_a
		$mid = "mid_accueil.htm";      
		$right = "right_accueil.htm";
			break;

	case 'subject_1':
		$left = "menu_a.htm;			//	<< menu_a (le même)
		$mid = "mid_subject_1.htm";      
		$right = "right_subject_1.htm";

			break;


Un développeur doit s'efforcer de choisir la bonne solution en fonction des outils dont il dispose. Il n'est marqué nulle part qu'on doit se priver de la souplesse d'un switch quand celui-ci constitue un meilleur choix que le tableau.

a écrit :
Tu restes persuadé que le switch est la solu alors que je sais que ça ne l'est pas. Smiley langue


Dans ce cas, je le pense. Oui.
Modifié par GeorgesM (10 Nov 2006 - 19:52)
Bon ok, en adoptant ton schéma :
<?php
$pages=array(
	'accueil'=>array('menu_a','mid_accueil','right_accueil'),
	'page1'=>array('menu_a','mid_subject_1','right_subject_1')
	);

if(isset($_GET['page']) && array_key_exists($_GET['page'],$pages)) 
$suite=$pages[$_GET['page']]; else $suite=$pages['accueil'];

echo $suite[0],'.htm<br />',$suite[1],'.htm<br />',$suite[2],'.htm<br />';
?>
Voilà. C'est comparable.

Pour gérer un replis en cas de $_GET farfelu (information d'erreur, ou équivalent 404, par exemple), il faudra sophistiquer encore un peu plus....
GeorgesM a écrit :
Voilà. C'est comparable.

Pour gérer un replis en cas de $_GET farfelu (information d'erreur, ou équivalent 404, par exemple), il faudra sophistiquer encore un peu plus....

Aucun intérêt, non définie ou farfelue, la "non-page" mène sur accueil.
Bison a écrit :

Aucun intérêt, non définie ou farfelue, la "non-page" mène sur accueil.
Euh si, au contraire.

Autant renvoyer une erreur 404 si la page est incorrecte, ça évitera que par exemple les moteurs de recherche indexent plusieurs pages incorrectes.
Pourquoi un moteur viendrait-il indexer un lien avec une variable de page qui n'existe pas ?????
Bison a écrit :
Pourquoi un moteur viendrait-il indexer un lien avec une variable de page qui n'existe pas ?????
Tout simplement si cette page existait et que tu l'as supprimée, ou si il y avait un lien mal écrit vers ta page...
Je pense que c'est à la discrétion de la personne qui conçoit le site.
Une 404, ou, ce n'est pas déshonorant, un message indiquant que le site est en construction, ou un message à l'attention des hackers...
C'est une question d'imagination.
Ce qui est intéressant c'est de pouvoir le faire.

a écrit :
Tout simplement si cette page existait et que tu l'as supprimée, ou si il y avait un lien mal écrit vers ta page...

Oui.
Modifié par GeorgesM (10 Nov 2006 - 22:38)
a écrit :
Ce qui est intéressant c'est de pouvoir le faire.


Le default du switch dirige sur une page erreur.htm, mon else dirige sur la page d'accueil.
Et ça change quoi ?
Bison a écrit :
Ce qui est intéressant c'est de pouvoir le faire.
Le default du switch dirige sur une page erreur.htm, mon else dirige sur la page d'accueil.
Et ça change quoi ?On ne parlait plus du switch et du tableau, mais de
GeorgesM a écrit :
Voilà. C'est comparable.

Pour gérer un replis en cas de $_GET farfelu (information d'erreur, ou équivalent 404, par exemple), il faudra sophistiquer encore un peu plus....
On dirait que tu fais une fixation. Smiley cligne
Re Smiley cligne

a écrit :
[quote=Sopo]En utilisant un tableau, comme tu le proposes, on doit toujours ajouter manuellement les entrées du tableau.


Et comment tu fais avec un switch() ?????
T'es obligé d'ouvrir ton code pour ajouter les infos.

C'est tout ce que je voulais savoir. Et cela me conforte dans l'idée qu'un switch n'est pas plus difficile à maintenir tant qu'on reste dans un nombre de pages raisonnables. Et au-delà, je pense que l'on bascule de toutes façons vers une gestion via BDD ... Les "case" d'un switch pour appeler des include pourraient aussi tenir sur une ligne de code, la plupart du temps.

Bref, l'un dans l'autre, les 2 points de vue sont amha défendables (et défendus, d'ailleurs). Dans ce cas, autant laisser au développeur le choix final. Le meilleur code, c'est celui qui sera le plus clair dans son esprit.

J'imagine qu'on pourrait me rétorquer "Et si c'est un autre développeur qui doit s'occuper de la mise à jour, plus tard ?" ... Si le précédent a suivi une des règles d'or de la progammation (web ou autre), à savoir commenter ses scripts, autant qu'il utilise un switch, dont il a compris le fonctionnement, plutôt qu'un array parce qu'on lui a dit que c'est "plus performant".

On me l'a répété sans arrêt pendant mes études, et je pense que c'est vrai : la meilleure méthode, c'est celle qu'on comprend le mieux Smiley cligne

Mais bon, chacun son avis Smiley cligne
Sopo a écrit :
On me l'a répété sans arrêt pendant mes études, et je pense que c'est vrai : la meilleure méthode, c'est celle qu'on comprend le mieux Smiley cligne
Tout à fait d'accord...
Pages :