Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 13-03-2014 13:14:29

Bouks
Membre
Lieu: Paris
Date d'inscription: 31-08-2012
Messages: 241

changer dynamiquement le dossier des vues dans un module

Hello.

Quelqu'un saurait-il comment je peux changer la partie 'view_manager' de la config dans un controller ?

J'ai bien :

$this->getServiceLocator()->get('config');

pour avoir la config, mais y a-t-il une fonction "set" pour changer la config ?
ou une autre solution ?

Dernière modification par Bouks (14-03-2014 09:40:01)


22914720

Hors ligne

 

#2 13-03-2014 14:05:23

flobrflo
Membre
Lieu: Marseille
Date d'inscription: 26-04-2013
Messages: 376

Re: changer dynamiquement le dossier des vues dans un module

EDIT: Salut ^^

Tu veux changer le répertoire où mettre tes vues?

http://zf2.readthedocs.org/en/latest/mo … html#usage
en résumé:

Code:

 'view_manager' => array(
        'template_path_stack' => array(
            'monapplication' => __DIR__ . '/../mondossierdevue',
        ),

sinon tu à une option de view Model:

Code:

$viewmodel->setTemplate('cheminde/mondossier/devue/mavue.phtml');

Dernière modification par flobrflo (13-03-2014 14:05:37)

Hors ligne

 

#3 13-03-2014 14:19:28

Bouks
Membre
Lieu: Paris
Date d'inscription: 31-08-2012
Messages: 241

Re: changer dynamiquement le dossier des vues dans un module

Merci mais ce n'est pas ce que je cherche.

Je souhaite changer effectivement la config mais dans un controller. Sinon je devrais le changer dans 'index.php' ou carrément dans le fichier de config mais ce sera plus chiant pour ce que j'ai à faire.

Dernière modification par Bouks (13-03-2014 14:20:18)


22914720

Hors ligne

 

#4 13-03-2014 14:33:16

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: changer dynamiquement le dossier des vues dans un module

Salut, hmm tu peux pas le faire dans un module directement ? Genre mettre ton contrôleur dans un module particulier et dans ce module changer le répertoire des vues ?

Sinon à partir du moment où tu as récupérer une AbstractOption tu as normalement le setter qui va bien donc tu devrais pouvoir le faire dans le contrôleur.

Hors ligne

 

#5 13-03-2014 14:44:59

Bouks
Membre
Lieu: Paris
Date d'inscription: 31-08-2012
Messages: 241

Re: changer dynamiquement le dossier des vues dans un module

Merci Orkin si tu pouvais me mettre quelques lignes de code pour ce faire.


22914720

Hors ligne

 

#6 13-03-2014 14:53:31

flobrflo
Membre
Lieu: Marseille
Date d'inscription: 26-04-2013
Messages: 376

Re: changer dynamiquement le dossier des vues dans un module

euh.. le premier bout de code que je t'ai mis, tu peu le mettre dans ton module.config.php (en l'adaptant un petit peu) et ça te change le répertoire de ton module uniquement.

Code:

'template_path_stack' => array(
            __DIR__ . '/../view',
        ),

EDIT : ou alors j'ai vraiment pas compris ce que tu cherche.. xD

Dernière modification par flobrflo (13-03-2014 14:54:57)

Hors ligne

 

#7 13-03-2014 15:05:01

Bouks
Membre
Lieu: Paris
Date d'inscription: 31-08-2012
Messages: 241

Re: changer dynamiquement le dossier des vues dans un module

Non Flo, je cherche quelque chose de plus dynamique.
En fonction de certains environnements, je veux changer ce path. Et cela dans le même module.
Mais je veux le faire dans un controller car ainsi je peux au même endroit dispatcher des infos.

Pour que tu comprennes, aujourd'hui j'ai une application multi-sites et en fonction du site je vais dans tel ou tel module. Je gère ça dans le passage de la conf dans le init de index.php.

Ensuite j'ai un deuxième filtre au niveau du controller (un controller parent) qui me permet de savoir si je suis en dev, recette ou prod et de paramétrer certaines choses.

Maintenant il me faut pouvoir changer la clé 'template_path_stack' en fonction de l'environnement utilisateur (pc, tablette, mobile). J'aimerais faire aussi ça dans un controller plutôt que dans index.php.


22914720

Hors ligne

 

#8 13-03-2014 15:22:25

