Sixhead Template PHP Template Engine ไทยทำตอนที่ 2
เริ่มต้นหัดใช้งาน Sixhead Template กันครับ กับตัวอย่างพร้อมคำอธิบายง่ายๆ ที่คุณจะรู้ว่า ใช้ Sixhead Template นี้ไม่ยากอย่างที่คิด อืมเริ่มแรกนี้ผมขอให้ลืม ตัวอย่าง Script ที่พี่โป้ทิ้งไว้ให้เลยครับ (อ้าว :P)
คือตัวอย่างที่พี่โป้ทิ้งไว้ให้น่าจะเหมาะกับคนที่เคยศึกษาเคยใช้งานมาแล้ว แต่ถ้าคุณยังไม่เข้าใจหลังการ ลองค่อยๆศึกษาไปตามตัวอย่างของผมดีกว่า
หัดใช้ display()
## _tp_template1.html ##
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>$title</title>
</head>
<body bgcolor="#FFFF99">
<table width="100%" border="0" cellspacing="0" cellpadding="5">
<tr>
<td bgcolor="#66CC66"><h1>$header</h1></td>
</tr>
<tr>
<td bgcolor="#FFFFFF">$content</td>
</tr>
<tr>
<td align="center" bgcolor="#FFCCCC">$footer</td>
</tr>
</table>
</body>
</html>
<?php
## test1.php ##
require_once "../SiXhEaD.Template.php";
$tp = new Template("_tp_template1.html");
$tp->display();
exit;
?>
จาก Script test1.php อธิบายง่ายๆไม่มีอะไรมาก คือ จะทำการเปิด template html ขึ้นมา ชื่อ _tp_template1.html แล้วก็สั่งให้แสดงผล display() ทันที
หากเราดูใน _tp_template1.html จะเห็นว่ามีพวกตัวแปร $title, $header, $content, $footer กระจายอยู่ตาม Code html
ตัวแปรเหล่านี้จะทำงานเสมือนเป็นตัวแปรใน PHP ครับ พูดง่ายๆคุณแทนค่าอะไรลงไป คุณก็จะได้การแสดงผลตามค่านั้นๆ ดังตัวอย่างที่ 2 ครับ
<?php
## test2.php ##
require_once "../SiXhEaD.Template.php";
$title ="หัว Title ของ Website";
$header ="หัวข้อ H1 ของหน้า Web";
$content ="รายละเอียดข้อมูล รายละเอียดข้อมูล รายละเอียดข้อมูล รายละเอียดข้อมูล รายละเอียดข้อมูล รายละเอียดข้อมูล รายละเอียดข้อมูล รายละเอียดข้อมูล ";
$footer ="©2009 9AuM สุดหล่อ";
$tp = new Template("_tp_template1.html");
$tp->display();
exit;
?>
หลังจากรัน Script test2.php คิดว่า หลายคนน่าจะพอเข้าใจหลักการทำงานแล้ว ว่าการทำงานแบบ Template มีประโยชน์ยังไง
ตัวแปรต่างๆที่ระบุขึ้นจะเห็นว่า ถูกนำไปแสดงผลประกอบใน template html เรียบร้อย
พอเป็นแล้วก็หัดใช้ generate() กันต่อ
เวลาทำงานจริงๆ การเรียก template html ชิ้นเดียว บางครั้งเป็นเรื่องเป็นไปไม่ได้ครับ ผมยกตัวอย่างเวลาผมทำงานจริงๆ การออกแบบ website ส่วนใหญ่แล้ว เราจะมี template กลางเอาไว้ แล้วใช้เป็น template ร่วมไปในทุกๆหน้า เช่น
หน้าข่าวรวม
ก็จะออกแบบเป็น template กลาง + template กรอบข่าว
หน้ารายละเอียดของข่าว
ก็จะออกแบบเป็น template กลาง + template รายละเอียดของข่าว
ลองดูตัวอย่างลักษณะการเรียกใช้แบบนี้ครับ
## _tp_main.html ##
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>$title</title>
</head>
<body bgcolor="#FFFF99">
<table width="100%" border="0" cellspacing="0" cellpadding="5">
<tr>
<td bgcolor="#66CC66"><h1>$header</h1></td>
</tr>
<tr>
<td bgcolor="#FFFFFF">$content</td>
</tr>
<tr>
<td align="center" bgcolor="#FFCCCC">$footer</td>
</tr>
</table>
</body>
</html>
## _tp_news.html ##
<h2>$header_news</h2>
<p>$news_detail</p>
<p><strong>$date</strong></p>
<hr/>
<?php
## test3.php ##
require_once "../SiXhEaD.Template.php";
$title ="หัว Title ของ Website";
$header ="หัวข้อ H1 ของหน้า Web";
$footer ="©2009 9AuM สุดหล่อ";
$header_news ="หัวข้อข่าวลาล่าล้า";
$news_detail ="<p>รายละเอียดของข่าว รายละเอียดของข่าว รายละเอียดของข่าว รายละเอียดของข่าว </p>";
$date ="2009-01-20";
$tp_news = new Template("_tp_news.html");
$content = $tp_news->generate();
$tp = new Template("_tp_main.html");
$tp->display();
exit;
?>
จาก test3.php เป็นการนำ template 2 ตัวมารวมกันแล้วแสดงผลออกมาโดย generate();
ก็คือ การส่งค่า HTMl ที่อ่านได้ออกไปหาตัวแปร อย่างในตัวอย่าง
$content = $tp_news->generate();
ก็คือจะอ่านข้อมูล html ของ _tp_news.html ออกมาแล้วส่งไปให้ตัวแปร $content เพื่อนำไปประกอบแสดงผลในขั้นสุดท้ายนั้นเอง
ด้วยวิธีนี้แล้ว ลองนึกย้อนไปในการใช้งานจริง คุณจะสามารถสร้าง Template หลักและ Template HTML ย่อยๆ นำมาแสดงผลด้วยแนวคิดแบบนี้ได้
รู้จักกับ block และ apply ใช้กำหนดให้โชว์หรือซ่อน
block คือกลุ่มของ HTML ที่ถูกกำหนดขอบเขตเอาไว้ด้วย HTML Comment ใช้สำหรับกำหนดจุดเพื่อระบุให้แสดงหรือไม่แสดงผลตัวอย่าง block จะเขียนตามนี้
<!--SiXhEaD:BLOCKNAME-->
ข้อมูลที่อยู่ใน block
<!--/SiXhEaD:BLOCKNAME-->
ลองดูตัวอย่างของ block ต่อไปนี้ครับ
## _tp_template.html ##
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>$title</title>
</head>
<body bgcolor="#FFFF99">
<!--SiXhEaD:MEMBER_MENU-->
<h2>$USERNAME</h2>
<!--/SiXhEaD:MEMBER_MENU-->
<!--SiXhEaD:FORM_LOGIN-->
<form name="form1" method="post" action="">
username
<input name="username" type="text" id="username">
password
<input name="password" type="password" id="password">
<input type="submit" name="Submit" value="Submit">
</form>
<!--/SiXhEaD:FORM_LOGIN-->
</body>
</html>
จากตัวอย่าง HTML ที่จะเห็นว่า มี block อยู่ 2 block คือ block MEMBER_MENU กับ block FORM_LOGIN
แล้วไอ้ block นี้มีประโยชน์ยังไง ? เราก็จะเอา block ไว้กำหนดขอบเขตการแสดงผลนั้นแหล่ะครับโดยขอให้จำไว้ว่า
เมื่อเราสั่งให้ display หรือ generate ทุก block นะไม่แสดงผลออกมา จนกว่าเราจะสั่ง apply
ขอให้ดูตัวอย่างนี้ครับ
<?php
## test4-1.php ##
require_once "../SiXhEaD.Template.php";
$title ="หัว Title ของ Website";
$USERNAME ="9AuM สุดหล่อ";
$tp = new Template("_tp_template.html");
$tp->display();
exit;
?>
เมื่อรัน script คุณจะเห็นว่าข้อมูล html ที่อยู่ใน block ทั้ง 2 block กลับไม่แสดงผลถ้าหากคุณต้องการให้
ข้อมูลแสดงผลออกมาเราก็ใช้ apply ครับ
<?php
## test4-2.php ##
require_once "../SiXhEaD.Template.php";
$title ="หัว Title ของ Website";
$USERNAME ="9AuM สุดหล่อ";
$tp = new Template("_tp_template.html");
$tp->block("MEMBER_MENU");
$tp->apply();
$tp->display();
exit;
?>
จากตัวอย่างเป็นการระบุว่า block MEMBER_MENU ให้แสดงผลออกมาได้นั้นเอง การใช้งานจริง การเรียก apply block นี่มีประโยชน์เพื่อเลือกชิ้น block ออกมาแสดงผลครับ ยกตัวอย่างที่ผ่านมา ผมกำหนด block เอาไว้ เป็น block ที่แสดงรายละเอียดของ สมาชิก กับ block สำหรับ สมาชิก login นั้นก็คือ ผมอาจจะเช็ค สถานะว่าเป็น user ในระบบหรือเปล่า ถ้าเป็นอยู่ก็สั่งแสดงผล ข้อมูลส่วนตัว แต่ถ้าไม่ได้เป็นก็ให้แสดงผล form สำหรับ login เข้ามานั้นเองครับ ดังตัวอย่างครับ
<?php
## test4-3.php ##
require_once "../SiXhEaD.Template.php";
$title ="หัว Title ของ Website";
$USERNAME =$_SESSION['USERNAME'];
$tp = new Template("_tp_template.html");
if (empty($USERNAME)) {
$tp->block("FORM_LOGIN");
$tp->apply();
}else{
$tp->block("MEMBER_MENU");
$tp->apply();
}
$tp->display();
exit;
?>
คิดว่าน่าจะเข้าใจประโยชน์ของ block กันมากขึ้นนะครับ เอาว่าตอนที่ 2 นี้คงพอแค่นี้ก่อนน่าจะมึนกันพอควรแล้ว :P เดี๋ยวตอนต่อไปจะเริ่ม Advance กว่านี้ เดี๋ยวจะ สลบซะก่อนพักก่อนครับ
Sixhead Template
ตอนที่ 1 เกริ่นนำ
ตอนที่ 2 หัดใช้ display, generate, block, apply
ตอนที่ 3 หัดใช้ sub, get_current_sub(), get_current_sub_total(), block_html และ apply_block
Read (28,567)
Comments (10)
2009-01-21 14:03:13
ความคิดเห็น
รายละเอียดชัดเจนดีครับ
เดี๋ยวต้องลองเอาไปประยุกต์ดู
เว็บเพื่อความคิดสร้างสรรค์และแบ่งปันครับ www.narongrit.net โดยคุณ ฉุย
2009-01-22 08:35:50
และขอฝากเว็บโปรโมทด้วยครับ www.diggbookmark.com
ขอบคุณเว็บ scriptdd แห่งนี้ที่เปิดโลกทัศน์ให้กว้างกว่าเดิมครับ
ขอบคุณค่ะ กับเรื่องดี ๆ มีมาให้อัพเดตกันอีกแล้ว
โดยคุณ takky
2009-01-22 10:53:54
อืม เหมาะกับการพัฒนาอย่างยิ่ง
ทุกอย่างเกิดจากเหตุ และปัจจัย ไม่ใช่อยู่ดี ๆ ก็เกิดขึ้น :: สร้างฝันบนจินตนาการ www.konkeanweb.com , www.prawee.com ,www.tct15.com ,www.thaiagro.com โดยคุณ [email protected]
2009-01-22 16:21:11
บทความนี้ทำคนโง่อย่างผม เข้าใจ SiXhEaD Template กันไปเลย
รักษ์โลก ลดโลกร้อน | วิทยุสื่อสาร | มอเตอร์ไซด์คลาสสิค | สติ๊กเกอร์แต่งรถยนต์ โดยคุณ หนึ่ง
2009-01-23 10:15:28
พี่ครับ ลองแล้วมันขึ้นอย่างนี้
PHP Notice: Undefined property: Template::$block in D:\WebSite\teedinD.com\test\SiXhEaD.Template.php on line 171
โดยคุณ Neung
2009-07-02 11:44:04
ปัญหา Undefined property: Template::$block .... on line 171
ขออณุญาตตอบแทนนะครับ
ผมใช้ if(isset($this->block)) ครอบ if(is_array($this->block)) ไปครับ
กำลังหัด php อยู่ครับ
ขอบคุณผู้จัดทำ ทั้ง template แล้วก็ tutorial มากๆครับ
โดยคุณ RuzeriE
2010-05-07 19:41:52
ขอบคุณมากๆเลยคับที่ช่วยสอน และแนะนำสิ่งดีๆ ให้ผม
โดยคุณ ตาม
2010-05-28 22:55:39
ขอบคุณมากครับ กำลังหาอยู่เลย
โดยคุณ ben10Omnitrixtoys
2011-05-23 18:13:06
ผมโหลดตัวอย่างมา test ไม่เข้าใจทำไมไม่เห็นมีอะไรเกิดขึ้นเลย
โดยแตกนำไฟล์ไปไว้ใน localhost แล้วทำการรัน
โดยคุณ ิbank
2011-06-08 01:51:02
path ไฟล์ก็ตรง
SiXhEaD.Template.php อยู่ข้างนอก โฟลเดอร์ example02
แต่เวลารัน กับขึ้นแค่
$headder $content footer แทนที่จะขึ้นข้อความ
โดยคุณ bank
2011-06-08 01:57:13