Berbagi Tata Letak Umum

Dalam bagian ini, kita akan menggunakan fitur master/content PRADO untuk membagi tata letak umum diantara halaman. Tata letak merujuk ke area yang sama atay sebagian besar sama untuk setelan halaman. Sebagai contoh, dalam sistem blog kita, semua halaman akan berbagi header yang sama, footer dan bar-samping yang berisi link jalan pintas. Implementasi langsung adalah untuk mengulang tata letak umum dalam setiap halaman. Akan tetapi, pendekatan ini adalah cenderung salah dan sulit untuk dipelihara. Fitur master/content membolehkan kita untuk menggunakan tata letak umum sebagai sebuah kontrol yang memusatkan logika dan penyajian tata letak umum untuk setiap halaman.

Ini juga memungkinkan untuk membagi tata letak umum melalui penyertaan template, yang mirip inklusi file PHP. Akibat dari penyertaan inklusi template ini adalah bahwa ia tidak berdiri sendiri dan tidak membawa kelas untuk mengisi logika untuk tata letak umum.

Membuat Kontrol Master

Sekarang kita membuat kontrol master MainLayout untuk mewakili tata letak umum berbagi dengan halaman blog kita. Kontrol MainLayout adalah kontrol template yang diperluas dari TTemplateControl. Ini mememerlukan file template MainLayout.tpl dan sebuah file kelas MainLayout.php yang ditempatkan di bawah direktori yang sama. Guna menjembatani pemeliharaan, kita membuat direktori baru protected/layouts untuk menampungnya.

Untuk saat ini, MainLayout hanya berisi header dan footer sederhana, seperti ditampilkan berikut ini. Kedepan, kita akan menambahkan bar-samping. Para pembaca juga disarankan untuk meningkatkan tata letak dengan fitur yang lainnya.

<com:THead /> <com:TForm>
<com:TContentPlaceHolder ID="Main" />
</com:TForm>

Contoh di atas memperlihatkan konten dalam file template MainLayout.tpl. Tiga tag baru ini dipakai:

File kelas MainLayout.php sangat sederhana:

Nama ekstensi file untuk template halaman .page, sementara untuk template non-halaman yaitu .tpl. Ini untuk membedakan halaman dari kontrol lain. Keduanya menggunakan sintaks template yang sama. Untuk halaman, file kelasnya adalah opsional (standarnya TPage), sementara untuk kontrol non-halaman, file kelasnya adalah mandatori. Mirip dengan Java, nama file kelas harus sama seperti nama kelas. Harap berhati-hati mengenai sensitifitas-huruf pada sistem Linux/Unix.

Menggunakan Kontrol Master

Untuk menggunakan kontrol master yang baru saja dibuat, kita akan memodifikasi Home.page dan Contact.page. Dalam keadaan tertentu, kita perlu untuk menghapus header dan footer darinya karena kontrol master akan bertanggung jawab untuk menampilkannya; dan kita perlu memberitahu dua halaman di mana mereka harus menggunakan MainLayout sebagai masternya.

Kode berikut memperlihatkan konten dalam Contact.page setelah perubahan:

<%@ MasterClass="Application.layouts.MainLayout" Title="My Blog - Contact" %> <com:TContent ID="Main">

Contact

Please fill out the following form to let me know your feedback on my blog. Thanks!

...kotak teks dan validator untuk nama pengguna... ...kotak teks dan validator untuk emali pengguna... ...kotak teks dan validator untuk konten umpan balik... <com:TButton Text="Submit" OnClick="submitButtonClicked" /> </com:TContent>

Konten yang dikurung di dalam tag <com:TContent> tag akan disisipkan ke dalam tempat yang disiapkan oleh <com:TContentPlaceHolder> pada template master.

Dimungkinkan untuk memiliki multipel TContentPlaceHolder dalam sebuah template master dan multipel TContent dakan tenokate konten. Mereka saling dipasangkan dengan nilai ID-nya. Juga dimungkinkan untuk membuat template konten menjadi master template konten lainnya dengan menempatkan TContentPlaceHolder di pembentuk. Ini disebut master berulang.

Selain <com:TContent>, kita juga melihat tag baru lain <%@ %> di atas, yang disebut tag kontrol template. Ia berisi pasangan nama-nilai yang dipakai untuk menginisialisasi properti terkait bagi pemilik template, yaitu, halaman Contact.

Dengan menyetel properti MasterClass sebagai Application.layouts.MainLayout, kita menginstruksikan halaman Contact untuk menggunakan MainLayout sebagai masternya. Di sini, kita sedang menggunakan format namespace untuk merujuk ke kelas MainLayout.

Format namespace sebagian besar dipakai dalam pemrograman PRADO. Dipakai bersama dengan alias path. PRADO mendefinisikan dua alias path: System merujuk ke direktori framework pada instalasi PRADO, dan Application merujuk ke direktori protected. Namespace Application.layouts.MainLayout selanjutnya bisa diterjemahkan sebagai protected/layouts/MainLayout yang tepatnya adalah nama file (tanpa ekstensi .php) untuk kelas MainLayout.

Cara Alternatif Menetapkan Master

Ada beberapa cara tambahan untuk menetapkan kelas master untuk sebuah halaman.

Kita dapat menetapkan master dalam kode seperti berikut untuk menghidupkan perubahan dinamis terhadap tata letak:

MasterClass='Path.To.NewLayout'; } // ... }

Dalam contoh di atas, kita menetapkan MasterClass dalam metode onPreInit() yang diturunkan dari TPage. Metode dipanggil oleh PRADO langsung setelah turunan halaman dibuat. Selanjutnya kita dapat menentukan secara dinamis tata letak yang dipakai saat halaman diminta. Sebagai contoh, ketika halaman yang diminta oleh pengguna terdaftar kita memakai tata letak A, dan tata letak B dipakai jika pengguna tamu yang meminta halaman.

Kita juga dapat menetapkan master dalam konfigurasi aplikasi atau konfigurasi halaman. Kode berikut memperlihatkan konfigurasi aplikasi yang dimutakhirkan untuk sistem blog kita:

Dengan melakukan demikian, kita menghindari kesulitan pada penetapan master dalam setiap template halaman. Jika kita memutuskan untuk menggunakan master yang berbeda untuk halaman, kita hanya perlu mengubah konfigurasi aplikasi. Untuk alasan ini, dalam sistem blog kita, kita akan menggunakan pendekatan untuk menetapkan master.

Ada urutan yang menentukan master yang mana yang sebenarnya diterapkan ketika ia ditetapkan dalam tempat multipel. Dalam keadaan tertentu, onPreInit() diambil lebih dulu di atas template halaman di atas konfigurasi aplikasi/halaman. Oleh karena itu, jika kita menetapkan MainLayout dalam konfigurasi aplikasi/halaman dan kita menetapkan SpecialLayout dalam Contact.page, master yang efektif adalah yang terakhir.