Membuat Halaman AdminUser

Halaman AdminUser menampilkan semua akun pengguna dalam sebuah daftar agar administrator dapat melakukan beberapa pekerjaan administratif. Demi kemudahan, pekerjaan administratif sistem blog kita mendukung termasuk mengedit dan menghapus akun pengguna.

Kita akan menampilkan daftar pengguna dalam sebuah tabel. Setiap baris tabel mewakili satu akun pengguna, dan kolom berikut ditampilkan:

Kita membuat dua file protected/pages/users/AdminUser.page dan protected/pages/users/AdminUser.php masing-masing untuk menyimpan template halaman dan kelas halaman.

Membuat Template Halaman

Kita menggunakan TDataGrid untuk menampilkan akun pengguna. Berdasarkan pada analisis di atas, kita mengkonfigurasi empat kolom berikut:

Template halaman lengkap ditampilkan seperti berikut:

<%@ Title="My Blog - Manage User Accounts" %> <com:TContent ID="Main">

Manage User Accounts

Create New User
<com:TDataGrid ID="UserGrid" DataKeyField="username" AutoGenerateColumns="false" OnDeleteCommand="deleteButtonClicked"> <com:THyperLinkColumn HeaderText="Username" DataTextField="username" DataNavigateUrlField="username"> <prop:DataNavigateUrlFormatString># $this->Service->constructUrl('users.EditUser',array('username'=>{0})) </prop:DataNavigateUrlFormatString> </com:THyperLinkColumn> <com:TBoundColumn HeaderText="Email" DataField="email" /> <com:TCheckBoxColumn HeaderText="Administrator" DataField="role" /> <com:TButtonColumn HeaderText="Command" Text="Delete" ButtonType="PushButton" CommandName="delete" /> </com:TDataGrid> </com:TContent>

Membuat Kelas Halaman

Dalam template halaman di atas, event OnDeleteCommand datagrid dengan metode deleteButtonClicked() akan kita implementasikan dalam kelas halaman. Sebagai tambahan, datagrid perlu dipopulasi dengan data akun pengguna saat halaman diinisialisasi. Oleh karena itu, kita menulis kelas halaman seperti berikut:

class AdminUser extends TPage { /** * Mempopulai datagrid dengan daftar pengguna. * Metode ini dipanggil oleh kerangka kerja saat inisialisasi halaman * @param mixed event parameter */ public function onInit($param) { parent::onInit($param); // ambil semua informasi data akun $this->UserGrid->DataSource=UserRecord::finder()->findAll(); // mengikat data ke komponen antarmua $this->UserGrid->dataBind(); } /** * Menghapus rekaman pengguna yang ditetapkan. * Metode ini merespon ke event OnDeleteCommand pada datagrid. * @param TDataGrid pengirim event * @param TDataGridCommandEventParameter parameter event */ public function deleteButtonClicked($sender,$param) { // dapatkan item datagrid yang berisi tombol hapus yang diklik $item=$param->Item; // dapatkan kunci primer terkait ke item datagrid $username=$this->UserGrid->DataKeys[$item->ItemIndex]; // menghapus rekaman pengguna dengan kunci primer nama pengguna UserRecord::finder()->deleteByPk($username); } }

Dalam kode di atas, metode deleteButtonClicked() dipanggil kapan saja tombol "Delete" diklik. untuk menentukan baris mana pada tombol yang diklik, kita memeriksa properti Item.ItemIndex pada parameter event. Untuk selanjutnya mengidentifikasi akun pengguna mana yang akan dihapus, kita mengambil nilai kunci primer (username) melalui properti DataKeys pada DataGrid.

Semua kontrol data-bound mempunyai pola penggunaan yang sama. Yaitu, Setel properti DataSource dengan data dan panggil metode dataBind() untuk mengikat data ke struktur internal kontrol.

Pengujian

Untuk menguji halaman AdminUser, kunjungi URL http://hostname/blog/index.php?page=users.AdminUser. Anda mungkin perlu masuk sebagai administrator lebih dahulu jika Anda belum melakukannya. Kita akan melihat hasil seperti berikut.