Trong CodeIgniter 3 để tạo các URL có độ sâu tuỳ ý như yêu cầu, bạn có thể cấu hình routes.php
một cách linh hoạt và sử dụng bộ định tuyến của CI3 để xử lý các URL phân cấp. Dưới đây là hướng dẫn chi tiết:
1. Cấu hình routes.php
Mở tệp application/config/routes.php
và cấu hình route để hỗ trợ URL có nhiều cấp độ. Bạn có thể sử dụng các tham số động trong route để bắt các phần khác nhau của URL.
Ví dụ:
$route['(:any)/(:any)/(:any)/(:any)/(:any)-a(:num).html'] = 'articles/view/$1/$2/$3/$4/$5/$6';
$route['(:any)/(:any)/(:any)/(:any)-a(:num).html'] = 'articles/view/$1/$2/$3/$4/$5';
$route['(:any)/(:any)/(:any)-a(:num).html'] = 'articles/view/$1/$2/$3/$4';
$route['(:any)/(:any)-a(:num).html'] = 'articles/view/$1/$2/$3';
$route['(:any)-a(:num).html'] = 'articles/view/$1/$2';
Giải thích các route:
(:any)
: Bắt bất kỳ chuỗi nào (thường được sử dụng cho tên danh mục hoặc bài viết).
(:num)
: Bắt bất kỳ số nào (sử dụng cho ID bài viết).
- Ví dụ URL:
/php/wordpress/woocommerce/huong-dan-cac-trang-thai-don-hang-cua-woocommerce-a210.html
sẽ khớp với route:
(:any)/(:any)/(:any)/(:any)-(:num).html
và được ánh xạ tới hàm view
của controller articles
với các tham số $1, $2, $3, $4, $5
.
2. Tạo Controller để xử lý URL
Trong controller Articles.php
(tạo trong application/controllers/Articles.php
), bạn cần tạo hàm view
để xử lý các tham số từ URL:
class Articles extends CI_Controller {
public function view($category1 = '', $category2 = '', $category3 = '', $category4 = '', $title = '', $id = '') {
// Đây là nơi bạn xử lý bài viết theo ID và có thể các category nếu cần.
// Tìm bài viết theo $id
$data['article'] = $this->article_model->get_article_by_id($id);
// Xử lý nếu không tìm thấy bài viết
if (empty($data['article'])) {
show_404();
}
// Nếu cần, bạn có thể kiểm tra tính hợp lệ của $category1, $category2,... và $title với dữ liệu trong cơ sở dữ liệu.
// Load view để hiển thị bài viết
$this->load->view('articles/view', $data);
}
}
3. Mô hình để truy vấn dữ liệu bài viết
Trong application/models/Article_model.php
, bạn có thể có một model để lấy thông tin bài viết từ cơ sở dữ liệu:
class Article_model extends CI_Model {
public function get_article_by_id($id) {
$query = $this->db->get_where('articles', array('id' => $id));
return $query->row_array();
}
}
4. View để hiển thị bài viết
Cuối cùng, bạn tạo view application/views/articles/view.php
để hiển thị bài viết:
<h1><?php echo $article['title']; ?></h1>
<p><?php echo $article['content']; ?></p>
5. Kiểm tra độ sâu tuỳ ý
Với cấu hình trên, bạn có thể truy cập các URL có độ sâu khác nhau như:
engineer.net/php/wordpress/woocommerce/huong-dan-cac-trang-thai-don-hang-cua-woocommerce-a210.html
engineer.net/php/wordpress/woocommerce/plugin/huong-dan-cac-trang-thai-don-hang-cua-woocommerce-a210.html
Tất cả các URL này sẽ được chuyển hướng tới cùng một hàm view
trong controller Articles
, và bạn có thể xử lý logic tuỳ theo yêu cầu của mình.
Tổng kết:
- Route cho phép bạn cấu hình các URL động với nhiều cấp độ.
- Controller xử lý các tham số từ URL và lấy dữ liệu bài viết.
- Model dùng để truy vấn dữ liệu từ cơ sở dữ liệu.
- View để hiển thị nội dung bài viết.