Tiếp theo ở phần 3 phần này chúng ta sẽ thêm user để quản lý phần admin và các thể loại của web truyện tranh mà chúng ta làm bằng CakePHP

1 . Add User:

Url chạy:http://doctruyen.local/admin/users/add(thêm vào nav luôn nha)

Tìm đoạn sau trong navigate.ctp:


<li>
 <a href="#">Add</a>
 </li>

và thay thế bằng:


<li>
 <?php echo $this->Html->link('Add',array('controller'=>'users','action'=>'add'),array('escape'=>false))?>
 <!--Or-->
 <!--<a href="/admin/users/add">Add</a>-->
 </li>

Tiếp theo là thêm action vào UsersController.php

public function admin_add(){
 $this->set('title_for_layout', 'Add user');
 if($this->request->is('post') || $this->request->is('put')){
 $now = date('Y:m:d H:i:s');
 $this->User->set(array('date_created'=>$now));
 $this->User->set(array('date_updated'=>$now));
 if($this->User->save($this->request->data)){
 $this->Session->setFlash('Success','default',array('class'=>"alert alert-success"));
 $this->redirect(array('action'=>'list'));
 }
 }
 }

Thêm thêm file admin_add.ctp vào /app/View/Users/, cách làm là như sau: copy file admin_edit.ctp và dán vào ngay thư mục đó rồi đổi tên lại thành admin_add.ctp, nội dung thì nó vẫn là của admin_edit.ctp, từ từ rồi sẽ chỉnh sửa lại cho đúng…

* Bổ sung: nhân tiện chổ này mình bổ sung thêm phần thay đổi title của trang web luôn, tìm đến file /app/View/Elements/admin/head.ctp trong file này có tiêu đề của trang web trong thẻ <title></title>

Nội dung hiện tại như sau:


<title>SB Admin 2 - Bootstrap Admin Theme</title>

Thay đổi nó thành:


<title><?php echo $title_for_layout; ?></title>

Và bây giờ từ đây về sau khi vào một action nào đó trong admin, nếu trong controller của action đó bạn có set là $this->set(‘title_for_layout’, ‘Nội dung hiển thị’); thì tiêu đề sẽ hiển thị phần trong “Nội dung hiển thị” còn nếu bạn không set thì mặc định của sẽ lấy Tên của Controller là tiêu đề. Các bạn có thể test lại bằng cách, thêm $this->set(‘title_for_layout’, ‘Add user’); vào action admin_add() của UsersController.php, tốt nhất là để trên cùng của action cho tiện.

Quay lại admin_add.ctp chúng ta sẽ thay đổi thành phần html của file này để phù hợp với table users trong cơ sở dữ liệu, nội dung chính của form như sau:


<?php echo $this->Form->create(array('id'=>'appForm', 'inputDefaults'=>array('label'=>false, 'div'=>false))); ?>
 <div class="form-group">
 <label>Username</label>
 <?php echo $this->Form->input('username', array('class'=>'form-control')); ?> 
 </div>
 <div class="form-group">
 <label>Mật khẩu</label>
 <?php echo $this->Form->input('password', array('class'=>'form-control')); ?>
 </div>
 <div class="form-group">
 <label>Nhập lại mật khẩu</label>
 <?php echo $this->Form->input('confirm_password', array('type'=>'password', 'class'=>'form-control')); ?>
 </div>
 <div class="form-group">
 <label>Họ và tên</label>
 <?php echo $this->Form->input('name', array('class'=>'form-control', )); ?>
 </div>
 <div class="form-group">
 <label>Email:</label><br />
 <?php echo $this->Form->input('email', array('class'=>'form-control')); ?>
 </div>
 <button id="linkUpdate" type="submit" class="btn btn-success">Save</button>
 <button type="button" onclick="window.location.href='/admin/users/list'" class="btn btn-info">Danh sách</button>
 <?php echo $this->Form->end();?>

Xong các bước trên các bạn có thể nhấn Save để tạo thêm user, với source code các bạn download về mình đã có kiểm tra một số trường nhập liệu trong model User.php, bạn nào cần thiết thì sử dụng không cần có thể bỏ qua, các thông báo lỗi cũng đã được viết mặc định là chưa có css gì cả, các bạn tự mình viết css cho nó đẹp nhá.

Với action trên trong UsersController.php thì sau khi thêm thành công sẽ được chuyển đến list user và có thông báo Success, đến đấy là sự thành công của các bạn rùi.

Với các phần edit, add, del user chúng ta đã tạo ra một phần rất cơ bản của 1 website chính là người quản lý website, bạn tạo ra và giao cho người khác để có thể tiến hành các thao tác ở phần quản  lý, phần nâng cao của user chính là phân quyền, phần này có thể nói nó phức tạp, và cũng có thể nói không phức tạp tuỳ theo nhu cầu thôi, nên mình không đề cập, nếu có time khác mình sẽ đề cập lại.

2 . Phần thể loại truyện của 1 website truyện tranh

Phần này cũng có thể gọi nó là danh mục hiển thị ngoài trang web, ví dụ như truyện ecchi, romance, action, anime… nó có rất là nhiều.

a. Cơ sở dữ liệu: trong thư mục DB, tables có tên là categories

b. Chuẩn bị: đơn giản các bước chuẩn bị là copy và dán tất cả chổ nào User (thư mục, controller, view, model…) thành Category

– Tạo Menu Category ở nav:


<li>
<a href="#"><i class="fa fa-bar-chart-o fa-fw"></i> Category<span class="fa arrow"></span></a>
<ul class="nav nav-second-level">
<li>
<a href="/admin/categories/list">List</a>
</li>
<li>
<?php echo $this->Html->link('Add',array('controller'=>'categories','action'=>'add'),array('escape'=>false))?>
<!--Or-->
<!--<a href="/admin/users/add">Add</a>-->
</li>
</ul>
<!-- /.nav-second-level -->
</li>

Tạo CategoriesController.php


<?php
class CategoriesController extends AppController
{
var $layout = 'admin';
var $uses = array('Category');
public function beforeFilter(){
parent::beforeFilter();
}
public function admin_list(){
}
public function admin_delete($id = null){
}
public function admin_edit($id = null){
}
public function admin_add(){
}
}

Tạo view, có bao nhiêu action thì bấy nhiêu file trừ action delete không cần tạo file ngoài view.

Tạo model Category.php:


<?php
class Category extends AppModel {
var $name='Category';
public $actsAs = array('Tree');
}

Đến đây nếu các bạn chạy các link List và Add của Category sẽ không báo các lỗi thiếu controller hay thiếu model, view gì cả nhưng vẫn có lỗi như: Notice (8): Undefined variable: users [APP/View/Categories/admin_list.ctp, line 55], … Nguyên nhân thì là do chúng ta chưa viết gì trong controller và ngoài view thì lấy không đúng dữ liệu thôi

category story

Và trên model Category.php có dòng  public $actsAs = array(‘Tree’); Nó là một phần hỗ trợ của CakePHP, rất hay trong việc thiết kế các danh mục kiểu phân cấp cha con, chi tiết phần này mình xin để phần sau nha.

Kết luận

  1. Nếu có thắc mắc gì các bạn để lại comment bên dưới mình sẽ trả lời sớm nhất có thể.
  2. Cảm ơn các bạn đã đọc.

Nongdanit.info
[Cakephp] Bài 25 – Toàn tập website truyện tranh phần 4