Subversion-Projekte lars-tiefland.prado

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
1 lars 1
<com:TContent ID="Main">
2
 
3
<h1>Création de la page d'administration des utilisateurs <tt>AdminUser</tt></h1>
4
 
5
<p>
6
La page <tt>AdminUser</tt> affiche la liste de tous les comptes utilisateurs, ainsi l'administrateur peut effectuer les tâches de maintenance. Par simplification, les tâches administratives pour notre blog seront la mise à jour des utilisateurs et la suppression.
7
</p>
8
 
9
 
10
<p>
11
Nous allons lister les utilisateurs dans une table HTML. Chaque ligne correspondra à un compte utilisateur, les colonnes suivantes seront affichées:
12
</p>
13
 
14
<ul>
15
<li>Pseudo - affiche le pseudo de l'utilisateur. Dans chaque cellule un lien sera affiché qui nous dirigera vers la page <a href="?page=Day3.CreateEditUser">EditUser</a>.</li>
16
<li>Email - affiche l'email.</li>
17
<li>Administrateur - indique si le compte est celui d'un administrateur.</li>
18
<li>Commande - affiche une colonne de bouton "supprimer". En cliquant sur un de ces boutons, la suppression du compte sera effectuée.</li>
19
</ul>
20
 
21
<p>
22
Nous créons deux fichiers <tt>protected/pages/users/AdminUser.page</tt> et <tt>protected/pages/users/AdminUser.php</tt> qui contiendront respectivement le gabarit et la classe.
23
</p>
24
 
25
<h2>Création du gabarit</h2>
26
<p>
27
Nous allons utiliser un contrôle <a href="http://www.pradosoft.com/demos/quickstart/?page=Controls.DataGrid">TDataGrid</a> pour afficher les données. Suivant l'analyse précédente, nous allons configurer quatre colonnes:
28
</p>
29
 
30
<ul>
31
<li><a href="http://www.pradosoft.com/docs/classdoc/THyperLinkColumn">THyperLinkColumn</a> affiche le pseudo. L'URL sera construite suivant les instructions de la propriété <tt>DataNavigateUrlFormatString</tt>.</li>
32
<li><a href="http://www.pradosoft.com/docs/classdoc/TBoundColumn">TBoundColumn</a> affiche l'email.</li>
33
<li><a href="http://www.pradosoft.com/docs/classdoc/TCheckBoxColumn">TCheckBoxColumn</a> utilise des cases à cocher pour indiquer si le compte est un compte administrateur.</li>
34
<li><a href="http://www.pradosoft.com/docs/classdoc/TButtonColumn">TButtonColumn</a> affiche un bouton "Supprimer".</li>
35
</ul>
36
 
37
 
38
<p>Le gabarit complet est affiché ci-après:</p>
39
 
40
 
41
<com:TTextHighlighter CssClass="source" Language="prado">
42
&lt;%@ Title="Mon Blog - Administration des comptes utilisateurs" %>
43
 
44
&lt;com:TContent ID="Main">
45
 
46
<h1>Administration des comptes utilisateurs</h1>
47
 
48
<a href="&lt;%= $this->Service->constructUrl('users.NewUser')%>">Créer un nouvel utilisateur</a>
49
<br/>
50
 
51
&lt;com:TDataGrid ID="UserGrid"
52
    DataKeyField="username"
53
    AutoGenerateColumns="false"
54
    OnDeleteCommand="deleteButtonClicked">
55
 
56
    &lt;com:THyperLinkColumn
57
        HeaderText="Pseudo"
58
        DataTextField="username"
59
        DataNavigateUrlField="username">
60
        &lt;prop:DataNavigateUrlFormatString>#
61
          $this->Service->constructUrl('users.EditUser',array('username'=>{0}))
62
        &lt;/prop:DataNavigateUrlFormatString>
63
    &lt;/com:THyperLinkColumn>
64
 
65
    &lt;com:TBoundColumn
66
        HeaderText="Email"
67
        DataField="email" />
68
 
69
    &lt;com:TCheckBoxColumn
70
        HeaderText="Administrateur"
71
        DataField="role" />
