สวัสดีค่ะ ว่าจะเขียนเรื่อง Cache ใน Smarty นานแล้วแต่ยังไม่ค่อยเข้าใจมันเท่าไหร่ หลังจากวันก่อนมีเวลาได้ลองเล่นระบบ Cache ใน Smarty อีกครั้งหนึ่งพอเข้าใจขึ้นมาบ้างแต่ก็ยังงงบางส่วน เอาเป็นว่าวันนี้จะมาเขียนในส่วนของที่เรียวเข้าใจก่อนละกันนะ ผิดพลาดส่วนไหน ก็ comment บอกกันได้
ปกติ Smarty จะแบ่งออกเป็นสองส่วนคือส่วนแรกจะเรียกกว่า Code behind ก็คือส่วนที่เราเขียน Code ต่าง ๆ เอาไว้ไม่ว่าจะเป็นการ Query data จากฐานข้อมูล Logic ต่าง ๆ เรียวจะขอเรียกว่าส่วน Code behind และกัน
อีกส่วนหนึ่งคือส่วนของ Template ซึ่ง Class smarty นั้นจะทำการประมวลผลจากตัว Code แล้ว Render ออกมาเป็นไฟล์ Template ดังนั้นเวลาเราเขียนและ Compile เสร็จเราจะได้ไฟล์อยู่ 2 ไฟล์คือ .php กัน .tpl (template) นั่นเอง
ก่อนอื่นให้เปิดใช้งาน Cache ใน Smarty ก่อน และกำหนด Path สำหรับเก็บไฟล์ cache
test1.php
// กำหนด Absolute Path สำหรับ include ไฟล์
$DOC_ROOT = "C:/AppServ/www/smarty/";
require_once($DOC_ROOT.'templates-engine/libs/Smarty.class.php');
$smarty = new Smarty();
$smarty->template_dir = $DOC_ROOT."templates";
// กำหนด Directory ที่เก็บไฟล์ cache
$smarty->cache_dir = $DOC_ROOT."templates-cache";
$smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);
$smarty->setCompileCheck(true);
$word1 = "ทดสอบการใช้ Cache 1";
$smarty->assign('word1',$word1);
$smarty->display('test1.tpl');
ค่ำสั่ง $smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT); กับคำสั่ง
$smarty->setCaching(Smarty::CACHING_LIFETIME_SAVED); ตรงนี้ไม่รู้ต่างกันยังไงใครลองแล้วเข้าใจมาบอกกันด้วยนะ
ส่วนคำสั่ง $smarty->setCompileCheck(true);
ถ้าเรากำหนดเป็น true หมายความว่าจะทำการตรวจสอบไฟล์ template (.tpl) ก่อนว่ามีการเปลี่ยนแปลงหรือเปล่า ถ้ามีการเปลี่ยนแปลงจะ Render ไฟล์ template ใหม่แล้วทำเป็นไฟล์ Cache แต่ถ้าไฟล์ temlate หลักไม่มีการเปลี่ยนแปลง มันจะไปดึงจากไฟล์ cache มาใช้งานโดยไม่ต้อง Render ไฟล์ใหม่ ตรงนี้ส่วนของ Code behind จะทำการประมวลผลปกตินะตรงนี้อย่าสับสนนะคะ ไม่เชื่อลอง echo อะไรก็ได้ออกมาดูจะมี output ออกมาปกติ
ส่วนถ้าเรากำหนดค่าเป็น false หมายความว่าจะำทำการดึงไฟล์ cache ขึ้นมาใช้ทันทีโดยไม่สนใจว่าไฟล์ template มีการเปลี่ยนแปลงหรือเปล่า (อาจจะเกิดปัญหา content refesh ต้อง manage ดี ๆ นะ)
บางคนสงสัยว่าเอ๊แล้วจะไม่ให้ไฟล์ Code behind มันประมวลผลทุกครั้งจะทำยังไง ตัว Smarty มี Method isCached() ให้ใช้ค่ะ เดี๋ยวจะอธิบายให้ฟังทีหลัง
test1.tpl
<body>
{$word1}
</body>
output
ทดสอบการใช้ Cache 1
ลองรันดูเราจะเห็นว่าไฟล์ test1.php ถูก compile ปกติ แต่ไฟล์ template จะไปดึงจากไฟล์ cache กรณีที่มีไฟล์ cache อยู่แต่้ถ้าไม่มีไฟล์ template อยู่ จะประมวลผลไฟล์ test1.php อีกครั้ง
มากำหนดเวลาการใช้งาน Cache กัน
$smarty->setCacheLifetime(60); // กำหนดเวลาใช้ cache 1 นาที
กรณีที่เราไม่กำหนด setCacheLifetime() ค่า Default จะอยู่ที่ 3600 วินาที หรือ 1 ชั่วโมง
การทำงานก็คือเมื่อหมดเวลา Cache จะทำการ Render ไฟล์ template ใหม่แล้วทำเ็ป็นไฟล์ cache ถ้ายังไม่หมดเวลาก็จะดึงจากไฟล์ Cache มาแสดงผล ซึ่งไฟล์ Code behind จะประมวลผลทุกครั้งเหมือนเดิมนะคะ อย่าสับสน
แสดงบทความที่มีป้ายกำกับ Smarty template แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ Smarty template แสดงบทความทั้งหมด
วันจันทร์ที่ 22 สิงหาคม พ.ศ. 2554
วันพฤหัสบดีที่ 9 มิถุนายน พ.ศ. 2554
เมื่อ Smarty template 3 ไม่ยอมรัน code php ในหน้า template
ไม่ขอกล่าวว่า Smarty template คืออะไรไปหาอ่านเอาเองมีเยอะมาก เรียวใช้ Smarty มาตั้งแต่เวอร์ชั่น 2.6 หลังจากนั้นพึ่งมาอัพเดทเป็นเวอร์ชั่น 3 เมื่อไม่นานมานี้
ปกติเวลาเราจะรัน code php ในหน้า template นั้นเราจะเขียนได้ดังนี้
{php} include "module/menu.php"; {/php}
ก็คือเขียนไว้ใน {php} {/php } นั่่นเอง
ทีนี้พอเรียวอัพเดทเป็นเวอร์ชั่น 3 ปุ๊บ Error ทันทีบอกไม่สามารถรัน code php ได้
Fatal error: Uncaught exception 'SmartyException' with message '{php} is deprecated, set allow_php_tag = true to enable' in ..................บลา ๆๆๆๆๆ
เนื่องจากเวอร์ชั่น 3 ค่า Default ของ allow_php_tag นั้นจะเป็นค่า FALSE นั่นหมายความว่ามันจะไม่ยอมให้ไปรัน code php ในหน้า template
ดังนั้นเราจะจัดการกำหนดค่าให้มันใหม่
$smarty = new Smarty(); // instance object ของ Smarty ขึ้นมาก่อน
$smarty->allow_php_tag = true; // กำหนดค่าพร็อพเพอร์ตี้ allow_php_tag ให้เป็น TRUE ซะ
แค่นี้ก็สามารถรัน code php ใน Smarty template 3 ได้แล้วเจ้าค่ะ
ปกติเวลาเราจะรัน code php ในหน้า template นั้นเราจะเขียนได้ดังนี้
{php} include "module/menu.php"; {/php}
ก็คือเขียนไว้ใน {php} {/php } นั่่นเอง
ทีนี้พอเรียวอัพเดทเป็นเวอร์ชั่น 3 ปุ๊บ Error ทันทีบอกไม่สามารถรัน code php ได้
Fatal error: Uncaught exception 'SmartyException' with message '{php} is deprecated, set allow_php_tag = true to enable' in ..................บลา ๆๆๆๆๆ
เนื่องจากเวอร์ชั่น 3 ค่า Default ของ allow_php_tag นั้นจะเป็นค่า FALSE นั่นหมายความว่ามันจะไม่ยอมให้ไปรัน code php ในหน้า template
ดังนั้นเราจะจัดการกำหนดค่าให้มันใหม่
$smarty = new Smarty(); // instance object ของ Smarty ขึ้นมาก่อน
$smarty->allow_php_tag = true; // กำหนดค่าพร็อพเพอร์ตี้ allow_php_tag ให้เป็น TRUE ซะ
แค่นี้ก็สามารถรัน code php ใน Smarty template 3 ได้แล้วเจ้าค่ะ
สมัครสมาชิก:
บทความ (Atom)