Thứ Hai, 5 tháng 12, 2011

PHP Cơ bản : Session trong php

Trong bài này mình sẽ nói chi tiết cách làm việc của PHP Session (còn session hay cookie là gì thì các bạn có thể google).

Thông thường để sử dụng Session trong php chúng ta sẽ khai báo ob_start() rồi sau đó mới gọi $_SESSION để đọc hoặc lưu trữ thông tin trên website.

Với cấu hình mặc định của php (php.ini) thì toàn bộ session sẽ được lưu lại trên server dưới dạng file (cụ thể là một thư mục nào đó phục thuộc vào cấu hình của php).

Theo như hình minh họa bên trên để tạo và gọi session chúng ta sẽ có các bước như sau:

  • Client sẽ tạo một request gởi đến server
  • Server sẽ đọc cookie để lấy php session id. (thông thường file session data sẽ được lưu trữ dựa theo php session id - ví dụ như ta có PHPSESSID là : mb5qjkthnu99dkiu7uj, thì session data sẽ được lưu trữ dưới dạng mb5qjkthnu99dkiu7uj_session_data ).
  • Nếu server tìm được php session id và session file trên server, sẽ tiến hành đọc file session data ấy
  • Còn nếu không tồn tại php session id ==> server sẽ tiến hành tạo mới php session id và xét php session id đó vào cookie (setcookie()), đồng thời tạo mới file session data và được đặt tên theo chính php session id vừa mới tạo.
Đến đây thì chúng ta đã có thể gọi và truy vấn biến $_SESSION bất cứ lúc nào.






Chủ Nhật, 4 tháng 12, 2011

Sử dụng controller template với Kohana

Trong post trước đó, mình đã giới thiệu cách cài đặt và viết những web page đơn giản với Kohana Framework. Nhưng để thuận tiện hơn trong vấn đề render các view thì chúng ta lại nghĩ đến việc sử dụng một template, với những thành phần đã được định sẵn, giúp có thể thay đổi bố cục của website một cách dễ dàng.

Để thực hiện được điều đó, chúng ta sẽ sử dụng class "Controller_Template" của kohana thay vì sử dụng class Controller theo như cách thông thường.

  • Class Controller_Template có vai trò gì ?
    Thực ra class Controller_Template vẫn kế thừa từ class Controller của kohana, nhưng khi sử dụng class Controller_Template chúng ta phải chỉ định $template mà chúng ta sẽ sử dụng, $template ở đây nôm na chính là tên file view cho chính controller của chúng ta.
    Ví dụ (cho thêm vài dòng code để dễ hiểu nhé):
    <?php
             class Controller_Welcome extends Controller_Template{
                    public $template = 'mytemplate';
                   
                    public function action_index(){
                            $this->template->content = 'Hi there !';
                    }    
             }
    ?>
    Bên trên mình đã kế thừa class Controller_Template cho controller Welcome. Khi sử dụng controller template thì chúng ta cần định nghĩa lại biến $template, nếu không giá trị mặc định sẽ là 'template', trong trường hợp này mọi action bên trong controller welcome sẽ sử dụng file template là 'mytemplate.php' trong folder views của kohana. Trong 1 action mình chỉ cần sử dụng biến $template như là một đối tượng view bình thường (vì controller template đã khỏi tạo biến template cho chúng ta).
  • Tại sao lại phải sử dụng class Controller_Template
    Cái chính khi sử dụng template là chúng ta muốn có một bố cục rõ ràng, không tốn quá nhiều code lặp đi lặp lại nhiều lần.
Mình sẽ đi vào vấn đề chính đó là sử dụng Controller_Template một cách sao cho có hiệu quả nhất, có thể cách của mình vẫn không là cách hay nhất nhưng các bạn vẫn có thể xem đó như là để tham khảo, với kohana khi bạn đã nắm được các api của nó bạn có thể làm được nhiều thứ hơn bạn tưởng :))

Mình sẽ không kế thừa trực tiếp controller_template cho các controller của mình, thay vào đó mình sẽ sử dụng 1 class riêng gọi là Controller_Layout, class này sẽ kế thừa Controller_Template, và tất cả controller     của mình sẽ kế thừa từ Controller_Layout này.

