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 nouveau message <tt>NewPost</tt></h1>
4
 
5
<p>
6
La page <tt>NewPost</tt> permet aux utilisateurs authentifiés de créer des nouveaux messages. Elle doit afficher un formulaire permettant la saisie des informations du message.
7
</p>
8
 
9
 
10
<p>
11
Parce que la page <tt>NewPost</tt> ne peut être vue que par les utilisateurs authentifiés, nous ajoutons un fichier de configuration de page <tt>config.xml</tt> dans le dossier <tt>protected/pages/posts</tt>. Ce fichier indique que seuls les utilisateurs authentifiés peuvent voir les pages <tt>NewPost</tt> et <tt>EditPost</tt> qui sera implémentée dans la section suivante. Tous les autres utilisateurs n'ont accès qu'aux pages <tt>ListPost</tt> et <tt>ReadPost</tt>.
12
</p>
13
 
14
 
15
<com:TTextHighlighter CssClass="source" Language="xml">
16
<?xml version="1.0" encoding="utf-8"?>
17
<configuration>
18
  <authorization>
19
    <allow pages="NewPost,EditPost" users="@" />
20
    <allow pages="ListPost,ReadPost" />
21
    <deny users="*" />
22
  </authorization>
23
</configuration>
24
</com:TTextHighlighter>
25
 
26
<com:TipBox>
27
	Il est souvent utile de démarrer les règles d'autorisation par un <tt>&lt;deny users="*"&gt;</tt>, puis, de le compléter en donnant pas à pas les accès aux différentes pages à l'aides de règles <tt>allow</tt> supplémentaires
28
</com:TipBox>
29
<p>
30
Vu le nombre grandissant de pages, nous allons modifier le pied de page de notre <tt>gabarit principal</tt> pour qu'il inclus des liens vers : la page d'accueil, la page nouvel utilisateur <a href="?page=Day3.CreateNewUser">NewUser</a> (visible seulement par les administrateurs), et la page à venir : nouveau message <tt>NewPost</tt> (visible seulement par les utilisateurs authentifiés).
31
</p>
32
 
33
<com:TTextHighlighter CssClass="source" Language="prado">
34
<div id="footer">
35
&lt;com:THyperLink Text="Accueil"
36
	NavigateUrl="&lt;%= $this->Service->DefaultPageUrl %>" />
37
 
38
&lt;com:THyperLink Text="Nouveau message"
39
	NavigateUrl="&lt;%= $this->Service->constructUrl('posts.NewPost') %>"
40
	Visible="&lt;%= !$this->User->IsGuest %>" />
41
 
42
&lt;com:THyperLink Text="Nouvel utilisateur"
43
	NavigateUrl="&lt;%= $this->Service->constructUrl('users.NewUser') %>"
44
	Visible="&lt;%= $this->User->IsAdmin %>" />
45
...autres liens...
46
</div>
47
</com:TTextHighlighter>
48
 
49
<p>
50
Nous allons maintenant créer deux fichiers <tt>protected/pages/posts/NewPost.page</tt> et <tt>protected/pages/posts/NewPost.php</tt> contenant respectivement le gabarit et la classe de notre page.
51
</p>
52
 
53
 
54
<h2>Création du gabarit</h2>
55
<p>
56
Le gabarit de <tt>NewPost</tt> contient une référence à un <a href="http://www.pradosoft.com/demos/quickstart/?page=Controls.TextBox">TTextBox</a> pour saisir le titre de notre message et à un <a href="http://www.pradosoft.com/demos/quickstart/?page=Controls.HtmlArea">THtmlArea</a> pour saisir le contenu. Ce dernier est un éditeur WYSIWYG HTML. Pour contrôler les valeurs saisies, nous associons des validateurs aux contrôles précédents.
57
</p>
58
 
59
 
60
<com:TTextHighlighter CssClass="source" Language="prado">
61
&lt;%@ Title="Mon Blog - Nouveau Message" %>
62
 
63
&lt;com:TContent ID="Main">
64
 
65
<h1>Création nouveau message</h1>
66
 
