forked from jelix/jelix-manuel-fr
-
Notifications
You must be signed in to change notification settings - Fork 0
/
traitements_communs.gtw
135 lines (95 loc) · 4.57 KB
/
traitements_communs.gtw
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
~~LANG:EN@enman:common-processes~~
Il y a plusieurs types de traitements : les traitements métiers, et ceux dédiés
à la génération de la page web. Pour les traitements métiers, vous utiliserez
des classes métiers, des classes services, des daos. Celles-ci pouvant être
utilisable par tous les modules, c'est un premier moyen de réaliser des
traitements métiers qui puissent être réutilisables. Voir [[/utilisation-classes]].
Pour ce qui concerne la génération d'une page, c'est un peu plus complexe que ça
car il y a plusieurs façons de faire. Nous sommes donc devant le cas suivant :
nous avons plusieurs pages qui ont des parties communes. Cela peut être par
exemple un bandeau, un pied de page, un menu sur le coté etc.. Il peut y avoir
aussi quelques pages qui ont un peu plus que ça en commun. Voici diverses
solutions selon le contexte.
* Utilisation de méthodes privées de contrôleurs
* Héritage de contrôleurs
* Utilisation d'une réponse commune
* Utilisation de zones
===== Méthodes privées de contrôleurs =====
Si la similitude des pages se résume à quelques actions qui sont dans un même
contrôleur, alors vous pouvez utiliser une méthode privée/protégée, qui va faire
le travail commun à toutes ces actions.
<code php>
class defaultCtrl extends jController {
protected function common(){
$rep = $this->getResponse('html');
$rep->title = 'Même titre pour tous le monde';
$rep->body->assign('menu', '<ul><li>item 1</li><li>item 2</li></ul>');
return $rep;
}
function index(){
$rep = $this->common();
$rep->body->assign('MAIN','<p>Bienvenue sur cette application de test</p>');
return $rep;
}
function liste(){
$rep = $this->common();
$rep->body->assign('MAIN','<ul><li>une</li><li>liste</li></ul>');
return $rep;
}
}
</code>
Dans cette exemple, les deux actions index et liste font appel à une méthode
commune qui va réaliser le travail commun.
===== Héritage de contrôleurs =====
Si plusieurs actions de plusieurs contrôleurs ont des traitements en commun,
alors vous pouvez utiliser le mécanisme d'héritage objet. C'est à dire réaliser
un contrôleur de base, qui ne sera pas utilisé directement, mais dont hériteront
les contrôleurs concernés.
Voici un exemple de contrôleur de base, dans le fichier
controllers/myBaseController.php :
<code php>
class myBaseController extends jController {
protected function common(){
$rep = $this->getResponse('html');
$rep->title = 'Même titre pour tout le monde';
$rep->body->assign('menu', '<ul><li>item 1</li><li>item 2</li></ul>');
return $rep;
}
}
</code>
Et dans vos contrôleurs :
<code php>
include jApp::coord()->getModulePath('monModule').'controllers/myBaseController.php';
class defaultCtrl extends myBaseController {
function index(){
$rep = $this->common();
$rep->body->assign('MAIN','<p>Bienvenue sur cette application de test</p>');
return $rep;
}
function liste(){
$rep = $this->common();
$rep->body->assign('MAIN','<ul><li>une</li><li>liste</li></ul>');
return $rep;
}
}
</code>
Notez l'include et le //extends myBaseController//;
Bien sûr, le contrôleur de base peut contenir des propriétés, d'autres méthodes,
voire des méthodes d'actions. C'est à dire que vous pouvez ainsi avoir plusieurs
contrôleurs qui possèdent au final des actions communes (qui peuvent elle-même
tenir compte de propriétés ou d'autres méthodes pour gérer des différences).
Vous pouvez faire par exemple un contrôleur de base, qui définit une série
d'actions : //liste//, //creation//, //modification//, //suppression//. Ces
actions se basant sur des propriétés pour savoir les daos et les templates à
utiliser. Ainsi, il est aisé de réaliser plusieurs contrôleurs, héritant de ce
contrôleur de base, et n'ayant plus qu'à indiquer dans des propriétés les daos
et les templates. De quoi ainsi se faire une administration basique assez
rapidement (c'est d'ailleurs ce que fait le contrôleur générique
[[controleurs/crud|jDaoCrudController]])
===== Utilisation de zones =====
Il se peut qu'un ensemble de pages possède une ou plusieurs zones identiques,
sans que cela soit général à tout le site. Vous pouvez alors [[zones|créer des zones]].
===== Personnalisation de réponse commune =====
Créer son propre objet réponse est un autre moyen de factoriser les traitements
dédiés à la génération du contenu final. Voir le chapitre sur la
[[/vues/reponse-generale-personnalisee|création de réponses générales personnalisées]]