Code class Controller_Layout
<?php defined('SYSPATH') or die('No direct script access.');
class Controller_Layout extends Controller_Template
{
/**
      * Template file name
      */
public $template = 'layout';

protected $_scripts = array();
protected $_styles = array();

public function __construct($req, $res)
{
parent::__construct($req, $res);
}

public function before()
{
parent::before();

/**
   * Init your request 
   */
$this->template->title = 'Kohana Framework';

$this->template->header = View::factory('header');
$this->template->footer = View::factory('footer');
$this->template->content = View::factory('content');
}

public function after()
{
/**
    * Do stuff after invoked your action
    */
$scripts = array(
'jquery.min.js',
'core.js'
);

$styles = array(
'reset.css',
'common.css'
);

/**
* Append the script & style to template
*/
$this->template->scripts = array_merge($scripts, $this->_scripts);
$this->template->styles  = array_merge($styles, $this->_styles);

parent::after();
}

public function set_content(View $content)
{
$this->template->content = $content;
}
}

Nội dung của $template 'layout.php'

<html>
<head>
<title><?php echo $title; ?></title>

<?php foreach($scripts as $script): ?>
<script src="<?php echo $script; ?>"></script>
<?php endforeach; ?>

<?php foreach($styles as $style): ?>
<style linkrel="stylesheet" type="text/css" href="<?php echo $style; ?>"></style>
<?php endforeach; ?>
</head>
<body>
<div id="wrapper">
<?php echo $header; ?>

<?php echo $main; ?>

<?php echo $footer; ?>
<div>
</body>
</html>

Code của một controller:

<?php defined('SYSPATH') or die('No direct script access.');

class Controller_Welcome extends Controller_Layout {

public function action_index()
{
$this->_scripts = array(
'welcome.js'
);

$this->set_content(View::factory('main'));
}
} // End Welcome

Với Controller_Layout chúng ta có thể định nghĩa nhưng stylesheet hoặc javascript cần được load trong 1 trang và chúng ta vẫn có thể đưa thêm những css hay javascript khác cho từng controller hay action cụ thể nào đó.

Chủ Nhật, 7 tháng 8, 2011

Gởi mail với thư viện Swift Mailer

Mặc dù trong php đã hỗ trợ sẵn phương thức send mail (php mail),
bool mail ( string $to , string $subject , string $message [, string $additional_headers [, string $additional_parameters ]] )

Nhưng với phương thức này bạn cần phải cần thay đổi vài thông số cấu hình php ( trong php.ini), nếu môi trường chạy ứng ựng của bạn là localhost, thì việc thay đổi cấu hình không là vấn đề gì, còn nếu ứng dụng của bạn chạy trực tiếp trên internet, được đặt trên một dịch vụ share hosting, khi đó bạn lại phụ thuộc vào những thông số cấu hình của chính host bạn đang dùng.

Mặc khác nếu bạn đã có riêng cho mình một mail server riêng ( hoặc những mail server free như GMAIL) và bạn muốn sử dụng nó cho chức năng gởi mail trong website của mình mà không bị phụ thuộc vào những cấu hình của php thì bạn có thể sử dụng những thư việc có sẵn và miễn phí để thay thế cho mail function trong php.

Trong bài này mình sẽ hướng dẫn các bạn sử dụng thư viện Swift Mailer để xây dựng chức năng gởi mail trong site của mình.



Swift Mailer là một thư viện mở, cung cấp cho người sử dụng ngoài chức năng cơ bản là gởi mail, với việc hỗ trợ những mail server có yêu cầu phải chứng thực thông qua username và password hay kiểu mã hoá dữ liệu. Bên cạnh đó Swift Mailer còn hỗ trợ trong vấn đề bảo mật email, đính kèm tập tin dữ liệu ….
Được viết theo mô hình hướng đối tượng nên tạo cảm giác quen thuộc cho người sử dụng.

Để sử dụng thư viện này, đầu tiên chúng ta sẽ tải về từ http://swiftmailer.org/ , sau đó giải nén và ta được một folder là SwiftMail, chúng ta sẽ copy folder này vào sử dụng trong ứng dụng của chúng ta.

code gởi mail của mình sẽ như sau:
<?php

require_once 'SwiftMail/lib/swift_required.php';

