Blame | Letzte Änderung | Log anzeigen | RSS feed
<com:TContent ID="Main"><h1>Membuat Halaman <tt>NewPost</tt></h1><p>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.</p><p>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></p><com:TTextHighlighter CssClass="source" Language="xml"><?xml version="1.0" encoding="utf-8"?><configuration><authorization><deny pages="NewPost,EditPost" users="?" /><allow pages="ListPost,ReadPost" /><deny users="*" /></authorization></configuration></com:TTextHighlighter><com:TipBox>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.</com:TipBox><p>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).</p><com:TTextHighlighter CssClass="source" Language="prado"><div id="footer"><com:THyperLink Text="Home"NavigateUrl="<%= $this->Service->DefaultPageUrl %>" /><com:THyperLink Text="New Post"NavigateUrl="<%= $this->Service->constructUrl('posts.NewPost') %>"Visible="<%= !$this->User->IsGuest %>" /><com:THyperLink Text="New User"NavigateUrl="<%= $this->Service->constructUrl('users.NewUser') %>"Visible="<%= $this->User->IsAdmin %>" />...other links...</div></com:TTextHighlighter><p>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.</p><h2>Membuat Template Halaman</h2><p>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.</p><com:TTextHighlighter CssClass="source" Language="prado"><%@ Title="My Blog - New Post" %><com:TContent ID="Main"><h1>Membuat Tulisan Baru</h1><span>Title:</span><com:TRequiredFieldValidatorControlToValidate="TitleEdit"ErrorMessage="Please provide a title."Display="Dynamic" /><br/><com:TTextBox ID="TitleEdit" Columns="50" /><br/><span>Content:</span><com:TRequiredFieldValidatorControlToValidate="ContentEdit"ErrorMessage="Please provide content."Display="Dynamic" /><br/><com:THtmlArea ID="ContentEdit" /><br/><com:TButton Text="Create" OnClick="createButtonClicked" /></com:TContent></com:TTextHighlighter><h2>Membuat Kelas Halaman</h2><p>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>).</p><com:TTextHighlighter CssClass="source" Language="php">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);}}}</com:TTextHighlighter><h2>Pengujian</h2><p>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>.</p><com:InfoBox>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.</com:InfoBox><com:TipBox>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.</com:TipBox><img src="<%~ output3.gif %>" class="output" /></com:TContent>