Hiển thị các bài đăng có nhãn Codeigniter. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn Codeigniter. Hiển thị tất cả bài đăng

Tạo mới và sử dụng thư viện trong CodeIgniter

23:19 Thêm bình luận

Tạo mới thư viện

Một thư viện Codeigniter là một tập hợp các chức năng cố định, có tính logic cao và hợp lý, được thể hiện dưới dạng các lớp, cũng tương tự như các controller và model. Tuy nhiên các libraries lại được dùng để cung cấp các chức năng bên ngoài các controllers.

Bài viết này sẽ tập trung hướng dẫn các bạn cách tạo mới một thư viện và sử dụng thư viện đó trong hệ thống CodeIgniter.
Việc nâng cấp hoặc mở rộng những thư viện được dựng sẵn trong hệ thống cũng khá đơn giản, bạn có thể thêm xử lý, điều chỉnh xử lý hoặc thay thế hoàn toàn những xử lý có sẵn bên trong thư viện cũ đó bằng cách ghi đè phiên bản của thư viện trong thư mục application/libraries của bạn.
Tóm lược bài viết sẽ hướng dẫn cách:
  • Tạo một thư viện hoàn toàn mới của riêng bạn
  • Mở rộng những thư viện đã có sẵn của hệ thống
  • Thay thế hoàn toàn những thư viện cũ
Lưu ý: Ngoại trừ việc không thể ghi đè lớp thư viện database giúp thao tác và quản lý connection thì tất cả các lớp thư viện khác đều có thể mở rộng

Lưu trữ - Storage

Lớp thư viện của bạn nên được đặt trong thư mục application/libraries đây là nơi mặc định hệ thống sẽ load các thư viện khi khởi tạo. Bạn có thể đặt ở nơi khác nhưng phải cấu hình lại đường dẫn thư viện

Quy ước khi đặt tên

  • Tên file phải bắt đầu bằng một ký tự hoa và không chứa ký tự đặc biệt. VD: Mycar.php
  • Tên lớp phải bắt đầu bằng một ký tự hoa và không chứa ký tự đặc biệt. VD: class Mycar
  • Tên file phải trùng với tên lớp
Tóm lại: tên file và tên lớp phải trùng với nhau, phải bắt đầu bằng một ký tự in hoa và không được chứa ký tự đặc biệt.

Nguyên mẫu

Một lớp thư viện phải có nguyên mẫu cơ bản như sau
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Mycar {
public function turn_left(){
//code here ...
}

public function turn_right($sound){
//code here ...
}

public function go_along(){
//code here
return true; //Giá trị minh họa
}

public function stop($postion){
//code here
return true; //Giá trị minh họa
}
}
/* File Mycar.php */

Sử dụng thư viện

Ở mọi function nào trong bất kỳ controller nào bạn cũng có thể load thư viện mà bạn muốn dùng bằng câu lệnh
$this->load->library('Tên thư viện muốn gọi');

//Example: load Mycar class

$this->load->library('Mycar');

Để sử dụng những function ở bên trong thư viện chúng ta có thể sử dụng câu lệnh
$this->ten_thu_vien->ten_function(doi_so_neu_co);

//Ví dụ: chúng ta sẽ gọi function turn_left của thư //viện Mycar trong file Mycar.php
$this->Mycar->turn_left(); //Không có đối số truyền vào và trả về

//Ví dụ: chúng ta sẽ gọi function turn_right có đối số truyền vào
$this->Mycar->turn_right('olala');

//Ví dụ: chúng ta sẽ gọi function go_along có đối số trả về
$result = $this->Mycar->go_along();

//Ví dụ: chúng ta sẽ gọi function stop có đối số truyền vào và trả về
$result = $this->Mycar->stop('low');
Ngoài ra bạn cũng có thể truyền trực tiếp đối số (một giá trị hoặc một mảng các giá trị) khi load thư viện bằng cách sau
$params = array('type' => 'large', 'color' => 'red');
$this->load->library('Mycar', $params);
Trong lớp Mycar ở function __construct() chúng ta nhận về param để sử dụng
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Mycar {
public function __construct($params){
//Sử dụng param...
}

.........................
}
/* File Mycar.php */

Kết hợp với tài nguyên của hệ thống

