Bây giờ tiếp tục viết chức năng cho admin
ADMIN
Ta mở file application/bootstrap.php lên và kiếm đoạn
Route::set('default', '(<controller>(/<action>(/<id>)(/<key>)))')
->defaults(array(
'controller' => 'welcome',
'action' => 'index',
));
Và thêm vào trước đoạn code trên nội dung này mục đích là đưa đường dẫn mặc định của phần quản trị admin và control mặc định sẽ gọi
Route::set('quanly', '<directory>(/<controller>(/<action>(/<id>)(/<key>)))', array(
'directory' => 'admincp'
))
->defaults(array(
'controller' => 'admin',
'action' => 'index',
));
Bây giờ ta tạo 1 thư mục admincp trong thư mục controller
và tạo file admin.php với nội dung như sau
<?php
defined
('SYSPATH') or die('No direct script access.');
class
Controller_Admincp_Admin extends Controller_Template {
public
$template = 'admin/index';
}
Ở đây tên controller là controller_tenthumuc_tencontroller
sử dụng template admin/index có nghĩa là sử dụng view index.php (nội dung cũng tương tự bài trước )nằm trong thư mục admin vì thế ta tạo thư mục như sau.
views
--admin
----index.php
Tiếp đến ta tạo action_index cho controller_admincp_admin
public function action_index() {
$query = DB::select()
->from('article')
->join('users', 'left')->on('users.userid', '=', 'article.post_userid')
->execute()->as_array(NULL);
$this->template->content = View::factory('admin/newslistadmin');
$this->template->content->set(array(
'data' => $query
));
}
Đoạn code này cũng giống như action_index của controller_article vì thế bạn tạo thư mục view như sau
views
--admin
----newslistadmin.php
File newslistadmin.php với nội dung như sau
<?php
if ($data != false) {
?>
<table width="100%" border="1" cellspacing="2" cellpadding="3">
<tr style="background-color: #CCC">
<td>title</td><td>content</td>
<td>Post time</td><td>User Post</td>
<td>
<a href="<?php echo url::base() ?>admincp/admin/addart">
Add new article
</a>
</td>
</tr>
<?php
foreach ($data as $dt) {
?>
<tr>
<td><?php echo $dt['title'] ?></td>
<td><?php echo $dt['content'] ?></td>
<td><?php echo $dt['post_time'] ?></td>
<td><?php echo $dt['username'] ?></td>
<td>
<a href="<?php echo url::base() ?>admincp/admin/editart<?php echo $dt['article_id'] ?>">
Edit
</a>
<a href="<?php echo url::base() ?>admincp/admin/deleteart/<?php echo $dt['article_id'] ?>">
Delete
</a>
</td>
</tr>
<?php } ?>
</table>
<?php } ?>
Bây giờ bấm vào link add new article, ta không thể chạy link này vì chưa có action_addart, ta tạo action_addart cho controller_admincp_admin như sau
public function action_addart() {
$userl = DB::select()
->from('Users')
->execute()->as_array(NULL);
$this->template->content = View::factory('admin/f_art_add');
$this->template->content->set(array(
'member' => $userl
));
}
Ở đây đưa danh sách user lên để tạo hộp select cho chọn member post.. (Sau này nếu phát triển thành thành viên đăng nhập post bài thì chổ này không cần nữa).
Giờ ta tạo file f_art_add.php với cây thư mục sau
views
----admin
------f_art_add.php
File f_art_add.php với nội dung như sau
<style type="text/css">
form label {
float:left;
width: 120px;
}
form textarea, input[type=text], select {
width: 250px;
resize: none;
}
</style>
<form action="<?php echo url::site('admincp/admin/saveart') ?>" method="post" enctype="multipart/form-data">
<p>
<label>Title</label>
<input type="text" name="txt_name" id="txt_name"
value=""/>
<small>(*)</small>
</p>
<p>
<label>Content</label>
<textarea cols="3" rows="4" name="txt_descript" id="txt_descript"></textarea>
</p>
<p>
<label>Member</label>
<select name="sel_member" id="sel_member">
<option value=""> </option>
<?php if ($member != false) { ?>
<?php foreach ($member as $key => $value) { ?>
<option value="<?php echo $value['user_id'] ?>">
<?php echo $value['username'] ?>
</option>
<?php
} //end for
} //end if
?>
</select>
<small>(*)</small>
</p>
<p>
<input type="submit" name="btn_save" value="Save"/>
<input type="hidden" name="hd_id" value=""/>
</p>
</form>
Lúc này bạn nhập hết thông tin vào và save -> Báo lỗi vì chưa có action_saveart
Ta tạo action_saveart cho nó với nội dung
public function action_saveart() {
$frm = Validation::factory($_POST)
->rule('txt_name', 'not_empty')
->rule('txt_descript', 'not_empty')
->rule('sel_member', 'not_empty');
if (
$frm->check()) { //CHECK CÓ HỢP LỆ KHÔNG
$frm = $frm->as_array();
//KIEM TRA HD_ID CỦA MÌNH NẾU = RỖNG THÌ INSERT VÀO
//NGƯỢC LẠI THÌ INSERT
if (empty($frm['hd_id'])) {
$this->insert($frm);
} else {
$this->update($frm);
}
} else {
$error = $frm->errors('articleerror'); //SỬ DỤNG FILE articleerror.php TRONG THƯ MỤC messages
foreach ($error as $key => $value) {
echo $value . '<br />';
}
die();
}
//REDIRECT RA DANH SÁCH
$this->redirect('admincp/admin');
}
Ở đây ta sử dụng validation để bắt lỗi not empty cho từng field. Bạn có thể đọc nó ở đây Validation
$error = $frm->errors('articleerror');
Đoạn trên ta sử dụng file articleerror.php trong thư mục application/messages
Ta tạo file articleerror.php với nội dung sau
<?php
return array(
'txt_name' => array(
'not_empty' => __('Title must not be empty.')
),
'txt_descript' => array(
'not_empty' => __('content must not be empty.')
),
'sel_member' => array(
'not_empty' => __('Member must not be empty.')
)
);
Bây giờ ta muốn hàm action_saveart hoạt động thì ta phải thêm 2 hàm này vào cho nó
public function insert($frm) {
$col = array(
'title',
'content',
'post_userid'
);
$values = array(
$frm['txt_name'],
$frm['txt_descript'],
$frm['sel_member']
);
$id = DB::insert('article', $col)->values($values)->execute();
return $id[0];
}
public function
update($frm) {
$set = array(
'title' => $frm['txt_name'],
'content' => $frm['txt_descript'],
'post_userid' => $frm['sel_member']
);
$query = DB::update('article')->set($set)->where('article_id', '=', $frm['hd_id'])->execute();
return $frm['hd_id'];
}
Bây giờ bạn chạy link http://localhost/kohana/admincp/admin/ xem có thêm vào được không
Tiếp theo ta đến action_editart
public function action_editart() {
$id = $this->request->param('id');
$query = DB::select()
->from('article')
->join('users', 'left')->on('users.user_id', '=', 'article.post_userid')
->where('article.article_id', '=', $id)
->execute()->as_array(NULL);
$member = DB::select()
->from('users')
->execute()->as_array(NULL);
if (isset($query[0])) {
$query = $query[0];
}
$this->template->content = View::factory('admincp/admin/f_edit_art');
$this->template->content->set(array(
'data' => $query,
'member' => $member
));
}
Cũng như trên ta tạo file f_edit_art.php với nội dung sau
<style type="text/css">
form label {
float:left;
width: 120px;
}
form textarea, input[type=text], select {
width: 250px;
resize: none;
}
</style>
<?php
if ($data != false) {
?>
<form action="<?php echo url::site('admincp/admin/saveart')?>" method="post" enctype="multipart/form-data">
<p>
<label>title</label>
<input type="text" name="txt_name" id="txt_name"
value="<?php echo $data['title'] ?>"/>
<small>(*)</small>
</p>
<p>
<label>Content </label>
<textarea cols="3" rows="4" name="txt_descript" id="txt_descript"><?php echo $data['content'] ?></textarea>
</p>
<p>
<label>Member</label>
<select name="sel_member" id="sel_member">
<option value=""> </option>
<?php if ($member != false) { ?>
<?php foreach ($member as $key => $value) { ?>
<option <?php echo $value['user_id'] == $data['post_userid'] ? 'selected="selected"' : '' ?>
value="<?php echo $value['user_id'] ?>">
<?php echo $value['username'] ?>
</option>
<?php
} //end for
} //end if
?>
</select>
<small>(*)</small>
</p>
<p>
<input type="submit" name="btn_save" value="Save"/>
<input type="hidden" name="hd_id" value="<?php echo $data['article_id'] ?>"/>
</p>
</form>
<?php } else { ?>
Your request not found.
<?php } ?>
Giờ ta ra ngoài danh sách http://localhost/kohana/admincp/admin rồi bấm vào edit và chỉnh sửa thử xem được không nào? Nếu mọi chuyện oki hết giờ ta làm action_deleteart
public function action_deleteart() {
$id = $this->request->param('id');
$query = DB::delete('article')->where('article_id', '=', $id)->execute();
$this->redirect('admincp/admin');
}
Giờ ta ra ngoài danh sách http://localhost/kohana/admincp/admin bấm delete thử xem nào.
Tạm thời là nhưng thao tác đó nhé