bon, en fait, je vais vous résumer très rapidement le fonctionnement de mon appli, je pense que ça vous aide à comprendre mon problème...
voilà mon contrôleur... (fichier RACINE_DU_PROJET/public/index.php)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
| <?php
#inclusion des fichiers de config
#[...]
#Assignation des variables incluses dans le gabarit HTML
#[...]
/**
* Demarrage de la session
*/
session_start();
#Authentification
#[...]
/**
* Recuperation de l'action utilisateur (on la recupere de l'URL)
*/
$action = isset($_GET['a']) ? $_GET['a'] : "accueil";
/**
* Debut du controleur : reponse en fonction de la requete
*/
try {
switch($action) {
case "accueil":
$titre_principal = "Bonjour Monsieur";
$main = "<p>J'espère que vous allez bien</p>";
break;
case "direToto":
$titre_principal = "Bonjour.....";
$main = "<p>.... toto !</p>";
break;
default :
$titre_principal = "Requête inconnue";
$main = "<p><a href='".BASE_URL."public/'>Retour à l'accueil</a></p>";
break;
}
}
catch(Exception $e) {
//log de l'exception
}
/**
* Inclusion des fragments (recuperation du contenu du fichier)
* /!\ toutes les autres variables d'inclusion doivent etre definies avant /!\
*/
ob_start();
include(BASE_DIR . "ui/fragments/menu_haut.frg.php");
$header= ob_get_contents();
ob_end_clean();
ob_start();
include(BASE_DIR . "ui/fragments/public/menu_bas.frg.php");
$footer= ob_get_contents();
ob_end_clean();
/**
* Inclusion du gabarit HTML
*/
include(BASE_DIR . "ui/skeletons/public.html.php"); |
Certes, j'ai pris un exemple tout bête....
Comme vous le voyez, l'inclusion du gabarit se passe à la toute fin, qd toutes les variables utilisées sont celui-ci ont été définies....
Imaginons que l'utilisateur clique sur
<a href="URL_ABSOLUE/public/index.php?a=direToto">Message secret d'une importance vitale</a>
Nous sommes dans le case "direToto" du contrôleur, et le message s'affiche correctement.
Seulement, imaginons que le javascript soit requis, et que notre utilisateur l'ait désactivé. Si j'inclus une balise <noscript><p>Activez javascript, boudiou!</p></noscript>, ce message s'affichera, mais le reste aussi, et ça, je ne veux pas.
Si j'inclus de base un fichier qui contient <noscript>....</noscript> et <script...>redirection</script>
Je redirige où ?
Toutes les requêtes utilisateurs transitent par le contrôleur, donc je dois trouver un moyen de forwarder celle-ci...
Je souhaiterais donc quelque chose comme ça (en fin de contrôleur) :
1 2 3 4 5 6
| if($javascript_active) {
include(BASE_DIR . "ui/skeletons/public.html.php");
}
else {
include(BASE_DIR . "ui/skeletons/public_nojs.html.php");
} |
Dans la solution que vous me proposez, j'inclus un fichier intermédiaire (<noscript>blabla</noscript><script...>redirection</script>)
Or, l'architecture de mon appli permet pas de faire ça comme vous pouvez le voir ! Tout transite par le contrôleur !
Dites-moi encore si c'est pas clair !
Merci beaucoup de votre aide 
Rolf
P.S. : et bien sûr, la solution doit être valide XHTML1.0 Strict
Partager