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>NewPost</tt></h1>
4
 
5
<p>
6
Halaman <tt>NewPost</tt> disediakan untuk mengotentikasi pengguna untuk pembuatan tulisan blog baru. Ia perlu untuk menampilkan formulir yang mengumpulkan informasi mengenai tulisan baru, termasuk judul tulisan dan konten badan tulisan.
7
</p>
8
 
9
<p>
10
Karena <tt>NewPost</tt> hanya bisa diakses oleh pengguna terotentikasi, kita menambahkan file konfigurasi <tt>config.xml</tt> di bawah direktori <tt>protected/pages/posts</tt>. Konfigurasi menetapkan bahwa para pengguna tidak bisa mengakses <tt>NewPost</tt> dan <tt>EditPost</tt> yang akan diperkenalkan dalam bagian berikutnya. Semua pengguna lainnya hanya memiliki akses ke <tt>ListPost</tt> dan <tt>ReadPost</tt>
11
</p>
12
 
13
<com:TTextHighlighter CssClass="source" Language="xml">
14
<?xml version="1.0" encoding="utf-8"?>
15
<configuration>
16
  <authorization>
17
    <deny pages="NewPost,EditPost" users="?" />
18
    <allow pages="ListPost,ReadPost" />
19
    <deny users="*" />
20
  </authorization>
21
</configuration>
22
</com:TTextHighlighter>
23
 
24
<com:TipBox>
25
Selalu menjadi ide yang baik untuk memulai dengan <tt>deny="*"</tt> yang menampung semua aturan dari bawah dan secara bertahap memberikan akses ke halaman dengan aturan tambahan.
26
</com:TipBox>
27
 
28
<p>
29
Karena jumlah halaman kita berkembang, kita ingin memodifikasi  <tt>MainLayout</tt> agar dalam footer pada halaman blog kita ada link ke berbagai halaman, termasuk homepage, halaman <a href="?page=Day3.CreateNewUser">NewUser</a> (hanya terlihat oleh administrator), dan halaman <tt>NewPost</tt> mendatang (hanya terlihat oleh pengguna terotentikasi).
30
</p>
31
 
32
<com:TTextHighlighter CssClass="source" Language="prado">
33
<div id="footer">
34
&lt;com:THyperLink Text="Home"
35
	NavigateUrl="&lt;%= $this->Service->DefaultPageUrl %>" />
36
 
37
&lt;com:THyperLink Text="New Post"
38
	NavigateUrl="&lt;%= $this->Service->constructUrl('posts.NewPost') %>"
39
	Visible="&lt;%= !$this->User->IsGuest %>" />
40
 
41
&lt;com:THyperLink Text="New User"
42
	NavigateUrl="&lt;%= $this->Service->constructUrl('users.NewUser') %>"
43
	Visible="&lt;%= $this->User->IsAdmin %>" />
44
...other links...
45
</div>
46
</com:TTextHighlighter>
47
 
48
<p>
49
Sekarang kita membuat dua file <tt>protected/pages/posts/NewPost.page</tt> dan <tt>protected/pages/posts/NewPost.php</tt> masing-masing untuk menyimpan template halaman dan kelas halaman.
50
</p>
51
 
52
<h2>Membuat Template Halaman</h2>
53
<p>
54
Template halaman <tt>NewPost</tt> berisi <a href="http://www.pradosoft.com/demos/quickstart/?page=Controls.TextBox">TTextBox</a> untuk mengumpulkan judul tulisan dan <a href="http://www.pradosoft.com/demos/quickstart/?page=Controls.HtmlArea">THtmlArea</a> untuk mengumpulkan konten tulisan. Yang terakhir adalah editor HTML WYSIWYG. Guna memastikan bahwa input pengguna sudah benar, kita mengaitkan validator dengan kontrol input ini.
55
</p>
56
 
57
<com:TTextHighlighter CssClass="source" Language="prado">
58
&lt;%@ Title="My Blog - New Post" %>
59
 
60
&lt;com:TContent ID="Main">
61
 
