Thứ Năm, 11 tháng 9, 2014

Tô màu cho ảnh đen trắng bằng Photoshop

Bạn có một số bức ảnh đen trắng và muốn biến nó thành ảnh màu để nó có thể trông thú vị hơn. Để biến ảnh đen trắng thành ảnh màu có rất nhiều cách. Sau đây, là bài hướng dẫn các bạn cách sử dụng chức năng Curves trong Adobe Photoshop để biến ảnh đen trắng thành ảnh màu.

Bước 1: Mở tấm hình gốc bằng phần mềm Photoshop. Để có thể lên màu cho ảnh vào Image → Mode → CMYK Color.
bien anh den trang sang anh mau 1 Tô màu cho ảnh đen trắng bằng Photoshop


Bước 2: Nếu như bức ảnh của bạn quá tối khiến các đường nét không rõ ràng. Nhấn Ctrl + L và điều chỉnh thông số để hình nhìn rõ hơn. 
bien anh den trang sang anh mau 2 Tô màu cho ảnh đen trắng bằng Photoshop



Bước 3: Chọn vùng tô màu. Đầu tiên mình dự định tô màu da. Nhấn W để sử dụng công cụ Magic Wand Tool. Nhấn Shift + click chuột vào vùng da trên hình để chọn hết vùng liên quan đến da.
bien anh den trang sang anh mau 3 Tô màu cho ảnh đen trắng bằng Photoshop



Bước 4: Nhấn Q (công cụ Edit in Quick Mask Mode) để chỉnh sửa vùng chọn.
4.1. Nhấn B để sử dụng công cụ Brush để tô lên những phần không thuộc vùng da.
4.2 Nhấn E để sử dụng công cụ Eraser để tô lên những vùng thuộc vùng da.
bien anh den trang sang anh mau 4 Tô màu cho ảnh đen trắng bằng Photoshop


Bước 5: Nhấn Q. Vùng chọn của bạn sẽ hiện lên như sau:
bien anh den trang sang anh mau 5 Tô màu cho ảnh đen trắng bằng Photoshop



Bước 6: Vào Layer → New Adjustment Layer → Curves. Điều chỉnh các thông số cho thích hợp để tô màu cho vùng chọn. 
bien anh den trang sang anh mau 7 Tô màu cho ảnh đen trắng bằng Photoshop


Kết quả:
bien anh den trang sang anh mau 8 Tô màu cho ảnh đen trắng bằng Photoshop



Bây giờ bạn đã có một bức hình màu thay vì bức hình đen trắng lúc đầu rồi. Chúc bạn thành công!

Hook trong Drupal

