« First < 1 2 3 4 5 > Last »
Giả sử bạn muốn tạo các liên kết để chuyển hướng trang của bạn sang một trang khác như trên, chỉ cần làm theo ví dụ sau:
$page = $this->get['page']; $this->load->library('pagination'); $config['total’] = '200'; $config['limit'] = '20'; $config['page'] = $page; $config[‘style_links’] = ‘css_class_links’; $config['$style_results'] = 'css_class_results'; $config['url'] = site_url('home/listEntry&page=%s’);
//Khởi tạo các giá trị thiết đặt để tạo link phân trang
$this->pagination->initialize($config);
echo $this->pagination->createNavigation();
4.1.4 Quản lý session của PHP với session class
Để sử dụng được thư viện này, cần nạp vào controller bằng đoạn mã sau: $this->load->library(‘session’);
Dùng các hàm set(), get() để tạo session và lấy các giá trị của session: $this->session->set(‘name_session_1’, ‘gia_tri_session_1’);
$this->session->set(‘name_session_1’, ‘gia_tri_session_1’);
4.1.5 Tạo ảnh Captcha ngặn chặn các chương trình tự động
Để sử dụng, cần nạp thư viện này vào Controller bằng đoạn mã sau: $this->load->library(‘captcha’);
Các hàm có thể sử dụng:
a. getCode()
Khi thư viện captcha được nạp, nó sẽ tự động sinh ra một chuỗi ký tự ngẫu nhiên. Bạn dùng hàm này để lấy chuỗi ngẫu nhiên đó, phục vụ cho mục đích kiểm tra chuỗi số nhập vào của người dùng có có trùng với chuỗi ngẫu nhiên dc sinh ra hay không. $this->session->set('captcha') = $this->captcha->getCode();
b. showImage()
Hiển thị ảnh captcha cho người dùng: $this->captcha->showImage();
4.1.6 Tải file lên server với Upload class
Việc upload file trên server thực sự dễ dàng với thư viện upload của Hiphop framework. $config['upload_path'] = './uploads/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '1000';
$config['max_width'] = '800';
$config['max_height'] = '600';
$this->load->library('upload', $config);
$this->upload->do_upload();
Để lấy các thông tin trả về của file đã upload, chỉ cần gọi hàm: $this->upload->data();
( [file_name] => your_pic.jpg [file_type] => image/jpeg [file_path] => /path/to/your/upload/ [orig_name] => mypic.jpg [file_extension] => .jpg [file_size] => 22.2 [image_width] => 800 [image_height] => 600 [image_type] => jpeg )
4.1.7 Tải file với giao thức FTP - FTP class
Như cách sử dụng các thư viện thông thường, để sử dụng được FTP class, bạn cần thêm hàm sau trong Controller:
$this->load->library(‘ftp’);
Sau khi được nạp, biến $this->ftp sẽ chứa toàn bộ đối tượng FTP được khởi tạo từ FTP class. Các hàm sẵn có:
a. $this->ftp->connect()
Kết nối và đăng nhập vào server với các thông tin đăng nhập. Hàm này phải được dùng đầu tiên khi muốn làm việc với server qua giao thức FTP $config['hostname'] = 'ftp.example.com'; $config['username'] = 'your-username'; $config['password'] = 'your-password'; $config['port'] = 21; $config['passive'] = FALSE; $config['debug'] = TRUE; $this->ftp->connect($config); b. $this->ftp->chmod()
Thiết đặt quyền hạn cho file hoặc thư mục trên server. Ví dụ: $this->ftp->chmod(‘/public_html/’, 777);
Liệt kê danh sách các file hiện có trong thư mục trên server. Ví dụ: $list = $this->ftp->list_files('/public_html/');
d. $this->ftp->close()
Đóng kết nối tới máy chủ, sử dụng khi hoàn thành các công việc cần làm với kết nối FTP vừa tạo.
4.2 Các Helper
4.2.1. Array Helper
Nằm trong file system/helpers/array_helper.php
Bao gồm các hàm có chức năng hỗ trợ làm việc, xử lý mảng.
Để sử dụng được các hàm trong file này, cần dòng khai báo sau trong Controller:
$this->load->helper(‘array’);
Các hàm có thể sử dụng:
a. element()
Cho phép nạp thêm phần tử vào mảng, hàm này kiểm tra xem có chỉ số mảng này ko và giá trị tương ứng của nó. Nếu một giá trị tồn tại thì trả lại giá trị đó, nếu giá trị ko tồn tại thì trả lại giá trị false, bất kể bạn có xác định các giá trị mặc định qua ba biến.
Ví dụ:
$array = array('color' => 'red', 'shape' => 'round', 'size' => '');
echo element('color', $array); // returns "red"
echo element('size', $array, NULL); // returns NULL
b.random_element()
Trả về giá trị ngẫu nhiên của một mảng. $ran = array(‘1’, ‘2’, ‘4’);
echo random_element($ran);
4.2.2. Text Helper
Sử dụng lệnh sau trong Controller để load Text Helper:
$this->load->helper(‘text’);
Các hàm có thể sử dụng:
a. word_cutter()
Cắt xén một xâu ra các từ với độ dài mong muốn Ví dụ:
$string = "UET is the only Vietnamese university having one among the best 100 students";
$string = word_cutter($string, 4);
// Returns: UET is the only…
Tham số thứ ba là hậu tố thêm vào string, mặc định là dấu(3 chấm) …
b. character_cutter()
Cắt xâu thành các ký tự có độ dài xác định. Hàm này luôn đảm bảo sự toàn vẹn của các từ nên có thể số ký tự của xâu kết quả có thể sai số không đáng kể.
Ví dụ:
$string = "UET is the only Vietnamese university having one among the best 100 students";
$string = character_cutter($string, 20);
// Returns: UET is the only Vietnamese …
Tham số thứ ba là hậu tố thêm vào xâu, nếu không khai báo thì helper mặc định là dấu …
c. highlight_code()
Tô màu xâu ký tự.
$tring = highlight_code($string);
Hàm này sử dụng hàm highlight_string() của PHP, vì thế màu được sử dụng được xác định trong file php.ini
d. highlight_phrase()
Sẽ highlight một cụm từ trong một xâu text, tham số đầu tiên xác định string, tham số thứ hai là cụm muốn highlight, tham số thứ ba và tham số thứ tư là thẻ html mở và đóng màu bạn muốn.
e .create_slug()
Khi dùng hàm này với tham số là một chuỗi string, một chuỗi mới được sinh ra, nối với nhau bởi dấu “-”.
$title = "Cộng hòa xã hội chủ nghĩa Việt Nam?";
$url_title = url_title($title);
// Kết quả: cong-hoa-xa-hoi-chu-nghia-viet-nam
Hàm này rất hữu ích trong việc tạo các URL thân thiện với bộ máy tìm kiếm. Chẳng hạn:
http://yoursite.com/index.php?route=blog/entry/123/gioi-thieu
4.2.3. URL helper
Bao gồm các hàm hỗ trợ làm việc với url
a. site_url()
Ví dụ
$this->load->helper('url');
echo site_url("blog/entry/123");
$segments = array(blog, entry, '123');
echo site_url($segments);
Cả hai cách làm trên đều đưa ra kết quả là url:
yoursite.com/index.php?route=blog/entry/123
b. uri_string()
Khi dùng hàm này ở bất kỳ trang nào trong ứng dụng, kết quả chúng ta nhận được sẽ là một chuỗi segment của trang hiện tại. Với url:
http://yoursite.com/index.php?route=blog/entry/123
Hàm sẽ trả về chuỗi: blog/entry/123 c.get_segment($order)
Trả về segment ứng với thứ tự trong tham số $order của URL hiện tại.
http://yoursite.com/index.php?route=blog/entry/123
CHƯƠNG 5: ÁP DỤNG HIPHOP FRAMEWORK XÂY DỰNG TRANG BLOG CÁ NHÂN
Yêu cầu: Xây dựng một trang blog cá nhân có các chức năng, thiết kế, giao diện như hình
vẽ. Nội dung và tiêu đề bài viết được lấy trong database.
Hình 5. 0.1Giao diện Blog
Bước 1. Xác định URL.
yourblog.com/index.php?route=home/index
Bước 2. Xác định các phân cấp Controller.
Bằng cách nhìn nhận một trang web thành các thành phần riêng rẽ, ta có thể xác định cây phân cấp Controller trong ví dụ này, từ đó xây dựng các Controller class cho hợp lý.
Controller gốc: Home (hàm có hàm index)
Controller cấp 1: Header, Right_Bar, Footer
Controller cấp 2: Menu (con của Header), MostViewBox và ContactBox (con
của RightBar)
Tương ứng với các controller này là view (template) tương ứng của chúng.
Bước 3: Xác định các Model
Controller Home cần liệt kê danh sách các bài viết lấy từ database và hiển thị trên trang chủ. Ta cần một model để đảm nhiệm việc truy xuất dữ liệu trong database. Model này cần có các phương thức sau để đáp ứng phù hợp với yêu cầu được gửi tới từ Controller.
getLastestEntry(): lấy danh sách 10 entry mới nhất, trả về Controller Home
getMostViewEntry(): lấy danh sách các bài được xem nhiều nhất, trả về cho Controller con MostViewBox.
Bước 4: Viết mã
Home
Header RightBar Footer
Như đã nói ở trên, mọi class liên quan tới ứng dụng do lập trình viên triển khai phải được đặt trong thư mục system/application. Các lớp Controller, Model, View cần đặt vào các thư mục tương ứng.
Ví dụ về việc viết mã cho lớp Home Controller:
class Home extends Controller {
function __construct() {
parent::__construct();
}
function index() {
$this->children = array("header",’footer’, right_bar);
$this->load->model('home_model', 'homeModel');
$this->data[‘entries’] = $this->homeModel->getLastestEntry();
$this->template = "home_view”;
$this->render(TRUE);
}
}
View cho Controller: <?php echo $header?>
<div id=”content”>
<?php foreach ($entries as $entry): ?>
<div class=”oneEntry”>
<h5><?php echo $entry[‘title’];?></h5> <div><?php echo $entry[‘content’];?></div> </div>
<?php endforeach;?>
</div>
<?php echo $footer?>
Tương tự ta có thể phát triển tiếp các controller con khác.
Kết quả cuối cùng: Site blog cá nhân được tạo trong thời gian 30 phút (không kể thời
gian thiết kế HTML) với các đặc điểm:
Tốc độ tải trang nhanh
Mã được đặt vào thư mục con trong system/application, trong tương lai có thể dễ dàng thêm các tính năng nâng cao để làm blog thêm phong phú.
KẾT LUẬN
Nội dung của khóa luận đã trình bày về khái niệm Web framework, mô tả chi tiết chức năng các thành phần trong mô hình MVC trong các Web framework.
Kết quả chính của khóa luận là:
1- Hiểu rõ khái niệm Web application framework. Nắm rõ được mô hình MVC và vai trò của các thành phần trong các Web framework hiện nay
2- Từ mô hình MVC chúng tôi xây dựng được một framework viết bằng PHP hoàn toàn mới (có nhiều ưu điểm so với các PHP Framework khác) – được đặt tên là Hiphop framework. Qua khóa luận này giới thiệu cách thức sử dụng và vận hành của một ứng dụng được viết bằng Hiphop framework
Hướng nghiên cứu tiếp theo sẽ là đánh giá lại mã nguồn Hiphop framework, về tốc độ thực thi và mức độ áp dụng các công nghệ mới của PHP5. Bên cạnh đó, triển khai xây dựng thêm nhiều lớp thư viện và và hàm hỗ trợ nhằm cung cấp cho các lập trình viên công cụ xây dựng ứng dụng web mạnh mẽ hơn, phong phú hơn.
TÀI LIỆU THAM KHẢO
[1] Thomas Mayer, “Professional CodeIgniter”, 2006
[2] Phạm Công Định, “Mô hình MVC và vai trò của các thành phần trong Web framework”. 2009
[3] David Upton, “CodeIgniter For Rapid PHP Application Development”, 2006 [4] Kevin McArthur, “Pro PHP Patterns Frameworks Testing and More”, Mar.2008 [5] Jason Gilmore, “Apress Beginning PHP and MySQL 5 From Novice to
Professional”. Appress, 2nd Edition Jan 2006
[6] Mehdi Achour, Friedhelm Betz, Antony Dovgal, Nuno Lopes, Hannes Magnusson. “PHP Manual”. www.php.net. 2010