Bonjour,
J'ai réalisé un système de news avec une vue partagée et je me demande si l'organisation que j'ai utilisé est "correcte" (ie dans l'esprit du framework, propre, facilement maintenable).
Le système en lui même est simple : des news visible par tous le monde et une interface de gestion pour l'admin.
J'ai opté pour l'organisation suivante :
- Controller index avec les actions index, add, modify et delete qui permettent respectivement d'afficher les news, d'ajouter une news, de modifier une news et enfin de supprimer une news.
- Controller admin avec les actions index, news et newslist.
L'index contient un lien qui pointe vers l'action news. L'action news contient deux liens : un vers ajouter news qui pointe vers index/add et un vers newslist. Newslist affiche les news (tout comme index/index) en ajoutant deux liens supplémentaires Modifier la news (index/modify) et Supprimer la news (index/delete).
En résumé, on accède aux news de la façon suivante :
- index/index pour les utilisateurs normaux.
- admin/index pour l'admin -> Clic -> admin/news -> Clic -> admin/newslist.
Pour ceux qui ont suivi, le script de vue qui affiche les news est appelé deux fois. J'ai donc gérer ça de la façon suivante :
- Dans l'action index du controller index : Récupération des news par le modèle et affichage dans la vue
- Dans l'action newslist du controlleur admin : Récupération du nom du controlleur et nom de l'action et passage de ces valeurs dans la vue. Ces variables servent ensuite à modifier la vue pour afficher les liens modifier news et supprimer news.
- Dans la vue de newslist : appel à l'action index du controlleur index.
- Dans la vue de l'action index du controlleur index : l'affichage des news :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 <h1>News</h1> <?php foreach($this->news as $news) : /* Formatage de la date pour son affichage */ $dateString = $this->escape($news->date); // Récupération de la date en BDD sous forme de string $dateObject = new Zend_Date($dateString); // Création d'un objet Zend_Date $date = $dateObject->toString("dd MMM YYYY"); // Formatage de la date selon le format désiré ?> <div class="news"> <?php echo $this->escape($news->title); ?> <?php echo $date ?> <?php if($this->controller == 'admin' AND $this->action == 'newslist') { ?> <a href="<?php echo $this->url(array('controller'=>'index','action'=>'modify', 'id'=>$news->id));?>">Modifier news</a> <a href="<?php echo $this->url(array('controller'=>'index','action'=>'delete', 'id'=>$news->id));?>">Supprimer news</a> <?php } ?> <?php echo $this->escape($news->content); ?> </div> <?php endforeach; ?>
Je trouve que la vue n'est pas très lisible notamment à cause des instructions conditionnelles ce qui m'amène à me demander si j'ai fait les bons choix de conception.
- Est ce que j'ai bien géré la vue partagée ou existe-t-il de meilleures méthodes ?
- Est ce qu'il ne serait pas plus simple de faire pointer le lien de admin/news directement vers index/index ?
En bref, comment gérer vous ce type de problème dans vos projets ? J'aimerais que le code soit facilement maintenable.
Merci à vous
Partager