flobrflo
Membre
Lieu: Marseille
Date d'inscription: 26-04-2013
Messages: 376

Re: changer dynamiquement le dossier des vues dans un module

mmmhhh..
Je retente alors ^^

Code:

class Module
{
    public function init(ModuleManager $moduleManager)
    {
        $sharedEvents = $moduleManager->getEventManager()->getSharedManager();
        $sharedEvents->attach(__NAMESPACE__, 'dispatch', function($e) {
            // To do :Detect User Agent (tablette/pc/mobile).
            if(user_agent == pc){
                $templatePathResolver = $serviceManager->get('Zend\View\Resolver\TemplatePathStack');
                $templatePathResolver->setPaths(array(__DIR__ . '/view/blue')); // ton dossier template
            } else if ( user_agent == tablette) {
                ...
            }
        }, 100);
    }
}

C'est pas "vraiment" dans le controlleur... mais normalement ça devrait ressembler à ce que tu cherche ^^

Hors ligne

 

#9 13-03-2014 15:26:06

Bouks
Membre
Lieu: Paris
Date d'inscription: 31-08-2012
Messages: 241

Re: changer dynamiquement le dossier des vues dans un module

Merci Flo.

Je vais tester !


22914720

Hors ligne

 

#10 13-03-2014 20:12:18

Bouks
Membre
Lieu: Paris
Date d'inscription: 31-08-2012
Messages: 241

Re: changer dynamiquement le dossier des vues dans un module

Voici ce qui fonctionne.

Code:

[lang=php]
public function init(ModuleManager $mm)
{
    $mm->getEventManager()->getSharedManager()->attach('MyNameSpace', 'dispatch', function($e) {
        if (true) {
            $sm = $e->getApplication()->getServiceManager();
            $sm->get('Zend\View\Resolver\TemplatePathStack')->setPaths([__DIR__ . '/view-mobile']);

            $sm->get('Zend\View\Resolver\TemplateMapResolver')->setMap([
                'layout/layout' => __DIR__ . '/view-mobile/layout.phtml',
                'application/index/index' => __DIR__ . '/view-mobile/application/index/index.phtml',
                'error/404' => __DIR__ . '/view-mobile/error/404.phtml',
                'error/index' => __DIR__ . '/view-mobile/error/index.phtml',
            ]);
        }
    }, 100);
}

22914720

Hors ligne

 

#11 14-03-2014 08:43:32

flobrflo
Membre
Lieu: Marseille
Date d'inscription: 26-04-2013
Messages: 376

Re: changer dynamiquement le dossier des vues dans un module

oki, tu fais ta détection de userAgent avec le if(true) c'est ça?

Hors ligne

 

#12 14-03-2014 09:01:56

Bouks
Membre
Lieu: Paris
Date d'inscription: 31-08-2012
Messages: 241

Re: changer dynamiquement le dossier des vues dans un module

Oui, j'ai simplifié.

Pour la détection du device, j'utilise :

https://github.com/neilime/zf2-mobile-detect


22914720

Hors ligne

 

#13 14-03-2014 09:18:25

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: changer dynamiquement le dossier des vues dans un module

Je me pose la question pour ton changement de dossier pour les vues. J'imagine que c'est parce qu'elles sont différentes en fonction du device mais pourquoi ne le fais-tu pas directement en CSS ?

Hors ligne

 

#14 14-03-2014 09:25:28

flobrflo
Membre
Lieu: Marseille
Date d'inscription: 26-04-2013
Messages: 376

Re: changer dynamiquement le dossier des vues dans un module

C'est vrai, pourquoi ne pas faire un responsiv design sur ton site?

Hors ligne

 

#15 14-03-2014 09:29:36

Bouks
Membre
Lieu: Paris
Date d'inscription: 31-08-2012
Messages: 241

Re: changer dynamiquement le dossier des vues dans un module

Ca peut m'arriver de faire ça en css avec les media queries.
Plusieurs cas se présentent :

- Contenu identique mais présentation différente -> changement de css côté serveur ou media queries
- Contenu différent -> changement des vues, voire de module selon les différences.

L'idée étant de limiter au maximum le nombre de requêtes et la taille des données envoyées au device afin de fournir une expérience satisfaisante compte tenu de la lenteur des réseaux mobiles.
Et dans cette perspective les media queries ne sont vraiment pas un modèle car au contenu "lourd" de la version web elles ajoutent en plus des surcharges css.