// Tạo đối tượng transport
$transport = Swift_SmtpTransport::newInstance('smtp.gmail.com',465,'ssl');
$transport->setUsername('your email');
$transport->setPassword('you email password');

// Tạo đối tượng mailer sẽ đãm nhận nhiệm vụ gởi mail đi
$mailer = Swift_Mailer::newInstance($transport);

//Tạo message để gởi đi
$message = Swift_Message::newInstance(' My subject ', ' My message that will be sent to you ');

$message->setFrom('sender@gmail.com');
$message->addTo('receiver@gmail.com');

// Gởi message
$mailer->send($message);

?>

Trong đoạn demo này mình sử dụng mail server của chú google với host là smtp.gmail.com và port là 465 với kiểu giao tiếp là 'ssl'.
vậy cơ bản là chúng ta đã hoàn thành việc sử dụng Swift Mailer để gởi mail.

DEMO : http://clgt.phpfogapp.com/demo/
DOWLOAD : http://clgt.phpfogapp.com/demo.zip

Thứ Bảy, 9 tháng 7, 2011

Gmail + Youtube new design

Từ tháng bảy Goolge bắt đầu thay đổi giao diện hàng loạt các ứng dụng của mình, đầu tiên là trang chủ tìm kiếm của google

Tiếp sao đó google tung ra mạng xã hộ G+, hiện đang trang phiên bản Testing.
Tiếp theo sao là đến các ứng dụng như Gmail  + Youtube và Blogger





Chủ Nhật, 3 tháng 7, 2011

Tạo liên kết button bắt mắt với CSS3


Có thể nhiều bạn sẽ thắc mắc liên kết button là j ? thật ra chỉ là một liên kết được custom có hình dáng như 1 button thông thường mà thôi.
Chúng ta vẫn sử dụng tag <a></a> cho một liên kết trong website, còn nói đến button thì chúng ta sẽ nghĩ tới tag <button> hay <input type="submit" /> hay <input type="button"/>. Còn tag <a> thường được sử dụng cho các liên kết đến các site hoặc các bài viết liên quan trên website.

Nhưng đôi khi chúng ta lại cần những liên kết với những đoạn text ngắn chẳng hạn như : "link","ok","cancel" ... để thực hiện những đoạn script nhỏ mà chúng ta mong muốn.

Nào chúng ta hãt bắt đầu :
như đã nói trong hướng dẫn này mình sẽ dùng các thẻ <a> để tạo ra những button.

<a>Button</a>

// Tiếp theo chúng ta sẽ tuỳ chỉnh css cho thẻ <a> đó như sau:

a{
font-weight: bold;
        color: #fff;
display: block;
padding: 5px 10px;
background-color: #4a8bf5;
float: left;
text-decoration: none;
border: 1px solid #4688f2;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
opacity: 0.9;
}

Khi đó chúng ta sẽ được như thế này:
Button


Tiếp theo chúng ta cần tạo một số hiệu ứng khi rê chuột vào button và khi click trên button đó.
Để thực hiện được hiệu ứng đó mình sẽ tận dụng các cú pháp của Pseudo-class làm điều đó.

// tạo thêm các border top, left, right cho button khi button được click
a:active{
color: #e9e9e9 ;
background-color: #4a8bf5;
border-top: 2px solid #1a6cef !important;
border-left: 1px solid #1a6cef !important;
border-right: 1px solid #1a6cef !important;
padding: 5px 10px 4px 10px;
}


a:hover{
opacity: 1;
border: 1px solid #3c61d6;
}

Và đây là kết quả của chúng ta:
Button


bạn có thể thấy được sự khác biệt của 2 button.

Hy vọng các bạn thích bài viết này.
Chúc mọi người một ngày vui vẻ :)

Thứ Bảy, 2 tháng 7, 2011

Tạo hình tam giác với CSS


Demo
Chat with me!

Thông thường chúng ta sẽ không để ý đến việc một border sẽ như thế nào khi kích thước của chúng lớn hơn nhiều so với thẻ chứa. Một trong các ứng dụng của kỹ thuật này là tạo ra các mũi tên (arrow) như demo trên. Chúng ta cũng có thể bắt gặp kỹ thuật này được sử dụng trên trang của Youtube.