Với nhiều người khi bắt đầu theo học lập trình Drupal là lần đầu tiên nghe đến khái niệm Hook trong Drupal thực ra Hook trong drupal cũng giống như trong các ứng dụng khác, nó là 1 cơ chế cho phép chúng ta (các developer) tương tác vào một quá trình xử lý khác mà chúng ta không có quyền sửa đổi quá trình xử lý đó bằng cách sửa code.
Ý nghĩa về hook trong drupal
Nguyên tắc trong drupal là khi ta viết một module mà muốn "sửa" module đã có trước đó thì không được phép "hack code" của module đó, nhưng đôi khi chúng ta lại có nhu cầu sửa đổi module khác. Hook ra đời cho phép chúng ta thực hiện điều này.
Ví dụ khi ta viết module có chức năng notify cho user khi có 1 sự thay đổi trên nội dung của 1 node, mà không phải sửa code trong module node. Lúc này module node cho phép chúng ta tương tác với quá trình xử lý của nó thông qua hook mà nó cung cấp (hook_node_update).
Các cách gọi thực thi 1 hook trong drupal
Nhìn tổng quan về mặt kỹ thuật thì kỹ thuật gọi một hàm hooks trong drupal đi qua hai bước cơ bản:
Bước 1: Xác định danh sách các module có hàm implements hooks xác định.
Bước 2: Gọi thực thi các hàm xác định được.
Với bước 1 chúng ta có 2 cách:
Cách 1: Sử dụng hàm get_function_defined().
Lấy danh sách các hàm được khai báo trong drupal lên.
Lấy danh sách các hàm do user khai báo.
Sử dụng regular expression để lấy danh sách các hàm theo mẫu xác định.
Cách 2: Kiểm tra danh sách các module định nghĩa hook
Lấy danh sách các module được bật lên (enable).
Ứng với mỗi module xác định tên hàm hooks theo mẫu: modulename_hookname (với module là tên modulename, hookname là tên hook)
Với bước 2 chúng ta có 2 cách:
Cách 1: Sử dụng các hàm call_function_array.
Phương pháp này ứng dụng khi gọi một hàm mà không biết danh sách các tham số của nó, và danh sách tham số khác.
Cách 2: Sử dụng phương pháp gọi tên hàm trực tiếp ($function($param1, $param2, $param3).
Phương pháp này được sử dụng khi gọi một hàm mà biết chắc chắn tham số của nó.
Về performance và phân tích ưu nhược điểm của 2 phương pháp trên xem thêm tại:http://www.garfieldtech.com/blog/magic-benchmarks.
 hook_hook_info
Bình thường các hooks sẽ được khai báo trong các file .install, .module, trong trường hợp chúng ta định nghĩa ra một hooks mới hoặc muốn chuyển các hook sang một file khác(khác với file .module, .install) để khai báo lúc đó chúng ta sẽ sử dụng hàm này để khai báo cho drupal biết hooks này được định nghĩa ở đâu.
Ngoài ra chúng ta còn có nhu cầu khi một số hooks ít khi được gọi, và nó khai báo nhiều (nhiều code), nếu chúng ta khai báo trong các file .module, .install thì sẽ không hợp lý, nhằm nhu cầu tăng performance cho ứng dụng drupal của drupal chúng nên khai báo các hàm implements hook này trong một file khác nhằm tăng tốc độ cho chương trình. (vì các hàm này ít khi sử dụng tới).
Ví dụ
<?php
function mymodule_hook_info() {
  $hooks['myhook'] = array(
    'group' => 'myhook',
  );
  return $hooks;
}
?>
- Từ nay trở về sau chúng ta có thể implement hook myhook trong module của chúng ta ở trong file .mymodule.inc trong module của chúng ta.

Thứ Tư, 10 tháng 9, 2014

Sự khác biệt Giữa MVC và WebForm

 Trong lập trình web với ASP.net, các bạn có thể sử dụng ViewState để quản lý ASP.net WebForm, các trang ASP.net đều có lifecycle, postback và dùng các web controls, các event để thực hiện các hành động cho UI (User Interface) khi có sự tương tác với người dùng nên hầu hết ASP.net WebForm xử lý chậm.
-  ASP.net MVC chia ra làm 3 phần: Models, View, Controller. Mọi tương tác của người dùng với Views sẽ được thực hiện hành động trong Controllers, không còn postback, lifecycel và events.
-  Việc kiểm tra (test), gỡ lỗi (debug) với ASP.net WebForm đều phải chạy tất cả các tiến trình của ASP.net, và sự thay đổi ID của bất kỳ Controls nào cũng ảnh hưởng đến ứng dụng. Đối với MVC thì việc đó có thể sử dụng các unit test có thể thẩm định rất dễ dàng các Controllers thực hiện như thế nào.

-  Sau đây là bảng so sánh các tính năng của ASP.net WebForm với ASP.net MVC


Các tính năng
ASP.net WebForm
ASP.net MVC
Kiến trúc chương trình
Kiến trúc mô hình WebForm –> Bussiness –> Database
Kiến trúc sử dụng việc phân chia chương trình thành: Models, Views, Controllers
Cú pháp chương trình
Sử dụng cú pháp của WebForm, tất cả các sự kiện và controls do server quản lý
Các sự kiện được điều khiển bởi controllers, các controls không do server quản lý.
Truy cập dữ liệu
Sử dụng hầu hết các công nghệ truy cập dữ liệu trong ứng dụng
Phần lớn dùng LINQ và SQL class để tạo mô hình truy cập đối tượng.
Debug
Debug phải thực hiện tất cả bao gồm các lớp truy cập dữ liệu, sự hiển thị, điều khiển các controls.
Debug có thể sử dụng các unit test để kiểm tra các phương thức trong controllers.
Tốc độ phân tải
Tốc độ phân tải chậm khi trong trang có quá nhiều các controls vì ViewState quá lớn
Phân tải nhanh hơn do không phải quản lý ViewState để quản lý các controls trong trang.
Tương tác với JavaScript
Tương tác với JavaScript khó khăn vì các controls được điều khiển bởi server
Tương tác với JavaScript dễ dàng vì các đối tượng không do server quản lý điều khiển không khó
URL address
Cấu trúc địa chỉ URL có dạng:
<filename>.aspx?&<các tham số>
Cấu trúc địa chỉ rành mạch theo dạng Controllers/Action/ID

KHAI BÁO HÀM TRONG PHP

KHAI BÁO HÀM TRONG PHP

Khi học PHP, các khai báo hàm do người sử dụng định nghĩa cho phép bạn xử lý những tác vụ thường lặp đi lặp lại trong ứng dụng.
Để khai bao hàm, bạn sử dụng từ khoá function với cú pháp tương tự như sau:

function functioname($parameter)
{return value;
}

    
Trong trường hợp hàm không có giá trị trả về thì hàm được xem như thủ tục. Ngoài ra, bạn có thể khai báo tham số tuỳ chọn bằng cách gán giá trị mặc định cho tham số. Ví dụ chúng ta khai báo:

function functioname($parameter1, $parameter2=10 )
{
 return value;
}
    
Đối với trường hợp này thì tham số $parameter1 là tham số bắt buộc và tham số $parameter2 là tham số tuỳ chọn, khi gọi hàm nếu không cung cấp tham số cho $parameter2 thì tham số này có giá trị là 10.
Ví dụ, bạn khai báo trang function.php có hàm getResult nhận hai số và phép toán sau đó tuỳ thuộc vào phép toán hàm trả về kết quả. Nếu người sử dụng không cung vấp phép toán thì mặc định là phép toán +.
Trang function.php

<HTML>
<HEAD>
<TITLE>::Welcome to PHP</TITLE>
</HEAD>
<BODY>
<h4>Function</h4>
<?php
function getResult($number1, $number2,$operstor="+")
{
$result=0;
switch($operator)
{
case "+":
$result=$number1+$number2;
break;
case "-":
 $result=$number1-$number2;
break;
case "*":
$result=$number1*$number2;
break;
case "/":
if($number2!=0)
$result=$number1/$number2;
else
break;
case "%":
$result=0;
if($number2!=0)
$result=$number1%$number2;
 else
break;
}
$result=0;
return $result;
}
echo "result of default operator: ".getResult(10,20);
echo "<br>";
echo "result of * operator: ".getResult(10,20,"*");
?>
</BODY>
</HTML>

    
Nếu muốn định nghĩa function không có giá trị trả về, bạn có thể khai báo trong trang void.php như ví dụ sau:
Trang void.php
...
 function calloperator()
{
 echo "result of default operator: ".getResult(10,20);
echo "<br>";
echo "result of * operator: ".getResult(10,20,"*");
}
calloperator();
?>
</BODY>
</HTML>
Trong trường hợp truyền tham số như tham biến, bạn sử dụng ký hiệu & trước tham số, chẳng hạn chúng ta khai báo hàm có tham biến có tên average như trong trang reference.php như sau:
Trang referencces.php
<HTML>
<HEAD>
<TITLE>::Welcome to PHP</TITLE>
</HEAD>
<BODY>
<h4>Function</h4>
<?php
function getAmount($quantity, $price,&$average)
{
$result=0;
$result=$quantity*$price;
$average=$result*6/12;
return $result;
}


$bq=0;
echo "result is : ".getAmount(10,20,$bq);
echo "<br>";
echo "result of Average is : ".$bq;
echo "<br>";
function getAmounts($quantity, $price,$average)
{
$result=0;
$result=$quantity*$price;
$average=$result*6/12;
return $result;
}
$bq=0;
echo "result is : ".getAmounts(10,20,$bq);
echo "<br>";
echo "result of Average is : ".$bq;
?>
</BODY>
</HTML>
Trong trường hợp trên thì hàm getAmount có tham số $average là tham biến còn hàm getAmounts có tham số $average là tham trị, và kết quả trả về của biến $bq khi gọi hàm getAmount là 100 trong khi đó giá trị của biến này trong hàm getAmounts là 0.

Xây dưng tập tin định dạng nội dung

Khi trình bày nội dung trên trang HTML hay trang PHP, để thống nhất định dạng chuỗi trong thẻ body hay thẻ div chẳng hạn bạn cần khai báo thẻ style trong thẻ
 <head>
.

   <style> A {
Corlor: #003063;
TEXT-DECORATION: none
}
A:hover {
COLOR: #003063;
TEXT-DECORATION: underline
}
A:link {
FONT-WEIGHT: bold; COLOR: red;
TEXT-DECORATION: none
}
A:visited {
FONT-WEIGHT: bold; COLOR: black;
TEXT-DECORATION: none
}
.title {
FONT-WEIGHT: normal; FONT-SIZE: 22px
}
.text{
FONT: 11px Arial, Helvetica, sans-serif
}
</style>

    
Trong đó, A tương ứng với liên kết (chuỗi trong thẻ
<a>
) có định dạng ứng với trường hợp liên kết, di chuyển con chuột, chọn liên kết.

A {
COLOR: #003063;
TEXT-DECORATION: none
}
A:hover {
 COLOR: #003063;
TEXT-DECORATION: underline
}
A:link {
FONT- WEIGHT: bold; COLOR: red;
TEXT-DECORATION: none
}
A:visited {
FONT-WEIGHT: bold; COLOR: black;
TEXT-DECORATION: none
}
    
Chẳng hạn, chúng ta khai báo trang PHP với nội dung được áp dụng với kiểu định dạng khai báo trong thẻ style như ví dụ 4
Khai báo thẻ Style
<%@ page contentype="text/html; charset=UTF-8" %>
<html>
<head>
<title>Style trong PHP</title>
<style> A {
COLOR: #003063;
TEXT-DECORATION: none
}
A:hover {
COLOR: #003063;
TEXT-DECORATION: underline
}
A:link {
FONT-WEIGHT: bold; COLOR: red;
TEXT-DECORATION: none
}
A:visited {
FONT-WEIGHT: bold; COLOR: black;
TEXT-DECORATION: none
}
.title {
FONT-WEIGHT: normal; FONT-SIZE: 22px;
COLOR: #003063;
}
.text{
FONT: 11px Arial, Helvetica, sans-serif
}
</style>
</head>
<body>
<h4>style tag</h4>
<TABLE cellSpacing=0 cellPadding=0
width="100%" border=0>
<TR>
<TD vAlign=top class=title>
*** Quản Trị SQL Server 2000 *** </TD>
</TR>
<TR>
<TD class=text>
<div align=justify>
Tìm hiểu cách cài đặt, cấu hình, quản trị, backup & restore, import & export, thiết kế, lập trình, tự động hoá tác vụ quản trị,bản sao dữ liệu, bảo mật và chống thâm nhập dữ liệu bằng.
<b>SQL Injection</b>.</div>
</TD>
</TR>
<TR><TD><hr size=1 color=red></TD</TR>
<TR><TD>Welcome to
<a href='www.huukhang.com' class=>
www.huukhang.com</a></TD
</TR>
</TABLE>
</body>
</html>

 
Khi triệu gọi trang style.PHP trên trình duyệt, nội dung của trang webđược định dạng theo thẻ stylenhư hình 1.
Áp dụng thẻ style
Tương tự như vậy khi bạn muốn thống nhất nội dung trong những thẻ khác của một trang web thì khai báo một định dạng trong thẻ style. Tuy nhiên, khi đặt tên trùng với thẻ HTML, mọi thẻ đó trong trang sẽ cùng chung một định dạng. Chẳng hạn, bạn khai báo định dạng cho thẻ td như sau:
TD {
FONT: 10px Arial, Helvetica, sans-serif
}
 


 
Mọi nội dung trình bày trong thẻ td sẽ có định dạng như trên. Nếu bạn muốn có định dạng khác thì khai báo thuộc tính class cho thẻ td đó, ví dụ sử dụng định dạng khác cho thẻ td:
<td class=text>ABC</td>
Thay vì chuỗi ABC sẽ có định dạng là FONT: 10px Arial, Helvetica, sans-serif thì chúng sẽ có định dạng của FONT: 11px Arial, Helvetica, sans-serif.
Chú ý rằng, trong mỗi trang web bạn phải khai báo thẻ style và định nghĩa thống nhất cho các thẻ. Khi có sự thay đổi bạn phải thay đổi trong mọi trang web. Để sử dụng chung cho mọi trang web trong ứng dụng, bạn cần xây dựng một tập tin style, tập tin được biết đến với tên gọi custom style sheet (css).
Bất kỳ trang web nào trong ứng dụng, muốn áp dụng kiểu định dạng trong tập tin css thì khai báo liên kết tập tin cssbằng thẻ link.
Ví dụ, chúng ta khai báo tập tin style.css bao gồm các định dạng như ví dụ 5
Khai báo tệp tin css

A {
COLOR: #003063;
TEXT-DECORATION: none
}
A:hover {
COLOR: #003063;
TEXT-DECORATION: underline
}
A:link {
FONT-WEIGHT: bold; COLOR: red;
TEXT-DECORATION: none
}
A:visited {
FONT-WEIGHT: bold; COLOR: black;
TEXT-DECORATION: none
}
.title {
FONT-WEIGHT: bold; FONT-SIZE: 14px;
COLOR: #003063;
}
.text{
FONT: 11px Arial, Helvetica, sans-serif
}



    
Sau đó trong trang PHP, bạn khai báo liên kết tập tin này bằng thẻ link, nếu muốn áp dụng định dạng này trong mỗi thẻ HTML bạn sử dụng thuộc tính class như khai báo định dạng của thẻ style ngay trong trang đó như ví dụ 6.
Khai báo sử dụng tập tin css

<html>
<head>
<title>
Welcome to Link Style Sheet File
</title>
<LINK href='style.css' rel=stylesheet>
<META http-equiv=Content-Type content="text/html; charset=utf-8">
</head>
<body>
<h4>Style File</h4>
<TABLE cellSpacing=0 cellPadding=0
width="100%" border=0>
<TR>
<TD vAlign=top class=title>
*** Quản Trị SQL Server 2000 *** </TD>
</TR>
<TR>
<TD class=text>
<div align=justify>
Tìm hiểu cách cài đặt, cấu hình, quản trị, backup & restore, import & export, thiết kế, lập trình, tự động hoá tác vụ quản trị, bản sao dữ liệu, bảo mật và chống thâm nhập dữ liệu bằng.
<b>SQL Injection</b>.</div>
</TD>
</TR>
<TR><TD><hr size=1 color=red></TD</TR>
<TR><TD>Welcome to
<a href='www.huukhang.com' class=>
www.huukhang.com</a></TD
</TR>
</TABLE>
</body>
</html>

Triệu gọi trang includestyle.php trên trình duyệt như hình 3, màu và kích thước font cùng với kiểu chữa của nội dung không thay đổi so với style.php, bởi vì phần thẻ style được tách ra thành tập tin style.css, sau đó dùng thẻ link để liên kết tập tin css này vào trang PHP trở lại.
Liên kết tập tin css
Chú ý rằng, nếu khai báo thuộc tính class trong thẻ <table> thì những nội dung trong thẻ <table> sẽ có định dạng theo định dạng khai báo trong thuộc tính class. Tương tự, nếu khai báo thuộc tính class trong thẻ <tr> thì nội dung trong thẻ<tr> sẽ có định dạng giống như định dạng khai báo trong thông tin class.

THỐNG NHẤT KÍCH THƯỚC CỦA MỌI TRANG PHP

Khi xây dựng ứng dụng web chuyên nghiệp, điều đầu tiên bạn nên quan tâm là sự thống nhất về kích thước của các phần trên trang web. Điều này có nghĩa là khi người sử dụng thay đổi trang web khi duyệt, phần top, left, right, bottom có kích thước như nhau.
Để làm điều này, bạn chia trang web ra thành 5 phần: top, left, right, body và bottom. Phần top thường trình bày các thuộc tính như quản cáo (baner)logo (biểu tượng của công ty), menu (thực đơn của ứng dụng) và một số thông tin khác.
Phần left là thông tin về các menu phụ hay còn gọi là menu của menu chính, bên cạnh menu con này trang web thường có các liên kết về liên hệ, quảng cáo, mailing list (đăng ký email), gởi đến bạn bè (send to friend), ....
Đối với phần right, thường là phần giới thiệu về các thông đặc biệt và quảng cáo, chẳng hạn đối với ứng dụng bán sách, phần right thường là danh sách các nhóm sách bán chạy, sắp phát hành, ...
Phần bottom thường thông tin liên lạc của công ty, chủ nhân của website và bản quyền. Ngoài ra, phần bottom đôi khi là danh sách các menu con khác.
Tóm lại, tuỳ thuộc vào ý tưởng thiết kế mỗi phần như trên bao gồm các thuộc tính mà nhà thiết kế cần trình bày sao cho phù hợp. Tuy nhiên, phần bodylà phần trình bày nội dung chính của mỗi trang web. Ngoài ra, tuỳ vào từng trường hợp cụ thể, trang web có thể không có phần left và right .
Như vậy, chúng ta sẽ chia trang webra thành 5 phần, phần bodychính là phần chính của trang web đó, còn 4 phần còn lại được chèn vào khi có nhu cầu.
Chẳng hạn, có những trang web do thông tin trình bày trong phần bodynhiều, nên cần không gia lớn hơn, bạn có thể không cần sử dụng hai phần leftvà right.
Để làm điều này, trước tiên chúng ta thiết kế trang sample.phpcó 5 phần như hình 3.
Trang sample.php
  • Tạo một table gồm 3 hàng 3 cột và khai báo border=1 để đễ canh lề sau đó bạn có thể khai báo lại thuộc tính này bằng 0.
  • Phần top và bottom là một hàng và merge 3 cột thành 1.
  • Bên trong mỗi phần có thể có một hay nhiều thẻ table khác.
  • Có thể không có phần left và right nhưng bắt buộc phần top và bottom phải có.
  • Bạn có thể sử dụng chiều rộng của table theo kích thước tương đối (%) hay số chỉ định, đối với màn hình 600*800 thì chiều rộng thường sử dụng là 780, khi người sử dụng chọn độ phân giải của màn hình lớn hơn thì kích thước của table này không thay đổi, trong khi đó nội dung sẽ phủ đầy màn hình khi bạn khai báo kích thước theo 100%.
Để có giao diện như trang sample.php như trên, bạn có thể khai báo như ví dụ 7.
Nội dung trang sample.PHP

<html>
<head>
<title>
Welcome to Including File
</title>
<LINK href='style.css' rel=stylesheet>
<META http-equiv=Content-Type content="text/html; charset=utf-8">
</head>
<body bottomMargin=0 leftMargin=0
topMargin=0 rightMargin=0>
<TABLE cellSpacing=2 cellPadding=2
width="778" border=1 align=center>
<TR HEIGHT="100">
<TD  Align=center colspan=3>
TOP
</TD>
</TR>
<TR HEIGHT="280">
<TD vAlign=top width="20%">
LEFT
</TD>
<TD vAlign=top width="60%">
BODY
</TD>
<TD vAlign=top width="20%">
RIGHT
</TD>
</TR>
<TR HEIGHT="50">
<TD colspan=3 align=center>
BOTTOM
</TD
</TR>
</TABLE>
</body>
</html>


    
Trong trường hợp bạn muốn có đường phân cách giữa mỗi phần bằng image, bạn có thể khai báo lại trang sample.phpcó 5 hàng và 5 cột như templalte.php như hình 4.
Phâncách có viềng
Để trình bày trang template.php như hình 4, bạn khai báo nội dung trang này như ví dụ 8.
Khai báo template.php

<html>
<head>
<title>
Welcome to Including File
</title>
<LINK href='style.css' rel=stylesheet>
<META http-equiv=Content-Type content="text/html; charset=utf-8">
</head>
<body bottomMargin=0 leftMargin=0
topMargin=0 rightMargin=0>
<TABLE width="778" border=0 cellSpacing=0
cellPadding=0 align=center>
<TR HEIGHT="100">
<TD  Align=center colspan=5>
TOP
</TD>
</TR>
<!---Khai báo đường phân cách--->
<TR HEIGHT="1">
<TD colspan=5 bgcolor=gray></TD>
</TR>
<TR HEIGHT="280">
<TD vAlign=top width="150">LEFT</TD>
<!---Khai báo đường phân cách--->
<TD bgcolor=gray width="1"></TD>
<TD vAlign=top width="476">BODY</TD>
<!---Khai báo đường phân cách--->
<TD bgcolor=gray width="1"></TD>
<TD vAlign=top width="150">RIGHT</TD>
</TR>
<!---Khai báo đường phân cách--->
<TR HEIGHT="1">
<TD colspan=5 bgcolor=gray></TD>
</TR>
<TR HEIGHT="50">
<TD colspan=5 align=center>
BOTTOM
</TD
</TR>
</TABLE>
</body>
</html>
    
Sau đó tách trang template.phpnày thành 5 trang khác nhau được đặt tên tương ứng là top.htm, left.htm, right.htm bottom.htm, trong đó phần body tương ứng với trang template.php.
Để khai báo chèn tập tin trong trang PHP, bạn sử dụng cú pháp như sau:
<?php include("filename");
?>

    
Hay
<?php require("filename");
?>

    
Trong đó trang template.php khai báo chèn top.htl , left.htm, right.htm và bottom.htm như ví dụ 9.
Khai báo chèn tập tin trong templates.php
<html>
<head>
<title>
Welcome to HUUKHANG.COM
</title>
<LINK href='style.css' rel=stylesheet>
<META http-equiv=Content-Type content="text/html; charset=utf-8">
</head>
<body bottomMargin=0 leftMargin=0
topMargin=0 rightMargin=0>
<TABLE width="778" border=0 cellSpacing=0
cellPadding=0 align=center>
<TR HEIGHT="100">
<TD  Align=center colspan=5>
<?php include("top.htm")?>
</TD>
</TR>
<!---Khai báo đường phân cách--->
<TR HEIGHT="1">
<TD colspan=5 bgcolor=gray></TD>
</TR>
<TR HEIGHT="280">
<TD vAlign=top width="150">
<?php include("left.htm")?>
</TD>
<!---Khai báo đường phân cách--->
<TD bgcolor=gray width="1"></TD>
<TD vAlign=top width="476">BODY</TD>
<!---Khai báo đường phân cách--->
<TD bgcolor=gray width="1"></TD>
<TD vAlign=top width="150">
<?php include ("right.htm")?>
</TD>
</TR>
<!---Khai báo đường phân cách--->
<TR HEIGHT="1">
<TD colspan=5 bgcolor=gray></TD>
</TR>
<TR HEIGHT="50">
<TD colspan=5 align=center>
<?php include("bottom.htm")?>
</TD
</TR>
</TABLE>
</body>
</html>


   
Khi triệu gọi trang template.php, nội dung của 4 trang left.htmright.htm, top.htm,bottom.htm chèn vào trangtemplate.php như hình 5.
Trang templates.php sau khi chèn
Trong đó, nội dung của trang top.htm định nghĩa tương tự như ví dụ 10
Nội dung trang top.htm


<TABLE width="100%" border=0 cellSpacing=0
cellPadding=0 HEIGHT="100%" align=center>
<TR >
<TD  width="150"  Align=center> LOGO
</TD>
<TD   Align=center> BANNER
</TD>
</TR>
<TR HEIGHT="1">
<TD  colspan=2 bgcolor=gray></TD>
</TR>
<TR HEIGHT="20%" bgcolor=black  class=menu>
<TD  width="150" > Welcome
</TD>
<TD>
Home | Search | Contact | Help
</TD>
</TR>
</TABLE>


    
Nội dung của tập tin left.htm được định nghĩa tương tự như ví dụ 11
Nội dung trang left.htm

<TABLE width="100%" border=0 cellSpacing=0
cellPadding=0 HEIGHT="100%" align=center>
<TR >
<TD  width="150"  Align=center> LEFT
</TD>
</TR>
</TABLE>

    
Nếu có sử dụng trang right.htm thì nội dung của tập tin này được định nghĩa tương tự như ví dụ 12
Nội dung trang right.htm

<TABLE width="100%" border=0 cellSpacing=0
cellPadding=0 HEIGHT="100%" align=center>
<TR >
<TD  width="150"  Align=center> FREE ADV
</TD>
</TR>
</TABLE>

    
Tương tự như vậy, trang bottom.htm có nội dung như ví dụ 13
Nội dung trang bottom.php

<TABLE width="100%" border=0 cellSpacing=0
cellPadding=0 HEIGHT="100%" align=center>
<TR class=text>
<TD Align=center> HUUKHANG.COM<br>
Copyright ©2000-2005. All Rights Reserved.
</TD>
</TR>
</TABLE>
    
Trong mỗi trang khai báo chèn không có các thẻ đóng và mở html, body bởi khi chèn thì nội dung của tập tin được chèn sẽ được chèn vào tập tin bị chèn và trong tập tin bị chèn đã có hai thẻ này.
Kịch bản trình chủ PHP hỗ trợ các tập tin được chèn với các tên mở rộng như htm, PHP, inc, lib, html. Do thực chất của việc khai báo chèn là chèn đoạn mã trong tập tin chèn vào tập tin bọ chèn, trong trường hợp này trang chèn htm hay PHP đều giống nhau đó là lý do tại sao các trang chèn ở trên đều có tên mở rộng là htm.
Tuy nhiên, khi bạn gọi trang chèn này một mình ví dụ tom.htm, nếu bên trong có mã PHP thì mã đó không được thông dịch. Nếu những trang chèn này có nhu cầu gọi một mình thì bạn có thể chuyển chúng thành trang PHP thay vì htm như đã trình bày.
Sau khi có được trang templates.php, bạn có thể sử dụng trang này là mẫu cho các trang khác bằng cách save as thành các trang PHP khác khi lập trình. Khi khai báo chèn tập tin, bạn có thể sử dụng đường dẫn tương đối hoặc tuyệt đối của tập tin chèn so với tập tin bị chèn.

TẬP TIN DÙNG CHUNG

Ngoài cách chèn ở trên, nếu bạn có những hàm sử dụng chung cho các trang PHP khác thì bạn khai báo thành một trang PHP khác sau đó dùng cú pháp chèn tập tin để chèn chúng vào khi có nhu cầu.
Ví dụ trong trường hợp này chúng ta muốn sử dụng chung hàm có tên getPaging nhận 5 tham số $totalRows (tổng số mẩu tin), $curPg (số trang hiện hành), $pg (số trang trình bày), $re (số mẩu tin trên 1 trang), $file (trang php cần gọi) trong tập tin paging.php.

<?php
function paging($totalRows,$curPg,$pg,$re,$file)
{
$paging="";
$mxR = $re;
$mxP = $pg;
if($totalRows%$mxR==0)
$totalPages = (int)($totalRows/$mxR);
 else
 $totalPages = (int)($totalRows/$mxR+1);
$curRow = ($curPg-1)*$mxR+1;
if($totalRows>$mxR)
{
$start=1;
$end=1;
$paging1 ="";
for($i=1;$i<=$totalPages;$i++)
{
if(($i>((int)(($curPg-1)/$mxP))* $mxP) && ($i&lt;=((int)(($curPg-
1)/$mxP+1))* $mxP))
{
if($start==1) $start=$i;
if($i==$curPg)
$paging1 .=  $i."&nbsp;&nbsp;";
else
{
$paging1 .= "<a class=lslink  href='$file";
$paging1 .="&page=".$i."'>".$i;
$paging1 .="</a>&nbsp;&nbsp;";
}
$end=$i;
}
}
$paging.= "Trang :&nbsp;&nbsp;" ;
if($curPg>$mxP)
{
$paging .="<a class=lslink href='$file";
$paging .="&page=".($start-1);
$paging .="'>Previous</a>&nbsp;&nbsp;";
}
$paging.=$paging1;
if(((($curPg-1)/$mxP+1)*$mxP) < $totalPages)
{
$paging .= "<a class=lslink href='$file";
$paging .="&page=".($end+1);
$paging .="'>Next</a>&nbsp;&nbsp;";
}
}
return $paging;
}
?>
Sau đó khai báo trang result.php, chèn tập tin paging.php và gọi hàm getPaging như sau:
<html>
<head>
<title>
Welcome to HUUKHANG.COM
</title>
<LINK href='style.css' rel=stylesheet>
<META http-equiv=Content-Type content="text/html; charset=utf-8">
</head>
<body bottomMargin=0 leftMargin=0 topMargin=0 rightMargin=0>
<?php
include("paging.php");
echo paging(47,2,10,5,"result.php?x=10");
?>
</body>
</html>
    
Kết quả trả về như hình 6 sau
Hàm dùng chung