ចំនាយពេល ៤ ម៉ោងកន្លះដើម្បីបង្កើត Web Template អត់ដេកអត់ពួន
យប់មិញនេះ ទាល់តែម៉ោង២.៣០រំលងអទ្រាតបានចួលគេង ព្រោះនឹកឃើញចង់ រចនា Template Website មួយមើលយ៉ាងមិចទៅវិញ។ រូបខាងលើនេះជាលទ្ធផល អត់ដេកអត់ពួន ៤ ៥ម៉ោងរបស់ខ្ញុំ។
Template នេះខ្ញុំរចនាឡើងសំរាប់គេហទំព័រ សាពត៌មាន ទស្សនាវដ្តី ទូរទស្សន៍ និយាយអោយចំទៅគឺសំរាប់ បណ្តាញសាពត៌មាន។
វា support ជាមួយ IE6+, Firefox1+, Opera, Safari2, Google Chrome។ ប្រសិនប្រិមិត្តមានចំណាប់អារម្មណ៍ ហើយចង់រចនា Template សំរាប់ប្លក់ផ្ទាល់ខ្លួននោះសូមទាក់ទងមកខ្ញុំ ខ្ញុំជួយរចនាជួនដោយមិនគិតថ្លៃអ្វីទាំងអស់។
អ្វីទៅជា Cheat Sheet ?
Cheat Sheet ជាដ្យាក្រាមបង្រូមមួយ ដែលបង្ហាញពីតូនាទី សកម្មភាព រចនាសម្ព័ន្ធ របស់កម្មវិធីអ្វីមួយ។ សំរាប់ Programmer ឬ Developer ការប្រើ Cheat Sheet ពិតជាមានផលប្រយោជន៍ខ្លាំងណាស់ យើងមិនចាំបាច់ចំណាយពេលច្រើនក្នុងការស្វែងរកអ្វីមួយក្នុងកម្មវិធីនោះ តូយ៉ាងដូចជា HTML Cheat Sheet (រូបខាងលើ) វាបានបង្ហាញមកទាំងអស់ នូវ HTMl Tag ដែលយើងអាចស្វែងរកបានក្នុងរូបភាពខាងលើ ។
នៅក្នុង Cheat Sheet នេះបានបែងចែកទៅតាមប្រភេទរបស់វា ដួចជានៅក្នុង HTML យើងអាចសែ្វងរក Tab និមួយទៅតាមប្រភេទរបស់វាដូច Link, Table, Form, Object…
មិនថាតែកម្មវិធី ភាសា សូម្បីវត្ថុអីមួយដែលយើងបានបង្កើត យើងក៏អាចបង្កើត Cheat Sheet បានផងដែរ វាជាការបង្រូមពីការពន្យល់នៃការប្រើប្រាស់វត្ថុដែលយើងបានបង្កើតនោះ សំរាប់អ្នកប្រើទួទៅ។
សូមទាញយក Cheat Sheet បន្ថែមដូចខាងក្រោមនេះ
- PHP
- Cakephp
-Prototype
-Jquery
-Mootools
-SEO (Search Engine Optimization)
សាកល្បង Ajax ជាមួយភាសា Server-Side PHP
Ajax មកពីពាក្យ Asynchronous JavaScript and XML វាមានដើមកំនើតក្នុង ឆ្នាំ2005 សូមមើលអត្ថបទរបស់លោក Jesse James Garrett។Ajax បានធ្វើអោយ Web Application មានការពេញនិយមជាង Desktop Application នាពេលបច្ចុប្បន្ននេះ ព្រោះវាអាចភ្ជាប់ទៅកាន់ Sever ដោយមិនចាំបាច់ Refresh Page ដូចជាភាសា Server-Side(PHP, ASP.NET, JSP…)។
សូមមិនរៀបរាប់ច្រើនទេអំពី Ajax សូមើល http://www.w3schools.com បន្ថែម។ ខាងក្រោមនេះជាឧទាហរណ៍ ពីការប្រើប្រាស់ Ajax សង្ឃឹមថានេះ ជាឧទាហរណ៍មួយជួយបង្ហាញផ្លូវដល់អ្នកដែលចង់ស្វែងយល់អំពី Ajax។