67
<span>Titre:</span>
68
&lt;com:TRequiredFieldValidator
69
	ControlToValidate="TitleEdit"
70
	ErrorMessage="Veuillez indiquer un titre."
71
	Display="Dynamic" />
72
<br/>
73
&lt;com:TTextBox ID="TitleEdit" Columns="50" />
74
 
75
<br/>
76
<span>Message:</span>
77
&lt;com:TRequiredFieldValidator
78
	ControlToValidate="ContentEdit"
79
	ErrorMessage="Veuillez indiquer le contenu du message."
80
	Display="Dynamic" />
81
<br/>
82
&lt;com:THtmlArea ID="ContentEdit" />
83
 
84
<br/>
85
&lt;com:TButton Text="Ajouter" OnClick="createButtonClicked" />
86
 
87
&lt;/com:TContent>
88
</com:TTextHighlighter>
89
 
90
 
91
<h2>Création du fichier de classe</h2>
92
<p>
93
Dans le gabarit précédent, nous voyons que la fonction principale de notre page est l'appel de la méthode <tt>createButtonClicked()</tt> implémenté par un évènement <tt>OnClick</tt> attaché au bouton <tt>Ajouter</tt>.
94
</p>
95
 
96
<com:TTextHighlighter CssClass="source" Language="php">
97
class NewPost extends TPage
98
{
99
	/**
100
	 * création d'un nouveau message si toutes les données sont valides.
101
	 * cette méthode est appelée par l'évènement OnClick du bouton "Ajouter".
102
	 * @param mixed sender : celui qui a généré l'évènement
103
	 * @param mixed param : paramètres de l'évènement
104
	 */
105
	public function createButtonClicked($sender,$param)
106
	{
107
		if($this->IsValid)  // tous les validateurs sont Ok ?
108
		{
109
			// créer un nouvel objet PostRecord avec les données du formulaire
110
			$postRecord=new PostRecord;
111
			// utiliser SafeText à la place de Text évite les attaques XSS
112
			$postRecord->title=$this->TitleEdit->SafeText;
113
			$postRecord->content=$this->ContentEdit->SafeText;
114
			$postRecord->author_id=$this->User->Name;
115
			$postRecord->create_time=time();
116
			$postRecord->status=0;
117
 
118
			// enregistre les données dans la BDD par la méthode save de l'Active Record
119
			$postRecord->save();
120
 
121
			// redirige le navigateur vers le message nouvellement créé
122
			$url=$this->Service->constructUrl('posts.ReadPost',array('id'=>$postRecord->post_id));
123
			$this->Response->redirect($url);
124
		}
125
	}
126
}
127
</com:TTextHighlighter>
128
 
129
<h2>Test</h2>
130
<p>
131
Pour tester notre page <tt>NewPost</tt>, identifiez-vous auparavant et cliquez sur le lien <tt>Nouveau message</tt> dans le pied de page. Le navigateur affiche le résultat suivant avec comme URL <tt>http://hostname/blog/index.php?page=NewPost</tt>.
132
</p>
133
 
134
<com:InfoBox>
135
Quand vous visitez la page <tt>NewPost</tt> pour la première fois, vous pourrez remarquer qu'elle mettra plusieurs secondes avant de s'afficher. Ceci est dû au fait que PRADO a besoin de décompresser et de publier le code javascript et les images pour l'éditeur WYSIWYG du contrôle <tt>THtmlArea</tt>. Ceci est fait une fois pour toutes.
136
</com:InfoBox>
137
 
138
<com:TipBox>
139
Pour tester la fonctionnalité de pagination que nous avons mise en place dans la page <a href="?page=Day4.CreateListPost">ListPost</a>, nous pouvons créer cinq messages ou plus et regardez ce qu'il se passe sur la page d'accueil. Le contrôle <tt>TPager</tt> de la page <tt>ListPost</tt> affiche cinq éléments par page.
140
</com:TipBox>
141
 
142
<img src="<%~ output3.gif %>" class="output" />
143
 
144
</com:TContent>