Dernière modification par Bouks (14-03-2014 09:30:45)


22914720

Hors ligne

 

#16 14-03-2014 10:04:32

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: changer dynamiquement le dossier des vues dans un module

Oui j'aurais tendances à choisir les média queries ça marche plutôt pas mal je trouve. Effectivement ça fait plus de données puisque le fichiers html est plus volumineux. T'as peut être juste moyen de gérer ça à la fois côté serveur et client : tu peux détecter le type de device côté serveur et inclure un fichier css différent en fonction du device, de cette façon tu as le même fichier html et seulement la définition des classes au niveau du css qui change. Ca t'évites d'utiliser les média queries et ça reste plutôt dynamique. De ton côté niveau dev tu gagnes quand même du temps ça t'évites d'avoir à développer des vues pour "haut résolution PC/Mac, moyenne résolution PC/Mac, (les petites on s'en fou en dessous de 1024 x 768 c'est de plus en plus rare), une version tablette et une version mobile. T'en penses quoi ?

Hors ligne

 

#17 14-03-2014 10:54:19

Bouks
Membre
Lieu: Paris
Date d'inscription: 31-08-2012
Messages: 241

Re: changer dynamiquement le dossier des vues dans un module

Ca peut être carrément plus volumineux. Par exemple une page avec, entres autres, une galerie d'image.
Tu choisis de ne pas afficher la galerie sur mobile (ou pourquoi pas de la déporter sur une autre page dédiée), et bien tu te tapes tout de même le chargement complet des images. Pour ça, mieux vaut distribuer le contenu en fonction et ne pas donner côté serveur la galerie en utilisant une autre vue ou en faisant simplement un test sur le device dans la vue.

Il est possible de changer le css côté serveur, c'est ce que je fait. Cependant, selon l'architecture de la page qui peut être bien différente (inversion-changement d'imbrication de blocs, inclusion-exclusion-changement de contenu), il faut parfois mieux changer aussi l'architecture du code html. C'est parfois bien plus rapide à faire. Evidemment, dans l'idéal, le contenu html devrait être identique mais les créas ne font pas forcément en fonction.

Ca ne me dérange pas de développer des vues s'il y a un besoin car c'est vraiment vite fait. Et pour l'instant on ne m'a déjà demandé qu'1 seule version web (1000 ou 1200 de large en général et c'est tout), 1 version tablette (souvent les mêmes vues avec de petits changements) et 1 version mobile. Généralement la version mobile est complètement différente.

On peut effectivement faire 50 versions selon plein de paramètres (nombreuses résolutions, devices, vieux navigateurs, navigateurs hors normes...) mais cela correspond à un budget dont beaucoup de clients ne sont pas prêts à investir. Même en media-queries ça peut prendre pas mal de temps (sans compter qu'en css, à moins d'utiliser des outils comme LESS, ça peut être très fastidieux).

Je pense que ta solution est aussi valable, ça dépend juste du contexte et du projet.

L'important c'est que quand tu navigues en 2G/3G/etc. que:

- tu n'attendes pas une plombe ton contenu sinon tu zappes
- ton contenu risque moins d'être partiellement chargé car tu es sorti d'une zone de couverture


22914720

Hors ligne

 

#18 14-03-2014 10:59:47

flobrflo
Membre
Lieu: Marseille
Date d'inscription: 26-04-2013
Messages: 376

Re: changer dynamiquement le dossier des vues dans un module

Oui tout dépend de ton contenu, effectivement pour l'exemple de ta galerie d'image l'idée parait censée ^^
Mais il faut utiliser cette méthode avec modération et pas se perdre dans la création de vue ^^

Hors ligne

 

#19 14-03-2014 11:18:19

Bouks
Membre
Lieu: Paris
Date d'inscription: 31-08-2012
Messages: 241

Re: changer dynamiquement le dossier des vues dans un module

Tu t'y retrouves plus facilement dans une vue que dans un fichier css de 2000 lignes. wink


22914720

Hors ligne

 

#20 14-03-2014 11:33:08

flobrflo
Membre
Lieu: Marseille
Date d'inscription: 26-04-2013
Messages: 376

Re: changer dynamiquement le dossier des vues dans un module

oui et non,
par ce que la tu modifie plusieurs fichiers pour changer le path de tes vues, tu a des vues qui sont censée avoir le même noms. faut vraiment faire gaf quand tu modifie ^^

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages