ข้ามไปที่เนื้อหาหลัก

Ajax Template Parser : เรียกใช้งานเทมเพลต CodeIgniter ด้วย Ajax


ช่วงนี้พอจะมีเวลาสำหรับทดสอบซอร์สโค๊ดที่เขียนขึ้นมาได้บ้าง หลังจากลองใช้งานดูก็คิดว่าน่าจะเป็นประโยชน์บ้าง เลยลองเอามาแปะไว้เผื่อใครสนใจทดลองเล่นดูบ้าง

หลักการของซอร์สโค๊ดนี้ก็คือ การแยกข้อมูลดิบที่ PHP สร้างขึ้นมา หรือดึงจากฐานข้อมูล ออกจากโค๊ด HTML โดยการเขียนแยกเป็น 1) หน้าควบคุม หรือเรียกใช้งาน 2) ส่วนของการสร้างข้อมูล  3) ส่วนของการแสดงผล 

หากใครได้ลองใช้งาน CodeIgniter มาบ้างแล้ว ก็คงพอจะเข้าใจในส่วนของการแยก HTML ออกจาก PHP ที่ผมชอบใช้คือ Template Parser Class เลยลองนำมาประยุกต์ใช้ดู สำหรับคราวหน้าอาจจะลองทดสอบใช้งานจริงกับ CodeIgniter ดูบ้าง ว่าจะใช้งานได้ดีหรือไม่


สังเกตจากบทความที่ผ่านๆมา ผมจะเน้นไปเรื่องของการประหยัดทรัพยากรเป็นหลัก ทั้งที่สมัยนี้เทคโนโลยีก้าวไกล ไปถึงระดับก้อนเมฆแล้วแต่คนงบน้อย ก็ยังไม่สามารถมองข้ามปัญหาแบนด์วิธไปได้ โดยเฉพาะคนที่ชอบทดสอบซอร์สโค๊ดกับฟรีโฮสติ้งอย่างผม (เพราะถูกบล็อคไอดี และลบข้อมูลโฮสมาหลายครั้งแล้ว ^^")

สำหรับรูปแบบเทมเพลตให้ดูจาก


ไฟล์ jsParser.js
function getJSON(pUrl, pData, pSuccessJSON){
$.ajax({
 dataType: "json",
 url: pUrl,
 data: pData,
 success: pSuccessJSON
});
}

function loadContent(xFileName,xDir)
{
var tempContent;
var xViewDir = "view/";//templete directory
if(xDir != undefined && xDir != '') xViewDir += xDir + "/";
$.ajax({
type: "GET",
url: xViewDir + xFileName,
dataType: "text",
async : false, //synchronous requests
success : function(data){tempContent = data;}
});
return tempContent;
}

/*** Matching & Replace ***/
function parseArray(text, xDataArray, mKey)
{
var str = text;
var regex = /{(.+?)}/g;
$.each( xDataArray, function( key, value ){
if(mKey) str = str.replace("{"+ mKey +"}", "").replace("{/"+ mKey +"}", "");
if(typeof value == 'object'){
text += parseArray(str, value);
}else{
text = str.replace(regex, function($0, $1){return xDataArray[$1];});
}
});
return text;
}

function parseHtml(xTemplate, xData){
var result = xTemplate;
$.each( xData, function( key, value ) {
if($.isArray(value)){
var patt = '/{'+key+'}([\\S\\s]*){\\/'+key+'}/g';// key 
var patt = eval(patt);
var text_array = result.match(patt);//array
if(text_array != null){
var textList = parseArray(text_array[0], value, key);
textList = textList.replace(text_array[0], '');
result = result.replace(text_array[0], textList);
}
}else{
result = result.replace(eval('/{' + key + '}/g'), value);
}
});
return result;
}

วิธีเรียกใช้งาน

1. สร้าง View โดยใช้รูปแบบเดียวกับ codeigniter (ในตัวอย่างให้เป็น test.php)
<h1>
{blog_title}
</h1>

<h3>
{blog_heading}
</h3>

{blog_entries}
<hr>
<h5>{title}</h5>
<p>
{body}
</p>
{/blog_entries}

2. สร้างหน้าเพจ หรือตัว Control สำหรับเรียกข้อมูล
<h2>ตัวอย่างการสร้างปฏิทินด้วย PHP (Optimize with JavaScript)</h2>
<div style="float:right">
<a href="javascript:jsMonCalen()">เดือน</a> | <a href="javascript:loadWeekCalendar()">สัปดาห์</a> | <a href="javascript:void(0)">วัน</a> | <a href="javascript:void(0)">แผนงาน</a>
</div>
<div style="clear:both"/>
<div id="main">
<div id="my_calendar"></div>
</div>
<input id="test" type="button" value="TEST" onclick="loadContent()"/>
<script type='text/javascript' src="themes/example/js/calendar.js"></script>
<script type='text/javascript'>
jsMonCalen();
</script>

3. สร้างไฟล์ Javascript สำหรับเรียกใช้ jQuery Ajax (ตามตัวอย่างคือไฟล์ themes/example/js/calendar.js)
var ajaxURL = 'ajax_service.php?source=calendar';
var templateTest = loadContent('test.php');

function loadContent(data){
if(!data) return;
 var obj = jQuery.parseJSON(data);  // <--- เพิ่มส่วนของการแปลง json กลับไปเป็นอาร์เรย์
$('#my_calendar').html(parseHtml(templateTest, obj ));
}
function loadContent(date){
var param = '';
if(date != undefined) param = '&date=' + date;
getJSON(ajaxURL, 'action=load_content' + param, successDayCalen);
}

4. สร้างไฟล์ PHP สำหรับดึงข้อมูลที่จะส่งไปยังเทมเพลตที่เราเตรียมไว้ (ในตัวอย่างให้เป็น calendar_ajax.php)
function loadContent()
{
$json = array(
              'blog_title'   => 'My Blog Title',
              'blog_heading' => 'My Blog Heading',
              'blog_entries' => array(
                                      array('title' => 'Title 1', 'body' => 'Body 1'),
                                      array('title' => 'Title 2', 'body' => 'Body 2'),
                                      array('title' => 'Title 3', 'body' => 'Body 3'),
                                      array('title' => 'Title 4', 'body' => 'Body 4'),
                                      array('title' => 'Title 5', 'body' => 'Body 5')
                                      )
            );
echo json_encode($json);
}

/***** Call Function *****/
$action = isset($_POST['action']) ? $_POST['action'] : '';
if($action == '') $action = isset($_GET['action']) ? $_GET['action'] : '';
switch( $action ){
case 'month_js':
genMonthCalendarJS();
break;
case 'week_calen':
genWeekCalenForJS();
break;
case 'load_content':
loadContent();
break;
case 'plan':
break;
}


สำหรับผลลัพธ์ที่ได้สามารถทดลองได้ที่ ตัวอย่างปฏิทิน PHP


หมายเหตุ
2014-05-01  แก้ส่วนที่ผิดก่อนเรียก parseHtml(templateTest, obj )
ตัวแปร data ต้องแปลงเป็นอาร์เรย์ก่อนครับ
var obj = jQuery.parseJSON(data);
 

บทความที่เกี่ยวข้อง



PHP CI MANIA PHP Code Generator 
โปรแกรมช่วยสร้างโค้ด ลดเวลาการเขียนโปรแกรม

สนใจสั่งซื้อเพียง 4,500 บาท
http://fastcoding.phpcodemania.com/

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

แจกฟรี!! ระบบต่างๆที่พัฒนาด้วย PHP สำหรับนำไปใช้ในงานต่างๆ

       สำหรับหลายท่านที่ขอโค้ดเข้ามาทาง Inbox ของเฟซบุ๊กแฟนเพจ หรือถามถึงระบบต่างๆหลังไมค์มานั้น ส่วนใหญ่ก็มีแจกอยู่แล้วในเว็บบอร์ด ThaiCreate.Com นะครับ และด้านล่างนี้ก็เป็นระบบต่างๆที่แจกให้นำไปลองใช้ลองศึกษากันครับ

สร้างแบบฟอร์มล็อกอิน HTML + PHP

       ผมจะสร้างระบบตัวอย่างเพื่อแสดงให้เห็นการทำงานของสคริปต์ PHP ที่ใช้ในการล็อกอินอย่างง่ายๆ นะครับ โดยที่ผมจะสร้างโฟลเดอร์ใหม่ขึ้นในไดร์ฟที่เราได้กำหนดให้เป็น Directory Root สำหรับรันสคริปต์ PHP ซึ่งผมกำหนดเอาไว้ที่ D:\www ดังนั้นผมจะสร้างโฟลเดอร์ teacher_assistant ขึ้นมาใหม่จะได้พาธเป็น D:\www\teacher_assistant สำหรับการเข้าถึง จะใช้ URL ดังนี้ http://localhost/teacher_assistant หลังจากสร้างโฟลเดอร์เสร็จเรียบร้อยก็จะเริ่มกระบวนการเตรียมโครงสร้างโปรเจ็กต์ด้วยเครื่องมือช่วยเขียนโปรแกรมชื่อว่า eclipse ซึ่งดูวิธีการสร้างโปรเจ็กต์ได้จากบทความ เริ่มต้นสร้างโปรเจ็กต์ ด้วยโปรแกรม eclipse เครื่องมือเขียนโปรแกรม php ในบทความเป็นการสร้างโปรเจ็กต์ที่มีพาธเป็นโฟลเดอร์ login แต่ในที่นี้ต้องเป็นพาธให้ตรงกับโฟลเดอร์ใหม่ที่เราได้สร้างขึ้นด้วยนะครับ

PHP กับการคิดส่วนลดเป็นเปอร์เซ็น 5%, 10%, 20% ตามช่วงราคาที่กำหนด

<?php     $total_price = 1000;     $discount = 0;         if($total_price >= 500 && $total_price < 1001){         $discount = 5;     }elseif($total_price >= 1001 && $total_price <= 5000){         $discount = 10;     }elseif($total_price >= 5001){         $discount = 20;     }         $discount_bath = ($total_price*$discount)/100; ?> <pre> ซื้อสินค้าครบ 0 ถึง 499 บาท ไม่ได้ส่วนลด ซื้อสินค้าครบ 500 ถึง 1000 บาท ได้ส่วนลด 5% ซื้อสินค้าครบ 1001 ถึง 5000บาท ได้ส่วนลด 10% ซื้อสินค้าครบ 5001 บาทขึ้นไป ได้ส่วนลด 20% </pre> <h3>รวมราคาสินค้า = <?php echo number_format($total_price,2);?></h3> <h5>ส่วนลด = <?php echo $discount;?>%  (<?php echo $discount_bath;?> บาท)</h5> <h2>ราคาหลังส่วนลด = <?php echo number_format($total_price - $discount_bath,2);?>บาท</h2> "PHP ไม่ได้สร้างสุดยอดโปรแกรม แต่ PHP ช่วยให้งานคุณง่ายขึ้นต