១ បង្កើត index.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>AJAX with PHP: Quickstart</title>
<script type="text/javascript" src="ajax.js"></script>
<style type="text/css">
.message{
color:red;
}
</style>
</head>
<body onload='process()'>
សូមបញ្ចួលឈ្មោះត្រង់នេះ:
<input type="text" id="myName" />
<div id="divMessage" class="message"></div>
</body>
</html>
សំរាប់បង្ហាញ message ពី ajax សូមមើលរូប ខាងក្រោម

២បង្កើត ajax.js
/*
*author: PRAK Sophy
*email: sophy.prak@gmail.com
*website: http://kooms.wordpress.com
*/
// រក្សាទុក XMLHttpRequest object ក្នុង xmlHttp variable ពី function createXmlHttpRequestObject()
var xmlHttp = createXmlHttpRequestObject();
// function ចាប់យក XMLHttpRequest object ពី browser
function createXmlHttpRequestObject()
{
// will store the reference to the XMLHttpRequest object
var xmlHttp;
// ប្រសិនបើយើងដំណើការលើ Internet Explorer
if(window.ActiveXObject)
{
try
{
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e)
{
xmlHttp = false;
}
}
//សំរាប់ Mozilla ឬ browsers ផ្សេងទៀត
else
{
try
{
xmlHttp = new XMLHttpRequest();
}
catch (e)
{
xmlHttp = false;
}
}
// return ការបង្កើត object ឬ បង្ហាញសារ error ប្រសិនបើយើងមិនអាចបង្កើត xmlHttp
if (!xmlHttp)
alert("មិនអាចបង្កើត XMLHttpRequest object.");
else
return xmlHttp;
}
// បង្កើត asynchronous HTTP request ដោយប្រើ XMLHttpRequest object
function process()
{
//ដំណើរការប្រសិនបើ xmlHttp object មិនរវល់
if (xmlHttp.readyState == 4 || xmlHttp.readyState == 0)
{
// ចាប់យកឈ្មោះដែលបានបញ្ចួលដៅយអ្នកប្រើប្រាសពី form
name = encodeURIComponent(document.getElementById("myName").value);
// ប្រតិបត្តការ firstajax.php page ពី server
xmlHttp.open("GET", "firstajax.php?name=" + name, true);
// define the method to handle server responses
xmlHttp.onreadystatechange = handleServerResponse;
// make the server request
xmlHttp.send(null);
}
else
// ប្រសិនបើ connection ជាប់រវល់ វានឹងព្យាយាមម្តងទឿត បន្ទាប់ពី ១ វិនាទីក្រោយមក
setTimeout('process()', 1000);
}
// executed automatically when a message is received from the server
// ដំណើរការដោយស្វ័យប្រវត្ត ពេលដែលសាត្រូវបានបញ្ជួនពី Server
function handleServerResponse()
{
// ដំណើការ ប្រសិនបើ transaction ត្រូវបានបំពេញចប់
if (xmlHttp.readyState == 4)
{
// status of 200 indicates the transaction completed successfully
//status = 200 មានន័យថា Transaction បានបញ្ចប់ដោយជោកជ័យ
if (xmlHttp.status == 200)
{
//ចំលងចេញ XML ទទួលបានពី server
xmlResponse = xmlHttp.responseXML;
// បានជា document element (the root element) of the XML structure
xmlDocumentElement = xmlResponse.documentElement;
// get the text message, which is in the first child of
// the the document element
helloMessage = xmlDocumentElement.firstChild.data;
// update the client display using the data received from the server
document.getElementById("divMessage").innerHTML =
'<i>' + helloMessage + '</i>';
// restart sequence
setTimeout('process()', 1000);
}
// a HTTP status different than 200 signals an error
else
{
alert("មានបញ្ហាកើតឡើងនៅពេលដែល access ទៅកាន់ server: " + xmlHttp.statusText);
}
}
}
៣ បង្កើត file firstajax.php
ជា PHP Script នៅផ្នែក Server-side ajax អាចដំណើការបាន ដោយពឹងផ្អែកទៅ ផាសា Server-Side។
ត្រូវបានហៅមកប្រើដោយកូដ javascript ក្នុង ajax.js នៅផ្នែក Client-Side ។
<?php
// we'll generate XML output
header('Content-Type: text/xml');
// generate XML header
echo '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>';
// create the <response> element
echo '<response>';
// retrieve the user name
$name = $_GET['name'];
// generate output depending on the user name received from client
$userNames = array('KOOMS', 'SOPHY', 'AROCORE', '4KHMER', 'YODA');
if (in_array(strtoupper($name), $userNames))
echo 'សូស្តី ' . htmlentities($name) . '!';
else if (trim($name) == '')
echo 'អាចប្រាប់ខ្ញុំបានទេ តើអ្នកឈ្មោះអី?';
else
echo htmlentities($name) . ', ខ្ញុំមិនស្គាល់អ្នកទេ';
// close the <response> element
echo '</response>';
?>
បង្កើត Pagination ជាមួយ PHP និង Mysql