Trong thư viện của bạn muốn sử dụng cái tài nguyên của hệ thống thì chúng ta phải sử dụng một siêu object được trả về từ function get_instance() Thông thường ở các class trong controller chúng ta sẽ gọi các resource có sẵn một cách dễ dàng như sau
$this->load->helper('url');
$this->load->library('session');
$this->config->item('base_url');
vv...
Nếu bạn sử dụng các tài nguyên của hệ thống trong lớp thư viện của bạn thì chúng ta sẽ phải làm như sau:
$CI =&get_instance();
$CI->load->helper('url');
$CI->load->library('session');
$CI->config->item('base_url');
vv...

Thay thế một thư viện của hệ thống

Để thay thế hoàn toàn xử lý của một thư viện có sẵn trong framework bằng một thư viện của bạn chúng ta dễ dàng thực hiện bằng cách đặt tên file và tên lớp giống hệt với tên thư viện của hệ thống. Ví dụ nếu bạn muốn thay thế hoàn toàn xử lý của class Email trên hệ thống bạn chỉ việc tạo ra thư viện Email trong application/libraries/Email.php với khai báo nhưu sau
class CI_Email {
//content
}

//Chú ý: hầu hết các thư viện của CI framework thì đều bắt đầu bằng tiền tố CI_
Việc thay thế xử lý không thể sử dụng cho class database
Để load thư viện Email chúng ta sử dụng cú pháp bình thường
$this->load->library('email');

Mở rộng thư viện có sẵn

Trong trường hợp bạn thấy thư viện viết sẵn của hệ thống vẫn thiếu một vài xử lý nhỏ để đáp ứng nhu cầu giải quyết bài toán bạn có thể viết lại tuy nhiên điều này là không cân thiết. Bạn chỉ cần mở rộng thư viện đã có để bổ sung thêm những xử lý bạn muốn là được. Ví dụ bạn muốn mở rộng thư viện Email có sẵn của hệ thống bạn sẽ tạo ra một class mới là My_Email nằm ở đường dẫn application/libraries/MY_Email.php
class MY_Email extends CI_Email {

public function __construct()
{
parent::__construct(); //Bạn có thể bỏ di nếu không muốn kế thừa construct của lớp cha
}
}

Thiết lập những tiền tố riêng cho thư viện mở rộng
==================================================

