Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 18-10-2011 20:05:51

devlop78
Membre
Date d'inscription: 19-05-2011
Messages: 13

Diverses intégrations dans le Layout

Bonjour à tous,

Je me retrouve avec des problématiques, surtout dues aux multiples possibilités offertes par la programmation elle-même et le framework.

Voilà deux cas de figures :

- Un contenu dynamiquement chargé, mais statique par rapport au layout (ex : un top 10 des articles qui s'affiche sur toutes les pages d'un layout (pas forcément dans tous les layouts), au même endroit)

- Un contenu dynamiquement chargé, et dynamique (par exemple une zone réservée dans le layout - appelé placeholder en général, si je ne me trompe, mais chargée dynamiquement par une action).

Dans le premier cas, le layout est "seul" concerné. Or, il n'est pas censé faire :

Code:

$table = new Table_Articles;
$result = $table->getTop10();
foreach ....

En plus, si le résultat veut être repris par un autre layout, ce n'est pas très DRY ^^. Et là, j'ai prévu une méthode par le modèle, mais on peut faire aussi la requête directement (quand je dis "on peut" c'est "on peut dans l'exemple") : $result = $table->fetchAll($table->select()->where('created_by ...')->...)
J'ai vu l'utilisation de l'aide de vues action(), mais j'avoue ne pas être séduit. Pour moi, un couple controller/action répond à un URL, or déclenché une action comme ça me gène. Mais peut-être me trompe-je. De plus, ce même controller/action est du coup appelable depuis un url, sans parler des performances pointées par un autre article.

Si j'utilise un plugin de frontController, ce qui me semble déjà mieux, celui-ci peut être chargé pour rien s'il n'est pas utilisé dans un layout. En fait, il faudrait presque un controller de layout wink Donc éventuellement, je vois la solution (dans le layout) :

Code:

$top10 = new My_Top(array('num'=>10));
foreach ($top10->datas as ...)

ou prévoir une vue commune pour ce composant avec

Code:

echo $top10->render()

A ce moment, juste le CSS fait la différence. On peut aussi aller plus loin avec des décorateurs, mais on va faire KISS, on développe pas un composant pour toute une communauté là.

Alors, pas facile, hein.

Pour la deuxième problématique, j'ai souvent dans la tête que 1 vue est toujours associée, à peu de chose près, à 1 composant supérieur. Surement à tort. Ce composant supérieur contrôle les données, et évite aussi que l'on se préoccupe du chemin de la vue. C'était la parenthèse. Imaginons que je veuille injecter un code HTML dans le layout. Bon, à ce moment, je peux faire depuis une vue

Code:

$this->monCodeHTML = "<h1>Mon Titre <a href=''>Avec un lien</a></h1>";

Ok. Mais imaginons que je veuille dynamiquement dire à mon layout de charger une donnée à formater, ou un composant. Comme je l'ai dit, cela me gène un peu de dire à mon layout : voilà je te donne un tableau de données, et tu le formates. Parce que venant de 35 actions différentes, ça me parait pas fiable. Le plus sûr serait pour moi de dire : charge ce composant avec ces données. Mais là je suis quand même perdu. Comme je le dis plus haut, il y a tellement de façons de faire.

Code:

$composant = new My_Composant_X;
$composant->....

$this->view->layoutPlaceHolder24 = $composant

Coté Layout :

Code:

if (isset($this->layoutPlaceHolder24) && $this->layoutPlaceHolder24 instanceof Zend_Composant_Abstract)
{
  echo $this->layoutPlaceHolder24->render();
}

Pour terminer, le fameux (dans le layout) $this->layout()->machin me semble l'un des pires. Car cela signifie que l'action ou la vue doit bien enregistrer dans "machin" le contenu à injecter. Et si je mets "machibn" je vais mettre 30 minutes à déboguer pour voir ce qui cloche, alors que si c'est un composant externe qui contrôle, il peut envoyer une exception pour dire "Mais de quoi tu me parles, là ?".

Voilà Voilà, des retours d'expérience et d'avis (pour ceux qui ont eu le courage de lire) ?

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