2012-12-08 3 views
0

Je souhaite afficher une vue mobile au lieu du script de vue normal.Commutateur de nom de script de vue par défaut Zend

Prenons par exemple cette action/my_module/my_controller/my_action. Quand je l'appelle, en fonction du traitement de certains en-têtes, je sais que l'agent utilisateur est un périphérique mobile. Ensuite, je définis la mise en page principale comme étant une mise en page spécifique au mobile. Je le fais comme ça et il fonctionne très bien: Zend_Layout::getMvcInstance()->setLayout('mobile');

Mais dans mon contrôleur ou un autre endroit que je veux remplacer le fichier d'affichage par défaut my_action.phtml sur quelque chose comme my_action_mobile.phtml.

Comment cela pouvait se faire étant donné que je suis en utilisant l'aide d'action comme cela dans certaines de mes vues: <?php echo $this->action("index", "index", "items")?> ou est une partie de mon action Je _forward comme ceci: $this->_forward("index", "auth", "default");

J'ai essayé avec setViewSuffix('mobile') et avec plusieurs variantes de nom de fichier comme: my_action.mobile.phtml, ou setViewSuffix('mobile.phtml') et le fichier appelé my_action.mobile.phtml et autres, résultant en une page blanche - pas d'erreur, rien. (Je n'ai aucune idee pourquoi parce qu'il est configuré pour afficher les erreurs lancées)

Aussi j'ai essayé avec le contextSwitching mais il désactive ma disposition principale - je ne veux pas ceci - et il se sent comme il ne manipule pas correctement l'action voir l'aide. (une vue rendue dans un autre)

J'apprécierais n'importe quelle suddgestion. Je vous remercie!

Répondre

2

Il y a énormément d'informations sur le sujet. Pour commencer, passez à travers http://static.zend.com/topics/Mobile-web-app-with-ZF.pdf

En résumé, vous devez utiliser ContextSwitch.

  1. Vous créez un paramètre plugin qui définit des contextes disponibles et le format dérivés de Zend_Http_UserAgent.
  2. Dans le contrôleur, vous décrivez les actions qui sont éligibles pour ces contextes.
  3. Créez des vues différentes pour ces actions.
2

Vous pouvez utiliser ceci pour changer la vue depuis le contrôleur
$this->render('actionName'); Ou, alternativement, vous pouvez appeler un script de vue directement en appelant $this->renderScript('path/to/viewscript.phtml');

Vous pouvez obtenir plus de détails sur les méthodes render() et renderScript() à partir de here.
Vérifiez également cet article Assigning Values to Views when using $this->renderScript

Questions connexes