Membuat Halaman NewPost

Halaman NewPost 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.

Karena NewPost hanya bisa diakses oleh pengguna terotentikasi, kita menambahkan file konfigurasi config.xml di bawah direktori protected/pages/posts. Konfigurasi menetapkan bahwa para pengguna tidak bisa mengakses NewPost dan EditPost yang akan diperkenalkan dalam bagian berikutnya. Semua pengguna lainnya hanya memiliki akses ke ListPost dan ReadPost

Selalu menjadi ide yang baik untuk memulai dengan deny="*" yang menampung semua aturan dari bawah dan secara bertahap memberikan akses ke halaman dengan aturan tambahan.

Karena jumlah halaman kita berkembang, kita ingin memodifikasi MainLayout agar dalam footer pada halaman blog kita ada link ke berbagai halaman, termasuk homepage, halaman NewUser (hanya terlihat oleh administrator), dan halaman NewPost mendatang (hanya terlihat oleh pengguna terotentikasi).

Sekarang kita membuat dua file protected/pages/posts/NewPost.page dan protected/pages/posts/NewPost.php masing-masing untuk menyimpan template halaman dan kelas halaman.

Membuat Template Halaman

Template halaman NewPost berisi TTextBox untuk mengumpulkan judul tulisan dan THtmlArea untuk mengumpulkan konten tulisan. Yang terakhir adalah editor HTML WYSIWYG. Guna memastikan bahwa input pengguna sudah benar, kita mengaitkan validator dengan kontrol input ini.

<%@ Title="My Blog - New Post" %> <com:TContent ID="Main">

Membuat Tulisan Baru

Title: <com:TRequiredFieldValidator ControlToValidate="TitleEdit" ErrorMessage="Please provide a title." Display="Dynamic" />
<com:TTextBox ID="TitleEdit" Columns="50" />
Content: <com:TRequiredFieldValidator ControlToValidate="ContentEdit" ErrorMessage="Please provide content." Display="Dynamic" />
<com:THtmlArea ID="ContentEdit" />
<com:TButton Text="Create" OnClick="createButtonClicked" /> </com:TContent>

Membuat Kelas Halaman

Dari template halaman di atas, kita melihat bahwa sebagian besar kita perlu menulis sebuah kelas halaman yang mengimplementasikan pengendali event: createButtonClicked() (ditempelkan ke tombo Create dalam event OnClick).

class NewPost extends TPage { /** * Membuat tulisan baru jika semua input benar. * Metode ini merespon event OnClick pada tombol "create". * @param mixed event sender * @param mixed event parameter */ public function createButtonClicked($sender,$param) { if($this->IsValid) // bila semua validasi sukses { // populasikan obyek PostRecord dengan input pengguna $postRecord=new PostRecord; // menggunakan SafeText datipada Text guna menghindari serangan Penaskahan Situs Silang $postRecord->title=$this->TitleEdit->SafeText; $postRecord->content=$this->ContentEdit->SafeText; $postRecord->author_id=$this->User->Name; $postRecord->create_time=time(); $postRecord->status=0; // simpan ke database lewat mekanisme Rekaman Aktif $postRecord->save(); // alihkan browser ke halaman tulisan yang baru dibuat $url=$this->Service->constructUrl('posts.ReadPost',array('id'=>$postRecord->post_id)); $this->Response->redirect($url); } } }

Pengujian

Untuk menguji halaman NewPost, masuk lebih dulu dan klik pada link tombol New Post dalam footer pada homepage. Browser kita akan menampilkan hasil berikut dengan URL http://hostname/blog/index.php?page=NewPost.

Ketika Anda mengunjungi halaman NewPost 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 THtmlArea yang dipakai dalam halaman. Ini dikerjakan sekali dan untuk semuanya. Untuk menguji fitur lembaran yang kita kembangkan untuk halaman ListPost, kita dapat membuat lima atau lebih tulisan dan melihat apa yang terjadi pada homepage. Lembar dalam ListPost menampilkan lima tulisan setiap halamannya.