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:
- Username - menampilkan nama pengguna. Dalam setiap sel sebuah hiperlink ditampilkan membawa ke halaman EditUser terkait.
- Email - menampilkan email.
- Administrator - menampilkan apakah akun pengguna adalah aturan administrator.
- Command - menampilkan kolom dengan tombol "Delete". Mengklik pada setiap tombol akan mengakibatkan penghapusan akun pengguna terkait.
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:
- THyperLinkColumn menampilkan kolom nama pengguna. URL dibentuk berdasarkan pada ekstensi PHP yang ditetapkan dalam properti DataNavigateUrlFormatString.
- TBoundColumn menampilkan kolom email.
- TCheckBoxColumn menggunakan kotak centang untuk menunjukan apakah akun pengguna adalah aturan administrator.
- TButtonColumn menampilkan kolom dengan tombol "Delete".
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.
Menambahkan Pemeriksaan Perijinan
Karena AdminUser hanya bisa diakses oleh administrator, maka kita perlu menyesuaikan file konfigurasi halaman protected/pages/users/config.xml.
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.