Khi mới bắt đầu với html & css thì chúng ta sẽ nghĩ ngay tới việc dùng ảnh thay thế cho mũi tên trên. Nhưng giờ chúng ta đã có thể sử dụng kỹ thuật này mà không cần dùng đến bất kỳ một image nào ( thật thú vị phải không nào).

Vậy bắt đầu nào !

- Đầu tiên mình xin bắt đầu với một vài dòng css :

.css-border-multicolor {
  border-color: red green blue orange;
border-style: solid;
      border-width: 4px
  width: 50px;
  height: 50px;
}
và đây là kết quả :



Còn tiếp ....

Nguồn : http://jonrohan.me/guide/css/creating-triangles-in-css

Thứ Sáu, 1 tháng 7, 2011

Google Plus (G+) beta version.

Một mạng xã hội mới từ nhà tìm kiếm khổng lồ Google (Google +). Mặc dù đang trong phiển bản thử nghiệm, nhưng G+ đã khiến khá nhiều người nghiện mạng xã hội tò mò muốn được trãi nghiệm qua.

Một số hình ảnh từ G+ của mình :



Một số tính năng nổi bật như chia sẽ thông tin, hình ảnh video cũng như các mạng xã hội khác cũng được google tích hợp một cách hoàn hảo. Với google thì việc tìm kiếm và share link trên mạng xã hội sẽ trở nên dễ dàng hơn so với facebook.

G+ được tích hợp với Picasa hỗ trợ việc chia sẽ hình ảnh, trong phiên bản mới này google cho phép người dùng có thể tag những người thân hay bạn bè lên ảnh giống như nhũng j mà facebook đã thực hiện.




Thứ Tư, 15 tháng 6, 2011

Bắt đầu với PHP Kohana Framework

Tiếp theo bài giới thiệu về Kohana Framework, hôm nay chủ bút xem tiếp tục chia sẽ đến những ai đang quan tâm đến Framework này để làm thế nào tạo một trang mini web một cách nhanh chóng.
  1. Đầu tiên bạn nên tải version mới nhất của kohana framework ( phiên bản hiện tại là 3.1.3.1)
  2. Tiếp theo giải nén file zip source code
    Chúng ta sẽ đuợc cấu trúc thư mục cơ bản của một kohana project như sau:

Và bây giờ hãy thử kiểm tra môi trường (enviroments) server trên máy bạn có đủ để hỗ trợ cho kohana không. Đưa project lên server, và bắt bắt tay vào việc thôi. Mặc định sẽ có 1 file install.php trong kohana source code, để kiểm tra xem server có đáp ứng hầu hết các required để có thể run kohana php framework hay không.
Hình bên dưới là kết quả khi test enviroment trên localhost:

Nếu bạn passed đuợc thì tiếp tục nhé :)
Đối với những bạn đã và đang làm quen với ngôn ngữ php thì việc review code của Kohana cũng sẽ không gặp bất cứ trở ngại nào.

Kohana cũng như nhưng Php mvc framework khác, kohana cũng có các khái niệm như controller, model, view.
Mặc định một controller sẽ đuợc gọi như sau trong kohana:
http://localhost/<controller_name>/<action>
ở đây mình sử dụng localhost để làm ví dụ.
Nhìn thật là đơn giản nhĩ.

Vậy chúng ta hãy bắt đầu tạo một trang hiện tạo một controller đơn giản với kohana.
Đầu tiên mình sẽ tạo một controller và đặt tên là home, trong folder classes/controller mình tạo file home.php và nội dung file như sau:
<?php
class Controller_Home extends Controller
{
        public function action_index()
       {
               $this->response->body(‘Welcome’);
       }
}

Theo như class Controller_Home chúng ta sẽ có controller name là home và action name là index
Vậy url đầy đủ để gọi controller đó là http://localhost/home/index, nếu màn hình hiện chử Welcome thì có nghĩa là web của bạn đã đuợc cấu hình chính xác.

Cơ bản mình chỉ hướng dẫn tới đây. Vẫn còn nhiều thứ hấp dẫn chờ các bạn phía trước. Nếu gặp bất cứ vấn đề j trong quá trình cài đặt kohana hãy liên hệ mình sẽ sẵn lòng giúp đỡ bạn trong khả năng có thể :) (không giám nói là sẽ giải quyết hết đươc tất cả).

Thứ Hai, 13 tháng 6, 2011

Kohana PHP Framework