Nếu bạn muốn thay đổi những thiết lập tiền tố mặc định của hệ thống. Bạn chỉ cần mở file config **application/config/config.php** và tìm đến dòng sau
```php

$config['subclass_prefix'] = 'MY_';

Bạn chỉ cần chỉnh 'MY_' theo tiền tố mà bạn muốn.
Mặc định thư viện của hệ thống CI sử dụng tiền tố là CI_ nên bạn sẽ không được phép chọn tiền tố này.
Kính chúc các bạn tạo thành công thư viện. Bài viết có tham khảo bộ tài liệu chính thức của CI v2.2.0

Tích hợp KCFinder vào CKEditor trên Codeigniter 3

23:56 Thêm bình luận
Xin chào các bạn,
Việc tích hợp các trình các WYSIWYG Editor vào website để tối ưu hóa việc viết bài, cũng như chèn ảnh vào bài viết đang ngày càng phổ biến và gần như không thể thiếu với mỗi website. Tuy nhiên các công cụ này hầu như không tích hợp sẵn các công tụ Upload ảnh trực tiếp từ thiết bị, hoặc chỉ có các plugin kèm theo nhưng tính phí.
Bài viết ngắn dưới đây tôi tổng hợp cách tích hợp plugin upload ảnh miễn phí KCFinder vào CKEditor, đã chạy thử thành công, hi vọng sẽ hữu ích với những bạn đang cần.

Với những thiết lập dưới đây ta có thể:

- Tích hợp được KCFinder (free) vào CKEditor thay vì CKFinder (mất phí)
- Phân loại thư mục upload ảnh dựa vào session login của từng User

Chú ý nội dung

- Được thực hiện trên Codeigniter 3
- Các phiên bản CKEditor 4.6.2 & KCFinder 3.12 tại thời điểm 04/2017
- Tập trung vào việc tích hợp KCFinder trên CKEditor, nên quá trình cài đặt CKEditor xem như đã hoàn tất

Chuẩn bị

1. Tải CKEditor (Standard, Full...) tại: http://ckeditor.com/download
2. Tải KCFinder tại: https://kcfinder.sunhater.com/download
3. Cài đặt CKEditor
4. Giải nén kcfinder và chép vào thư mục ngang hàng với ckeditorSau khi làm xong kết quả như hình dưới (cấu trúc trên website của tôi)

Cấu hình
1. Mở file config.js trong ckeditor, thêm vào như dưới đây

CKEDITOR.editorConfig = function( config ) {
//KCFinder
config.filebrowserBrowseUrl = '/public/admin/plugins/kcfinder/browse.php?opener=ckeditor&type=files';
config.filebrowserImageBrowseUrl = '/public/admin/plugins/kcfinder/browse.php?opener=ckeditor&type=images';
config.filebrowserFlashBrowseUrl = '/public/admin/plugins/kcfinder/browse.php?opener=ckeditor&type=flash';
config.filebrowserUploadUrl = '/public/admin/plugins/kcfinder/upload.php?opener=ckeditor&type=files';
config.filebrowserImageUploadUrl = '/public/admin/plugins/kcfinder/upload.php?opener=ckeditor&type=images';
config.filebrowserFlashUploadUrl = '/public/admin/plugins/kcfinder/upload.php?opener=ckeditor&type=flash';
//... (các config khác của CKEditor)
}


2. Mở file browse.php trong kcfinder, thêm vào vào nội dung sau:
ob_start();
$temp_system_path = '../../../../system';
$temp_application_folder = '../../../../application'; include('../../../../index.php'); ob_end_clean();
--> đường dẫn trong include, $temp_system_path, $temp_application_folder mục đích trỏ đến file index.php của CI ở thư mục gốc.
--> Tùy vào đường dẫn thực tế trên website của bạn mà thêm bớt các dấu ../ phía trước cho phù hợp



3. Mở file index.php ở thư mục gốc, sửa như dưới đây:(Nếu không muốn sửa file index.php gốc, các bạn xem ghi chú cuối bài)
Tìm dòng: $system_path = 'system';
Sửa thành: $system_path = isset($temp_system_path) ? $temp_system_path : 'system';
Tìm dòng: $application_folder = 'application';
Sửa thành: $application_folder = isset($temp_application_folder) ? $temp_application_folder : 'application';
--> Có thể thêm dòng mới và comment // dòng cũ


4. Cấu hình SESSION
- Tại action đăng nhập thành công, cùng với việc set SESSION cho user ta thêm vào 2 session ['KCFINDER']['disabled'] = false;['KCFINDER']['uploadURL'] = 'duong/dan/den/thu/muc/upload';
// Check xong thông tin login
// Set data for session
$sess_data = array(
'id' => $id,
'fullname' => $user_fullname,
'KCFINDER' => array(
'disabled' => false, // Bật kcfinder cho phép upload (mặc định = true;)
'uploadURL' => base_url().'uploads/images/'.$user_fullname
)
);
// Hoặc có thể nhập theo cách dưới đây
$sess_data['id'] = $id;
$sess_data['fullname'] = $user_fullname;
$sess_data['KCFINDER']['disabled'] = false;
$sess_data['KCFINDER']['uploadURL'] = base_url().'uploads/images/'.$user_fullname;
// Sau khi nhập xong, thực hiệt set session
$this->session->set_userdata($sess_data);


5. Kết quả
Sau khi thực hiện xong, vào phần soạn thảo với CKEditor, nhấp vào nút chèn ảnh, sẽ có kết quả như hình dưới

Nhấn vào nút Duyệt máy chủ (Browse Server), sẽ cho ta upload và quản lý ảnh

** Ghi chú về file index.php
Nếu các bạn không muốn sửa trực tiếp trên file index.php ở thư mục gốc, hãy copy nó dán vào thư mục nào đó trong kcfinder, ví du thư mục config.
Sau khi copy index.php xong sửa 2 dòng:
$system_path = '../../../../system'; // Trỏ về thư mục system
$application_folder = '../../../../application'; //Trỏ về thư mục application
Sau đó mở file browse.php phía ngoài thư mục kcfinder xóa 2 dòng:
(Nếu bạn bỏ qua cấu hình phía trên thì không có 2 dòng này)
$temp_system_path = '../../../../system';
$temp_application_folder = '../../../../application';
Sau đó sửa nội dung include thành: indclue(config/index.php);
Kết thúc bài viết, chúc các bạn thực hiện thành công!
./.
Một số link đã tham khảo:
</KT_201704>
** Update (Codeigniter 3.1.7)
Mở file browse.php của KCFinder, sau dòng ob_end_clean(), thêm vào nội dung dưới đây:
  • Nếu sử dụng session driver là files (application/config/config.php)
$CI =& get_instance();
$CI->load->library('session');
  • Nếu sử dụng session driver là database
$CI =& get_instance();
$CI->db = $CI->load->database('default', TRUE); //TRUE mean: enable Query Builder
$CI->load->library('session');

Hướng dẫn cài đặt mô hình HMVC trên CodeIgniter

21:03 Thêm bình luận

Mô hình HMVC trên CodeIgniter là một mô hình cấu trúc vô cùng mạnh mẽ. Được thiết kế tối ưu hóa để áp dụng cho các hệ thống lớn. Nó giúp khả năng mở rộng vả quản lý hệ thống rất đơn giản. Trong bài này mình xin trình bày cách cài đặt mô hình HMVC trên Codeigniter

Các công cụ cần thiết.
- Plugin mô hình HMVC trên CodeIgniter https://github.com/jenssegers/CodeIgniter-HMVC-Modules
http://ellislab.com/codeigniter
http://filehippo.com/download_notepad
Trong bài Hướng dẫn cài đặt CodeIgniter theo mô hình MVC chúng ta đã biết về cấu trúc và những ưu điểm của mô hình này. Tuy nhiên, ta thấy rằng nếu hệ thống được mở rộng hơn ra thì sẽ sinh ra rất nhiều file trong cả 3 thư mục views, models và controllers. Khi đó hệ thống rất khó quản lý và bảo trì về sau này. Mô hình HMVC ra đời chính vì lý do này. Những ưu điểm của mô hình HMVC trên CodgeIgniter bao gồm :

- Khả năng Mô-đun hóa : Giảm sự phụ thuộc giữa các phần riêng biệt của hệ thống. 
Việc cài đặt mô hình HMVC trên Codeigniter được thực hiện theo các bước như sau.
Bước 1. Download plugin mô hình HMVC trên CodeIgniter.
Download file plugin về và giải nén ra ta sẽ có 2 phần là core và third_party như hình bên dưới.
Bước 2. Cài đặt vào hệ thống.
Đầu tiên copy 2 thư mục này vào thư mục application trong C:\AppServ\www\ci-test\application.

Tiếp theo, ta tạo một thư mục tên modules trong thư mục application
Sau đó, ta tạo thêm 1 thư mục tên là home trong thư mục modules. Đây chính là một phần của hệ thống theo mô hình HMVC. Tiếp sau đó, ta lần lượt tạo thêm 3 thư mục bao gồm controllersmodelsviews trong thư mục home vừa tạo trước đó.
Bước 3. Bắt đầu xây dựng module đầu tiên.
Trước tiên, ta tạo file home.php trong thư mục controllers C:\AppServ\www\ci-test\application\modules\home\controllers. Sau đó, copy đoạn code sau vào file này.
 <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Home extends CI_Controller{

public function __construct(){
parent::__construct();
}

public function index(){
// blank
}

public function user(){
$data['sz_Hmvc'] = "Cài đặt mô hình HMVC trên CodeIgniter !";
$this->load->view('home-template', $data);
}

}
Tiếp theo ta tạo tiếp file home-template.php vào thư mục views trong C:\AppServ\www\ci-test\application\modules\home\views. Rồi copy đoạn code sau đây vào file vừa tạo.
 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Title | Hướng dẫn cài đặt Codeigniter theo mô hình HMVC</title>
</head>
<body>
<div style="align:center;">
<h2>Hướng dẫn cài đặt Codeigniter theo mô hình HMVC</h2>
<?php echo $sz_Hmvc; ?>
</div>
</body>
Tiếp theo ta mở file routes.php trong thư mục config.php trong C:\AppServ\www\ci-test\application\config để điều hướng lại đường dẫn. Ta sẽ copy đoạn code sau vào trong file này.
 $route['default_controller'] = "home/index";
$route['home'] = "home/user";
Hướng dẫn cài đặt mô hình HMVC trên CodeIgniter
Bước 4. Chạy hệ thống trên trình duyệt.
Để kiểm tra xem quá trình cài đặt mô hình HMVC trên Codeigniter có thành công hay không, ta mở trình duyệt lên và gõ đường dẫn này vào http://localhost/ci-test/home/user.
Trên đây mình đã trình bày với các bạn cách thức cài đặt mô hình HMVC trên Codgeigniter. Sau này các bạn có thể mở rộng hệ thống theo quy trình tương tự (như hình bên dưới). Trong các bài tiếp theo chúng ta cũng bắt đầu sử dụng mô hình HMVC này để xây dựng dần các chức năng của một hệ thống hoàn chỉnh.
File mô hình HMVC trên Codeigniter
huong-dan-cai-dat-mo-hinh-hmvc-tren-codeigniter.zip
Chúc các bạn thành công :)
Nguồn: http://thuthuatvietnam.com/codeigniter