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>Membuat Halaman <tt>EditPost</tt></h1>
4
 
5
<p>
6
Halaman <tt>EditPost</tt> disediakan bagi para pembuat dan administrator untuk mengedit tulisan blog yang sudah ada. Seperti halaman <a href="?page=Day4.CreateNewPost">NewPost</a> , ia menampilkan sebuah formulir untuk mengumpulkan perubahan terhadap judul dan konten tulisan.
7
</p>
8
 
9
<p>
10
Kita membuat dua file <tt>protected/pages/posts/EditPost.page</tt> dan <tt>protected/pages/posts/EditPost.php</tt> masing-masing untuk menyimpan template halaman dan kelas halaman.
11
</p>
12
 
13
<h2>Membuat Template Halaman</h2>
14
<p>
15
Template halaman <tt>EditPost</tt> sangat mirip dengan template <tt>NewPost</tt>. Hanya judul halaman dan tombol yang berbeda.
16
</p>
17
 
18
<com:TTextHighlighter CssClass="source" Language="prado">
19
&lt;%@ Title="My Blog - Edit Post" %>
20
 
21
&lt;com:TContent ID="Main">
22
 
23
<h1>Edit Post</h1>
24
 
25
<span>Title:</span>
26
&lt;com:TRequiredFieldValidator
27
	ControlToValidate="TitleEdit"
28
	ErrorMessage="Please provide a title."
29
	Display="Dynamic" />
30
<br/>
31
&lt;com:TTextBox ID="TitleEdit" Columns="50" />
32
 
33
<br/>
34
<span>Content:</span>
35
&lt;com:TRequiredFieldValidator
36
	ControlToValidate="ContentEdit"
37
	ErrorMessage="Please provide content."
38
	Display="Dynamic" />
39
<br/>
40
&lt;com:THtmlArea ID="ContentEdit" />
41
 
42
<br/>
43
&lt;com:TButton Text="Save" OnClick="saveButtonClicked" />
44
 
45
&lt;/com:TContent>
46
</com:TTextHighlighter>
47
 
48
 
49
<h2>Membuat Kelas Halaman</h2>
50
 
51
<p>
52
Kelas halaman <tt>EditPage</tt> lebih kompleks dibanding <tt>NewPage</tt> karena ia perlu mengambil data tulisan yang ditetapkan terlebih dulu. Ia juga perlu melakukan pemeriksaan otorisasi tambahan. Ada kalanya ia perlu memastikan bahwa tulisan hanya bisa diedit oleh pembuat atau administrator. Pemeriksaan otorisasi sudah disediakan oleh PRADO.
53
</p>
54
 
55
<com:TTextHighlighter CssClass="source" Language="php">
56
class EditPost extends TPage
57
{
58
	/**
59
	 * Menginisialisasi input dengan data tulisan yang sudah ada.
60
	 * Metode ini dipanggil oleh kerangka kerja saat halaman diinisialisasi.
61
	 * @param parameter event campuran
62
	 */
63
	public function onInit($param)
64
	{
65
		parent::onInit($param);
66
		// Menambil data pengguna yang sudah ada. Ini sama dengan:
67
		// $postRecord=$this->getPost();
68
		$postRecord=$this->Post;
69
		// Pemeriksaan otorisasi: hanya pembuat atau administrator dapat mengedit tulisan
70
		if($postRecord->author_id!==$this->User->Name && !$this->User->IsAdmin)
71
			throw new THttpException(500,'You are not allowed to edit this post.');
72
 
73
		if(!$this->IsPostBack)  // jika halaman pertama kali diminta
74
		{
75
			// Mempopulasikan kontrol input dengan data tulisan yang sudah ada
76
			$this->TitleEdit->Text=$postRecord->title;
77
			$this->ContentEdit->Text=$postRecord->content;
78
		}
79
	}
80
 
81
	/**
82
	 * Menyimpan tulisan jika semua input sudah benar.
83
	 * Metode ini merespon event OnClick pada tombol "Save".
84
	 * @param pengirim event campuran
85
	 * @param parameter event campuran
86
	 */
87
	public function saveButtonClicked($sender,$param)
88
	{
89
		if($this->IsValid)  // jika semua validasi sukses
90
		{
91
			// Mengambil data pengguna yang sudah ada. Ini sama dengan:
92
			// $postRecord=$this->getPost();
93
			$postRecord=$this->Post;
94
 
95
			// Mengambil data input
96
			$postRecord->title=$this->TitleEdit->SafeText;
97
			$postRecord->content=$this->ContentEdit->SafeText;
98
 
99
			// menyimpan ke database via mekanisme Rekaman Aktif
100
			$postRecord->save();
101
 
102
			// mengalihkan browser ke halaman ReadPost
103
			$url=$this->Service->constructUrl('posts.ReadPost',array('id'=>$postRecord->post_id));
104
			$this->Response->redirect($url);
105
		}
106
	}
107
 
108
	/**
109
	 * Mengembalikan data tulisan yang akan diedit.
110
	 * @return PostRecord data tulisan yang akan diedit.
111
	 * @throws THttpException jika data tulisan tidak ada.
112
	 */
113
	protected function getPost()
114
	{
115
		// ID tulisan yang diedit dikirimkan via parameter GET 'id'
116
		$postID=(int)$this->Request['id'];
117
		// gunakan Rekaman Aktif untuk mencari ID tulisan tertentu
118
		$postRecord=PostRecord::finder()->findByPk($postID);
119
		if($postRecord===null)
120
			throw new THttpException(500,'Post is not found.');
121
		return $postRecord;
122
	}
123
}
124
</com:TTextHighlighter>
125
 
126
<h2>Pengujian</h2>
127
<p>
128
Untuk menguji halaman <tt>EditPost</tt>, masuk lebih dulu dan kemudian kunjungi URL berikut: <tt>http://hostname/blog/index.php?page=EditPost&id=1</tt>. URL ini juga bisa dijangkau dengan mengklik link <tt>Edit</tt> pada halaman rician tulisan.
129
</p>
130
 
131
<img src="<%~ output4.gif %>" class="output" />
132
 
133
</com:TContent>