វិធីបំបែកទំព័រចេញជាផ្នែកៗ ជាគំនិតមួយដែលកំពុងពេញនិយម សំរាប់អ្នកបង្កើត និង រចនា គេហទំព័រ។ វិធីនេះភាកច្រើន គេប្រើនៅពេលដែលទាញទិន្នន័យចេញពី Database ហើយទិន្នន័យនោះមានចំនួនច្រើន គេត្រូវបំបែកវាដាក់ជាច្រើនទំព័រ ដើម្បីងាយមើល និងធ្វើអោយគេហទំព័រដំណើរការលឿនទៀតផង។
ខាងក្រោមនេះជាការបង្ហាញពីការ បំបែកទំព័រជាផ្នែកៗ ជាមួយភាសា PHP និង Mysql ដែលខ្ញុំបានប្រើជាមួយ គំរោងរបស់ខ្ញុំកន្លងមក។
១.បង្កើត Database និង Table
ដំបូងយើងត្រូវមាន Database រូចហើយត្រូវបង្កើត Table ។ ខ្ញុំបង្កើតដាតាបេស មួយឈ្មោះ learnphp ហើយ table ឈ្មោះ product
CREATE TABLE `product` (
`id` int(10) unsigned NOT NULL auto_increment,
`name` varchar(50) NOT NULL default ” ,
`price` decimal(10,2) NOT NULL default ‘0.00′,
`on_promotion` tinyint(4) NOT NULL default ‘0′,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=57 ;
រូចបញ្ចូលទិន្នន័យខាងក្រោមនេះ(សូមបញ្ជាក់លោកអ្នកអាចបញ្ចួលវាអោយច្រើនជានេះក៏បានដែរ)
INSERT INTO `product` (`id`, `name`, `price`, `on_promotion`) VALUES
(1, ‘Santa Costume’, ‘14.99′, 0),
(2, ‘Medieval Lady’, ‘49.99′, 1),
(3, ‘Caveman’, ‘12.99′, 0),
(4, ‘Costume Ghoul’, ‘18.99′, 0);
២. បង្កើត file ‘config.php’
file នេះបានកំនត់ Constant មួយចំនូនដែលចាំបាច់ភ្ជាប់ទៅកាន់ Database
<?php
// defines database connection data
define('DB_HOST', 'localhost');//host name
define('DB_USER', 'root');// Database user
define('DB_PASSWORD', '');//database password
define('DB_DATABASE', 'learnphp'); //database name
// defines the number of visible rows in grid
define('ROWS_PER_VIEW', 10);//ចំនូនដែលត្រូវបង្ហាញក្នុង ទំព័រនីមួយៗ
?>
៣. បង្កើត Class ‘database.class.php’
class នេះមានទូនាទីទាញយក ទិន្នន័យពី database, កំនត់ចំនួន Product ដែលត្រូវបង្ហាញ និងចំនួនទំព័រដែលត្រូវបំបែកចេញ។
ប្រហែលប្លែកពីអ្នករាល់គ្នាធ្លាប់ប្រើហើយមើលទៅ ចំពោះការភ្ជាប់ កាន់ database ខ្ញុំបានប្រើ class Mysqli ដើម្បីភ្ជាប់ទៅកាន database។ ព្រោះ Mysqli
មានលក្ខណះជា OOP ហើយងាយស្រូលប្រើ វា support តែ PHP5 ឡើងទៅ។
<?php
/**
*Database class to connect to database
*author: Prak Sophy
*email:sophy.prak@gmail.com
*phone:011735918
*date:28-01-2009
*/
require_once('config.php');
class Database
{
/*
* ចំនួនទំព័រសរុប
*/
public $totalPages;
/*
* ចំនួន product
*/
public $itemCount;
/*
* ទំព័រដែលត្រូវផ្តល់អោយ
*/
public $returnedPage;
/*
* database handler
* to use Mysqli Class support php 5.x
*/
private $mMysqli;
/*
* Table name to use
*/
private $tableName;
/*
* Class Contructor
*/
function __construct($table)
{
// create the MySQL connection
$this->mMysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD,
DB_DATABASE);
$this->tableName = $table;
// call countAllRecords to get the number of grid records
$this->itemCount = $this->countAllRecords();
}
// class destructor, closes database connection
function __destruct()
{
$this->mMysqli->close();
}
/*
* count all products
* @return number of product rows
*/
private function countAllRecords()
{
// Query select count product
$query = "SELECT COUNT(*) FROM $this->tableName";
if ($result = $this->mMysqli->query($query))
{
$row = $result->fetch_row();
$result->close();
}
return $row[0];
}
public function readPages($page)
{
// create the SQL query that returns a page of products
$query = $this->createSubpageQuery("SELECT * FROM $this->tableName", $page);
if ($result = $this->mMysqli->query($query))
{
$i=0;
while($rows = $result->fetch_assoc())
{
$row[$i]['id'] = $rows['id'];
$row[$i]['name'] = $rows['name'];
$row[$i]['price'] = $rows['price'];
$row[$i]['on_promotion'] = $rows['on_promotion'];
$i++;
}
//return row of product
return $row;
$result->close();
}
}
private function createSubpageQuery($query,$pageNo)
{
// if we have few products then we don't implement pagination
if ($this->itemCount <= ROWS_PER_VIEW)
{
$pageNo = 1;
$this->totalPages = 1;
}
// else we calculate number of pages and build new SELECT query
else
{
$this->totalPages= ceil($this->itemCount / ROWS_PER_VIEW);
$start_page = ($pageNo - 1) * ROWS_PER_VIEW;
$query.= ' LIMIT ' . $start_page . ',' . ROWS_PER_VIEW;
}
// save the number of the returned page
$this->returnedPage = $pageNo;
// returns the new query string
return $query;
}
}
?>
៤. បង្កើត file ‘product.php’ ដើម្បី test class ‘database.class.php’
<style type="text/css">
a span{
margin-left:2px;
}
</style>
<?php
require_once 'database.class.php';
//request page number
$page = intval($_REQUEST['page']);
//page number 0 or less than 0
if($page <= 0)
$page =1;
$products = new Database('product');
//read page and get products
$rows = $products->readPages($page);
//Write pagination
echo 'Pages:';
for($i=1; $i <= $products->totalPages; $i++)
{
echo '<a href="products.php?page='.$i.'"><span>'.$i.'</span></a>';
}
?>
<table border="1" cellspacing="0" width="400">
<thead>
<th>Id</th>
<th>Name</th>
<th>Price</th>
</thead>
</tbody>
<?php
if(count($rows )>0)
{
foreach ($rows as $row )
{
echo '<tr><td>'.$row['id'].'</td>';
echo '<td>'.$row['name'].'</td>';
echo '<td>'.$row['price'].'</td></tr>';
}
}
?>
</tbody>
</table>