72
 
73
    &lt;com:TButtonColumn
74
        HeaderText="Commande"
75
        Text="Supprimer"
76
        ButtonType="PushButton"
77
        CommandName="delete" />
78
 
79
&lt;/com:TDataGrid>
80
 
81
&lt;/com:TContent>
82
</com:TTextHighlighter>
83
 
84
 
85
<h2>Création du fichier de classe</h2>
86
 
87
 
88
<p>
89
Dans le gabarit précédent, le bouton <tt>OnDeleteCommand</tt> déclenche l'évènement <tt>deleteButtonClicked()</tt> que nous devons implémenter dans le fichier de classe. De plus, la grille de données doit être renseignée avec les informations utilisateurs lorsque la page est initialisée. Nous écrivons donc notre fichier de classe comme ci-dessous :
90
</p>
91
 
92
<com:TTextHighlighter CssClass="source" Language="php">
93
class AdminUser extends TPage
94
{
95
    /**
96
     * Remplis la grille avec la liste des utilisateurs.
97
     * Cette méthode est appelée lors de l'initialisation de la page.
98
     * @param mixed param : paramètres de l'évènement
99
     */
100
    public function onInit($param)
101
    {
102
        parent::onInit($param);
103
        // lit tout les comptes utilisateurs
104
        $this->UserGrid->DataSource=UserRecord::finder()->findAll();
105
        // et les associes à la grille
106
        $this->UserGrid->dataBind();
107
    }
108
 
109
    /**
110
     * Supprime un compte utilisateur.
111
     * Cette méthode répond à l'évènement OnDeleteCommand.
112
     * @param mixed sender : celui qui a généré l'évènement
113
     * @param mixed param : paramètres de l'évènement
114
     */
115
    public function deleteButtonClicked($sender,$param)
116
    {
117
        // récupère l'identifiant du bouton sur lequel on a cliqué
118
        $item=$param->Item;
119
        // récupère auprès de la grille la clé primaire correspondante à l'identifiant
120
        $username=$this->UserGrid->DataKeys[$item->ItemIndex];
121
        // supprime le compte utilisateur en utilisant la clé primaire
122
        UserRecord::finder()->deleteByPk($username);
123
    }
124
}
125
</com:TTextHighlighter>
126
 
127
<p>
128
Dans le code précédent, la méthode <tt>deleteButtonClicked()</tt> est appelée quand on clique sur le bouton "Supprimer". Pour savoir à quelle ligne appartenait le bouton, nous utilisons la propriété <tt>Item.ItemIndex</tt> du paramètre de l'évènement. Avec cet index, nous recherchons quelle est la clé primaire de la ligne grâce à la propriété <tt>DataKeys</tt>.
129
Dans le code précédent, la méthode <tt>deleteButtonClicked()</tt> est appelée quand on clique sur le bouton "Supprimer". Pour savoir à quelle ligne appartenait le bouton, nous utilisons la propriété <tt>Item.ItemIndex</tt> du paramètre de l'évènement. Avec cet index, nous recherchons quelle est la clé primaire de la ligne grâce à la propriété <tt>DataKeys</tt>.
130
</p>
131
 
132
<com:TipBox>
133
Tous les <a href="http://www.pradosoft.com/docs/classdoc/TDataBoundControl">contrôles liés</a> sont basé sur le même modèle. C'est à dire, définition de la propriété <tt>DataSource</tt> pour savoir d'où proviennent les données et appel à la méthode <tt>dataBind()</tt> pour effectivement lier les données au contrôle.
134
</com:TipBox>
135
 
136
<h2>Test</h2>
137
<!-- <h2>Testing</h2> -->
138
<p>
139
Pour tester notre page <tt>AdminUser</tt>, nous naviguons à l'adresse <tt>http://hostname/blog/index.php?page=users.AdminUser</tt>. Il peut vous être demandé de vous connecter en tant qu'administrateur auparavant si ce n'est déjà fait. Le résultat suivant apparaitra.
140
</p>
141
 
142
<img src="<%~ output3.gif %>" class="output" />
143
 
144
</com:TContent>