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 modification d'un message <tt>EditPost</tt></h1>
4
 
5
 
6
<p>
7
La page <tt>EditPost</tt> est fournie aux auteurs et administrateurs pour modifier les messages. Comme la page <a href="?page=Day4.CreateNewPost">NewPost</a>, elle affiche un formulaire permettant de modifier les données d'un message.
8
</p>
9
 
10
 
11
<p>
12
Nous créons deux fichiers <tt>protected/pages/posts/EditPost.page</tt> et <tt>protected/pages/posts/EditPost.php</tt> contenant respectivement le gabarit et la classe de notre page.
13
</p>
14
 
15
<h2>Création du gabarit</h2>
16
<p>
17
Le gabarit de la page <tt>EditPost</tt> est très proche de celui de la page <tt>NewPost</tt> template. Seul le titre et le texte du bouton sont différents.
18
</p>
19
 
20
<com:TTextHighlighter CssClass="source" Language="prado">
21
&lt;%@ Title="Mon Blog - Modification Message" %>
22
 
23
&lt;com:TContent ID="Main">
24
 
25
<h1>Modification message</h1>
26
 
27
<span>Titre:</span>
28
&lt;com:TRequiredFieldValidator
29
	ControlToValidate="TitleEdit"
30
	ErrorMessage="Veuillez indiquer un titre."
31
	Display="Dynamic" />
32
<br/>
33
&lt;com:TTextBox ID="TitleEdit" Columns="50" />
34
 
35
<br/>
36
<span>Message:</span>
37
&lt;com:TRequiredFieldValidator
38
	ControlToValidate="ContentEdit"
39
	ErrorMessage="Veuillez indiquer le contenu du message."
40
	Display="Dynamic" />
41
<br/>
42
&lt;com:THtmlArea ID="ContentEdit" />
43
 
44
<br/>
45
&lt;com:TButton Text="Enregistrer" OnClick="saveButtonClicked" />
46
 
47
&lt;/com:TContent>
48
</com:TTextHighlighter>
49
 
50
 
51
<h2>Création du fichier de classe</h2>
52
 
53
 
54
<p>
55
La classe de <tt>EditPage</tt> est un peu plus complexe que celle de la page <tt>NewPage</tt> parce qu'elle doit lire les informations auparavant. Elle doit aussi vérifier les autorisations. En particulier, elle doit s'assurer que le message ne puisse être modifié que par l'auteur ou par un administrateur. Ces vérifications d'autorisation ne sont pas fournies par PRADO.
56
</p>
57
 
58
<com:TTextHighlighter CssClass="source" Language="php">
59
class EditPost extends TPage
60
{
61
	/**
62
	 * initialise les contrôles de saisies avec les données du message.
63
	 * cette méthode est appelée lors de l'initialisation de la page
64
	 * @param mixed param : paramètres de l'évènement
65
	 */
66
	public function onInit($param)
67
	{
68
		parent::onInit($param);
69
		// récupère les données de l'utilisateur. Equivalent à:
70
		// $postRecord=$this->getPost();
71
		$postRecord=$this->Post;
72
		// vérification des droits: seul l'auteur ou un administrateur peuvent modifier le message
73
		if($postRecord->author_id!==$this->User->Name && !$this->User->IsAdmin)
74
			throw new THttpException(500,'Vous n êtes pas autoriser à modifier ce message.');
75
 
76
		if(!$this->IsPostBack)  // est-ce le premier appel à la page
77
		{
78
			// rempli les contrôles avec les données du message
79
			$this->TitleEdit->Text=$postRecord->title;
80
			$this->ContentEdit->Text=$postRecord->content;
81
		}
82
	}
83
 
84
	/**
85
	 * Enregistre si toutes les validations sont Ok
86
	 * cette méthode répond à l'évènement OnClick du bouton "Enregistrer".
87
	 * @param mixed sender : celui qui a généré l'évènement
88
	 * @param mixed param : paramètres de l'évènement
89
	 */
90
	public function saveButtonClicked($sender,$param)
91
	{
92
		if($this->IsValid)  // toutes les validations sont ok ?
93
		{
94
			// récupère les données de l'utilisateur. Equivalent à:
95
			// $postRecord=$this->getPost();
96
			$postRecord=$this->Post;
97
 
98
			// affecte les données saisies aux champs de la BDD
99
			$postRecord->title=$this->TitleEdit->SafeText;
100
			$postRecord->content=$this->ContentEdit->SafeText;
101
 
102
			// enregistre les données par la méthode save de l'Active Record
103
			$postRecord->save();
104
 
105
			// redirige le navigateur vers la page ReadPost
106
			$url=$this->Service->constructUrl('posts.ReadPost',array('id'=>$postRecord->post_id));
107
			$this->Response->redirect($url);
108
		}
109
	}
110
 
111
	/**
112
	 * retourne les données du message devant être modifiées.
113
	 * @return PostRecord les données devant être modifiés.
114
	 * @throws THttpException si le message est inexistant.
115
	 */
116
	protected function getPost()
117
	{
118
		// l'ID du message devant être modifié passé par un paramètre GET
119
		$postID=(int)$this->Request['id'];
120
		// utilise Active Record pour lire le message correspondant à cet ID
121
		$postRecord=PostRecord::finder()->findByPk($postID);
122
		if($postRecord===null)
123
			throw new THttpException(500,'Message inexistant.');
124
		return $postRecord;
125
	}
126
}
127
</com:TTextHighlighter>
128
 
129
<h2>Test</h2>
130
<p>
131
Pour tester notre page <tt>EditPost</tt>, authentifiez-vous auparavant et allez à l'URL <tt>http://hostname/blog/index.php?page=EditPost&id=1</tt>. Cette URL peut aussi être atteinte par le bouton <tt>Modifier</tt> de notre page de détail.
132
</p>
133
 
134
<img src="<%~ output4.gif %>" class="output" />
135
 
136
</com:TContent>