62
<h1>Membuat Tulisan Baru</h1>
63
 
64
<span>Title:</span>
65
&lt;com:TRequiredFieldValidator
66
	ControlToValidate="TitleEdit"
67
	ErrorMessage="Please provide a title."
68
	Display="Dynamic" />
69
<br/>
70
&lt;com:TTextBox ID="TitleEdit" Columns="50" />
71
 
72
<br/>
73
<span>Content:</span>
74
&lt;com:TRequiredFieldValidator
75
	ControlToValidate="ContentEdit"
76
	ErrorMessage="Please provide content."
77
	Display="Dynamic" />
78
<br/>
79
&lt;com:THtmlArea ID="ContentEdit" />
80
 
81
<br/>
82
&lt;com:TButton Text="Create" OnClick="createButtonClicked" />
83
 
84
&lt;/com:TContent>
85
</com:TTextHighlighter>
86
 
87
 
88
<h2>Membuat Kelas Halaman</h2>
89
 
90
<p>
91
Dari template halaman di atas, kita melihat bahwa sebagian besar kita perlu menulis sebuah kelas halaman yang mengimplementasikan pengendali event: <tt>createButtonClicked()</tt> (ditempelkan ke tombo <tt>Create</tt> dalam event <tt>OnClick</tt>).
92
</p>
93
 
94
<com:TTextHighlighter CssClass="source" Language="php">
95
class NewPost extends TPage
96
{
97
	/**
98
	 * Membuat tulisan baru jika semua input benar.
99
	 * Metode ini merespon event OnClick pada tombol "create".
100
	 * @param mixed event sender
101
	 * @param mixed event parameter
102
	 */
103
	public function createButtonClicked($sender,$param)
104
	{
105
		if($this->IsValid)  // bila semua validasi sukses
106
		{
107
			// populasikan obyek PostRecord dengan input pengguna
108
			$postRecord=new PostRecord;
109
			// menggunakan SafeText datipada Text guna menghindari serangan Penaskahan Situs Silang
110
			$postRecord->title=$this->TitleEdit->SafeText;
111
			$postRecord->content=$this->ContentEdit->SafeText;
112
			$postRecord->author_id=$this->User->Name;
113
			$postRecord->create_time=time();
114
			$postRecord->status=0;
115
 
116
			// simpan ke database lewat mekanisme Rekaman Aktif
117
			$postRecord->save();
118
 
119
			// alihkan browser ke halaman tulisan yang baru dibuat
120
			$url=$this->Service->constructUrl('posts.ReadPost',array('id'=>$postRecord->post_id));
121
			$this->Response->redirect($url);
122
		}
123
	}
124
}
125
</com:TTextHighlighter>
126
 
127
<h2>Pengujian</h2>
128
<p>
129
Untuk menguji halaman <tt>NewPost</tt>, masuk lebih dulu dan klik pada link tombol <tt>New Post</tt> dalam footer pada homepage. Browser kita akan menampilkan hasil berikut dengan URL <tt>http://hostname/blog/index.php?page=NewPost</tt>.
130
</p>
131
 
132
<com:InfoBox>
133
Ketika Anda mengunjungi halaman <tt>NewPost</tt> untuk pertama kali, Anda bisa melihat bahwa diperlukan beberapa detik sebelum halaman ditampilkan. Ini dikarenakan PRADO perlu mengurai dan mempublikasikan kode javascript dan gambar untuk kontrol <tt>THtmlArea</tt> yang dipakai dalam halaman. Ini dikerjakan sekali dan untuk semuanya.
134
</com:InfoBox>
135
 
136
<com:TipBox>
137
Untuk menguji fitur lembaran yang kita kembangkan untuk halaman <a href="?page=Day4.CreateListPost">ListPost</a>, kita dapat membuat lima atau lebih tulisan dan melihat apa yang terjadi pada homepage. Lembar dalam <tt>ListPost</tt> menampilkan lima tulisan setiap halamannya.
138
</com:TipBox>
139
 
140
<img src="<%~ output3.gif %>" class="output" />
141
 
142
</com:TContent>