Giới thiệu Kohana PHP Framework !


Với phiên bản hiện tại 3.1.3.1 (stable) thì gần như kohana đã đáp ứng đầy đủ những features cần thiết để giúp người lập trình web(php) có thể dễ dàng xây dựng một website theo mô hình MVC một cách nhanh chóng.

Kiến trúc của Kohana Framework đuợc thiết kế một cách khá linh động,  giúp người sử dụng vừa sử dụng các features có sẵn mà kohana cung cấp, đồng thời cho phép mở rộng (extends) các features mà không làm ảnh hưởng đến hệ thống.

Một số  tính năng nổi bật của kohana :
  • Dễ dàng mở rộng hệ thống khi cần thiết
  • Dễ dàng cập nhật các phiên bản kohana framework mới
  • Dễ dàng tích hợp các vendors bên ngoài như các php template engines (smary, twig , rain tpl...), mail sender (swiff mail), tinymce ....
  • Tích hợp sẳn một số component: encryption, validation, data access (ORM), code profiling
Link liên quan: 

Thứ Bảy, 1 tháng 1, 2011

HTML5 - Geolocations

Geolocation là một trong những tính năng mới khá thú vị mà được hỗ trợ trong phiên bản HTML5.
Khi nhắc tới geolocation thì chúng ta sẽ nghĩ đến các khái niệm như tọa độ (kinh độ và vĩ độ), vậy thì nó được tính hợp với html5 như thế nào ?.

Hiện tại thì HTML5 geolocation được hỗ trợ tốt trên các nền điện thoại thông minh, với sự hỗ trợ của các thiết bị GPS (
Global Positioning System) được tích hợp sẵn trên điện thoại.

Mình xin đi vào chi tiết cách sử dụng tính năng này:
do đây là tính năng mới và còn phụ thuộc vào trình duyệt, để sử dụng được chúng, ta sẽ sử dụng object navigator của browser mà bạn đang dùng, cụ thể như sau:
window.navigator.geolocation.getCurrentPosition(showMyPosition,errorCallback);
  • getCurrentPosition : phương thức giúp chúng ta lấy được vị trí hiện tại của user
  • showMyPosition : một callback function (phương thức này được gọi sau khi phương thức getCurrentPosition trả về thành công)
  • errorCallback : một callback function (phương thức được gọi nếu xảy ra lỗi trong quá trình lấy vị trí của user)
bản thân object geolocation hỗ trợ các phương thức sau:
void getCurrentPostition (successCallback,errorCallback) : chỉ lấy vị trí hiện tại của user
long watchPosition (successCallback,errorCallback) : lấy vị trí hiện tại của user và đồng thời tracking(theo dỏi) theo vị trí của user nếu có sự thay đổi vị trí
void clearWatch(long watchId) : chấm dứt chức năng tracking vị trí của user
successCallback (position) : phương thức này nhận 1 tham số position - chính là vị trí hiện tại của user
errorCallback (errorCode) : errorCode - chi tiết thông tin lỗi

chi tiết về các property của từng object các bạn có thể tham khảo trực tiếp trên http://www.w3.org/TR/html5/

Vậy thì các trình duyệt sẽ dựa vào dữ liệu nào từ phía user để lấy thông tin về vị trí của user và các trình duyệt sẽ lấy chúng từ đâu ?
  • các trình duyệt sẽ sử dụng các hỗ trợ từ thiết bị phần cứng GPS trên điện thoại của bạn để trả về chính xác vị trí hiện tại
  • vậy nếu bạn không có GPS hardware thì sao ? khi đó trình duyệt sẽ sử dụng dựa vào thông tin của các cell phone (trạm phát sóng) gần đó để tính toán vị trí của bạn.
  • vậy nếu bạn dùng trên PC thì các browser sẽ sử dụng thông tin nhà cung cấp dịch vụ mạng mà bạn đang sử dụng hay sẽ dựa vào các cột sống wifi gần đó , nhưng kết quả trả về sẽ không đảm bảo độ chính xác cao (chỉ mang tính tham khảo).
Theo mình biết thì hiện nay các trình duyệt như Google Chrome và Firefox đều có hỗ trợ tính năng này. Đối với Chrome và Firefox đều sử dụng dịch vụ google để lấy thông tin vị trí của user.