[CakePHP] Đếm số lượng khách truy cập và số người đang online

Trong bài viết hôm nay, tôi sẽ gởi đến các bạn một thủ thuật nhỏ để tăng sự phong phú, đa dạng về nội dung, hình thức website. Đó là hiển thị số lượng khách đã truy cập và số người hiện tại đang online trên website của bạn. Thủ thuật này được áp dụng cho các website sử dụng nền tảng CakePHP (phiên bản 1.3) .

Các bạn có thể đọc thêm bài viết này để hiểu thêm về CakePHP.

1, Tạo cơ sở dữ liệu

Đầu tiên các bạn cần tạo cở sở dữ liệu để lưu thông tin cần thiết, tạo một bảng user_onlines với câu lệnh SQL như sau

CREATE TABLE IF NOT EXISTS `user_onlines` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`ip_client` varchar(512) DEFAULT NULL,
`time_in` datetime DEFAULT NULL,
`time_out` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

2, Xử lý dữ liệu với Model và Controller

Tiếp theo chúng ta sẽ tạo các file trong thư mục Model và Controller để xử lý dữ liệu. Cụ thể như sau:

+ Bạn vào thư mục app/models và tạo file user_online.php với nội dung sau

<?php
class UserOnline extends AppModel {
var $name = 'UserOnline';
}
?>

+ Bạn mở file app_controller.php (nếu chưa có thì bạn nên tạo 1 file) trong thư mục app/controllers và chèn đoạn code sau đây:

<?php
class AppController extends Controller {
function beforeFilter() {
$this->online();
}
// Đếm số lượng online
function online() {
$online_session_id = $this->Session->id();
if (empty($online_session_id)) return ;
$this->loadModel('UserOnline');
$user_online = $this->UserOnline->findByIpClient($online_session_id);
$time_out = time() + 900 ;
if (empty($user_online) || $user_online == false) {
$user_online_new = $this->UserOnline->create();
$user_online_new['ip_client'] = $online_session_id;
$user_online_new['time_in'] = date('Y-m-d H:i:s',time());
$user_online_new['time_out'] = $time_out;
$this->UserOnline->deleteAll(array('UserOnline.time_out <=' => time()) , false , false);
$this->UserOnline->save($user_online_new);
} else {
$user_online['UserOnline']['time_out'] = $time_out;
$this->UserOnline->save($user_online);
}
}
}
?>

+ Tiếp theo bạn tạo 1 file là user_onlines_controller.php cũng trong thư mục app/controllers (file này có nhiệm vụ lấy dữ liệu thông qua Model và hiển thị thông tin ra ngoài View), sau đó mở file và chèn đoạn code sau:

<?php
class UserOnlinesController extends AppController {
var $name = 'UserOnlines';
// Đếm số người đang online
function soluong() {
$soluong = $this->UserOnline->find('count');
if (!empty($this->params['requested'])) {
return $soluong;
} else {
$this->set(compact('soluong'));
}
}
// Đếm số lượng khách truy cập
function tong_so_truy_cap() {
return $this->UserOnline->find('first', array('order' => array('UserOnline.id DESC')));
}
}
?>

3, Hiển thị thông tin ra ngoài View

Cuối cùng chúng ta sẽ hiển thị thông tin số khách truy cập và số người đang online ra ngoài View, ở đây tôi chọn hiển thị thông tin với element thay vì chọn layout bởi lẽ element linh hoạt hơn, với element bạn có thể áp dụng cho bất cứ vị trí nào của website mà bạn muốn.

Bạn tạo 1 file count_user_online.ctp trong thư mục app/views/elements với nội dung như sau:

<?php
// Lấy thông tin từ Controller
$tong = $this->requestAction('/user_onlines/tong_so_truy_cap');
$soluong = $this->requestAction('/user_onlines/soluong');
echo "Số lượt truy cập: " . $tong['UserOnline']['id'];
echo "Đang truy cập: " . $soluong;
?>

Hi vọng bài viết này giúp ích cho các bạn. Thân ái!

Tấn Việt

Tôi lập trang web này để thỏa mãn sở thích viết cái gì đó vui vui khi rãnh rỗi và đồng thời cũng chia sẻ những gì tôi biết hoặc đọc đâu đó trên mạng về Lập trình web. Tôi hi vọng những bài viết này sẽ giúp ích cho các bạn. Thân ái!

You may also like…

5 Responses

  1. Kiến Hâu says:

    Bạn ơi, cho hỏi plugin hiển thị code là gì được không? cảm ơn bạn nhiều

    • Tấn Việt says:

      Mình sử dụng Plugin CodeColorer để hiển thị code. Bạn có thể xem chi tiết tại đây. Và đây là trang tải Plugin: http://wordpress.org/plugins/codecolorer/

      • Fra Vie says:

        Chào bạn,
        Mình muốn hỏi một chút: Mình có tải xuống từ host một bộ code website (cakephp). Sau đó có đẩy nó vào localhost. Khi chạy thì website bị lỗi đường dẫn của các file css,jquery,… Mình print DOMAIN thì phát hiện DOMAIN chỉ là “http://localhost:81/” mà không phải là “http://localhost:81/tên_web”. Mình phải vào đâu để chỉnh sửa DOMAIN vậy bạn? Cảm ơn bạn nhiều nhé.

  2. Nguyễn Văn Sĩ says:

    Bạn ơi.
    Mình muốn tính số lượt truy cập theo ngày hôm nay, và ngày hôm qua.
    Theo code của bạn thì phải làm như thế nào?
    Bạn chỉ giúp mình với nhé.
    Thanks Bạn.

  3. huỳnh tấn dượng says:

    chào Việt
    – cho mình hỏi bạn một chút nhé! mình đang có 1 vấn đề là đếm số lượng view của một bài post.
    và làm sao để đém nó theo ngày,tuần,tháng
    – làm sao để lưu xg database và show lên web
    cảm ơn bạn nha, giúp mình