Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Cette question est résolue sur le lien ci-dessous :
http://www.z-f.fr/forum/viewtopic.php?id=5798
Il est possible d'utiliser un greffon de ressource pour amorcer certaines ressources.
-----------
Bonjour à tous,
Je désire développer un site dont la présentation s'adapte au terminal utilisé par le visiteur. Typiquement :
(*) L'organisation (et la typographie) d'une page à destination d'un utilisateur d'Iphone est soumise à des contraintes imposées par la taille de l'écran de l'Iphone.
(*) L'utilisation de certaines technologies n'est pas envisageable sur un Iphone (Flash,...).
Je me pose la question suivante : Quelle est la solution la plus élégante, par rapport à l'implémentation du patron de conception MVC de ZEND.
J'ai consulté la documentation, et je suis tombé sur un concept qui me semble utile dans le cas de figure qui m'intéresse : "Resource Plugins" (http://framework.zend.com/manual/fr/zen … ation.html).
Mais j'ai beau lire, et relire (et relire encore et encore), la documentation, je ne vois pas à quoi ça sert.
Quelqu'un peut-il me donner un exemple représentatif d'utilisation de ce concept?
Merci,
Denis
Dernière modification par Denis. Beurive (04-10-2010 18:39:52)
Hors ligne
Bonjour,
Les Resource Plugins n'ont a priori rien à voir avec ton besoin. Ils servent juste à faciliter l'initialisation de ton application (le Bootstrap).
Sinon tu as de nombreuses façons de faire qui dépendent du résultat que tu veux à l'arrivée. Ca n'est pas vraiment lié au ZF.
Tu peux regarder le "Context Switch" http://framework.zend.com/manual/en/zen … lpers.html qui peut t'aider à gérer ce genre de problématique, mais avant de te lancer dans le code, demande toi ce que tu veux dans ta version "standard" et dans ta version iphone.
Parfois avoir juste un changement de CSS suivant le terminal peut suffire...
A+, Philippe
Hors ligne
philippe a écrit:
Bonjour,
Les Resource Plugins n'ont a priori rien à voir avec ton besoin. Ils servent juste à faciliter l'initialisation de ton application (le Bootstrap).
Sinon tu as de nombreuses façons de faire qui dépendent du résultat que tu veux à l'arrivée. Ca n'est pas vraiment lié au ZF.
Tu peux regarder le "Context Switch" http://framework.zend.com/manual/en/zen … lpers.html qui peut t'aider à gérer ce genre de problématique, mais avant de te lancer dans le code, demande toi ce que tu veux dans ta version "standard" et dans ta version iphone.
Parfois avoir juste un changement de CSS suivant le terminal peut suffire...
A+, Philippe
Salut Philippe,
Je te remercie pour ta réponse.
Au niveau de l'agencement ("layout") des pages :
Il me faut un "fichier d'agencement" (un fichier de "layout") par type de terminal.
Sur écran de PC, le site présentera une marge à gauche. Cette marque contiendra des liens vers des services. Sur un Iphone, je ne vais pas afficher la marge de gauche. Il me faut donc prévoit un agencement spécifique pour chaque terminal.
Au niveau des vues :
Je dois définir des vues communes à tous les terminaux, mais aussi des vues spécifiques pour chaque terminal.
Le menu principal de navigation n'utilise pas les mêmes technologies suivant que le site est destiné à l'Iphone ou à un PC. Non seulement les technologies diffèrent, mais l'organisation du menu diffère aussi. Il me faut donc définir une vue spécifique à chaque terminal.
Par contre, le pied de page sera identique, quel que soit le terminal. Il me faut donc définir un jeu de pages communes.
Au niveau des aides de vues :
La problématique est identique à celle des vues.
Au niveau des CSS :
La problématique est identique à celle des vues.
J'ai pensé à jouer avec l'environnement du fichier d'initialisation.
application/configs/application.ini
[defaultTerminal : production] resources.layout.layoutPath = APPLICATION_PATH "/layouts/default" ressouces.view... = APPLICATION_PATH "/views/default" ressouces.view... = APPLICATION_PATH "/helpers/default" [iphoneTerminal : production] resources.layout.layoutPath = APPLICATION_PATH "/layouts/iphone" ressouces.view... = APPLICATION_PATH "/views/iphone" ressouces.view... = APPLICATION_PATH "/helpers/iphone"
Dans le fichier "index.php", je défini APPLICATION_ENV comme un tableau de chaînes de caractères (http://zendframework.com/manual/1.0/fr/ … s.ini.html).
Ex :
define('APPLICATION_ENV', array('production', 'iphoneTerminal'));
$application = new Zend_Application( APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini' );
Le problème, c'est que cette technique ne permet pas de gérer les "éléments" par défaut (vues communes à tous les terminaux, ...). Pour les aides de vues, toutefois, je crois qu'il est possible de définir un répertoire par défaut (il faut que je relise la documentation).
Que penses-tu de cette solution?
A+
Dernière modification par Denis. Beurive (30-09-2010 17:03:31)
Hors ligne
Gestion des "layouts"
Je place dans le même répertoire tous les "layouts" (le "layout" pour l'Iphone, le "layout" pour l'Ipade, le "lauyou" pour un PC,...).
Puis j'utilise la fonction "setLayout()" pour spécifier celui qui doit être utilisé, en fonction du terminal courant.
Gestion des vues
J'ai trouvé un moyen de configurer l'application de façon à obtenir le comportement suivant :
1. Je définis deux répertoires : Un répertoire qui contient les vues spécifiques à un terminal (ex: toutes les vues spécifiques à l'Iphone). et un répertoire qui contient les vues communes à tous les terminaux.
2. L'application commence par rechercher la vue associée à l'action dans le répertoire spécifique au terminal courant.
3. Si le répertoire spécifique au terminal courant contient la vue recherchée, alors cette dernière est utilisée.
4. Dans le cas contraire, l'application recherche la vue dans le répertoire qui contient les vues communes à tous les terminaux.
Pour cela, il faut utiliser les fonctions suivantes :
http://julien-pauli.developpez.com/tuto … =Zend_View
setScriptPath() indique à notre instance de vue, où chercher les fichiers vue qu'on va lui faire charger.
addScriptPath() ajoute un dossier dans la liste des dossiers de vue. Notre instance va chercher dans le dossier spécifié par addScriptPath() d'abord puis, si elle ne trouve pas les vues, elle cherchera alors dans le dossier spécifié par setScriptPath(). C'est intéressant si l'on veut créer plusieurs looks sur notre site et spécifier un des looks via cette méthode.
setScriptPath(<chemin vers le répertoire des vues communes à tous les terminaux>) addScriptPath(<chemin vers le répertoire des vues spécifiques au terminal courant>)
Gestion des aides de vues
J'ai trouvé un moyen de configurer l'application de façon à obtenir le comportement suivant :
1. Je définis deux répertoires : Un répertoire qui contient les aides de vues spécifiques à un terminal (ex: toutes les aides de vues spécifiques à l'Iphone). et un répertoire qui contient les aides de vues communes à tous les terminaux.
2. L'application commence par rechercher l'aide de vue associée à l'action dans le répertoire spécifique au terminal courant.
3. Si le répertoire spécifique au terminal courant contient l'aide de vue recherchée, alors cette dernière est utilisée.
4. Dans le cas contraire, l'application recherche l'aide de vue dans le répertoire qui contient les aides de vues communes à tous les terminaux.
setHelperPath(<chemin vers le répertoire des aides de vues communes à tous les terminaux>) addHelperPath(<chemin vers le répertoire des aides de vues spécifiques au terminal courant>)
Note: Au lieu de réaliser ces opérations via le code PHP, il est peut-être possible de définir des environnements dans le fichier d'initialisation de l'application ("application.ini"). Ce serait plus élégant. Mais je ne suis pas certain que cela soit réalisable.
A+
Hors ligne
Pages: 1