ในช่วงวันปีใหม่ที่ผ่านมา ก็ไม่ได้แตกต่างจากวันอื่น ๆ มากเท่าไหร่ เพราะว่าตัวเองไม่ได้ออกไปเที่ยวไหนเลย ทำงานปั่น PHP Framework อย่างเดียว จริง ๆ โครงการนี้ออกแบบและร่างแนวคิดมาได้สัก 1-2 เดือนแล้ว แต่ว่ากว่าจะลงตัวก็ในช่วงเกือบปีใหม่ และดันงานให้เสร็จในช่วงวันหยุดยาวปีใหม่ โดยเพิ่งจะเอาเข้า SVN ส่วนตัวเมื่อคืนนี้เอง ตอนนี้ขั้นตอนการ Alpha Test อยู่โดยในช่วงนี้การทดสอบระบบนั้นจะนำไปใช้งานจริงกับระบบร้านค้าบนอินเตอร์เน็ต (E-Commerce) โดยนี้คาดว่าจะออก Beta Test ตอนปลายเดือนนี้เป็นอย่างเร็วที่สุด
โดยหลักการของระบบ Framework นี้โดยรวมใช้หลักการ MVC (Model-View-Controller) ซึ่งการพัฒนาในครั้งนี้เข้าใกล้หลักการ MVC เกือบ 90% อาจจะมีบางส่วนที่ไม่เข้าหลักการด้วยเหตุผลด้านข้อจำกัดของภาษา PHP และระยะเวลาในการพัฒนาระบบโดยรวม
โดยระบบโดยรวมนั้นจะใส่ Module ต่าง ๆ เหล่านี้ลงไปนี้ Core ของระบบ ( Core = แกนหลักของระบบโดยรวม)
- Module จัดการเชื่อมต่อกับฐานข้อมูล MySQL รองรับ MySQL 5.0 และการทำ Transaction ด้วย โดยตัวมันเป็นเป็น Sub-Module กับ Object อีกที โดยเอาแนวคิดจาก Object ใน Java ที่ Class ทุกตัวจะสืบทอดจาก Class Object ทั้งหมด แต่ในความเป็นจริง แล้วมีเพียงไม่กี่ Module ที่เข้าข่ายนี้เนื่องจากบางส่วนเป็น OpenSource Module จากข้างนอกการปรับแต่งบางครั้งก็ลำบากในการพัฒนาต่อ
- Module จัดการวันที่ทั้งไทย (พ.ศ.) และสากล (ค.ศ.) โดยได้เขียนส่วนเพิ่มเติมจาก Generic date handling class for PEAR v 1.41 2006/11/22 และเพิ่อลบข้อเสียของ function Date ใน PHP ที่ไม่สามารถรองรับวันที่ได้น้อยกว่าปี ค.ศ. 1970 และการใช้งานที่ยุ่งยาก รวมถึงไม่รองรับปี พ.ศ. ด้วย
- Module อ่าน HTML และ XML (Parser) ซึ่งพัฒนาสืบทอดต่อจาก HTML/XML Parser Class 1.0 ของ Dennis Pallett โดยได้เขียนส่วนเพิ่มเติมสำหรับจัดการ Permission ของระบบโดยการกำหนด Permission ของระบบอ้างอิงจากไฟล์ XML แทนฐานข้อมูลแบบเดิม ๆ เพื่อลดการ Process Query ของ DBMS (ใช้การ Parse จาก XML เร็วกว่าเยอะ เพราะมันลด Transaction และ Process ใน DBMS ไปเยอะพอสมควรเมื่อเทียบกับการ Parse ข้อมูลจาก XML ) และคาดว่าจะเขียน Module สำหรับจัดการพวกนี้ด้วย ซึ่งยังมีการเอามาใช้ประโยชน์ในการอ่านไฟล์ XML เพื่อใส่ addon ใหม่ ๆ เข้าระบบด้วย (จะกล่าวต่อไป) โดยใช้หลักการแบบเดียวกับ Membo และ CMS อื่น ๆ ที่เมื่อมีการลง Component ใหม่ ๆ ลงไปนั้นเอง
- Module ทำ Pagination (แบ่งหน้าข้อมูล) สำหรับการแสดงผลรายการข้อมูลยาว ๆ ให้แบ่งเป็นหน้า ๆ
- Moduel HTML Form สำหรับสร้าง Form บน PHP แบบง่าย ๆ และสามารถกำหนด Option เสริมตามมาตรฐาน XHTML อื่นๆ เพิ่มเติมได้ โดยจุดเด่นของ HTML Form นี้คือตัว Form Set ชื่อ Select Datetime ซึ่งเป็นส่วนของการกรอกข้อมูลเกียวกับวันที่และเวลา ที่เราไม่ต้องมานั่งเขียน Selection Form ในแบบเดิม ๆ ให้เสียเวลาอีกต่อไป
- Module จัดการระบบ upload โดยใน Module นี้ได้เพิ่มความสามารถดักจับคุณสมบัติไฟล์บนพื้นฐานแบบ MEME Type แทนนามสกุลไฟล์แบบเดิม ๆ ได้ด้วย (แต่ก็ยังใช้การดักจับนามสกุลไฟล์แบบเดิมได้ถ้าต้องการ) โดยภายในมี Form สำหรับ upload ให้เสร็จ จริง ๆ ตอนนี้กำลังเอาไปใส่ใน Module HTML Form แทน อาจมีการปรับเปลี่ยนในรุ่น Beta Test อีกที หรือไม่เจ้าตัว Upload นี้อาจจะเป็น Sub-Module ของ HTML Form ไป หรืออีกทางคือให้มันถูกกำหนด Prepackage ที่ต้องมีก่อนใช้งานแทนก็ได้ ซึ่งแบบหลังจะดีในแง่การการเข้ากันได้ในรุ่น Alpha Test
- Module จัดการ MVC ซึ่งผมใช้ชื่อว่า "Apps" ซึ่งเจ้า Apps นี้มันเป็น Sub-Module ของ MySQL อีกทีหนึ่ง โดยตัวมันเองก็มี Sub-Module ของมันอีก 3 ตัวคือ Model, View และ Controller ซึ่งตัวที่ใช้แน่ ๆ คือ Model และ Controller แต่เจ้าตัว View นี่ดิ -_-‘ มันไม่มีบทบาทอะไรเลย เพราะบทบาทมันถูกใช้ไปแล้วใน Warpper Class ชื่อ Observer Data และ Theme (จะกล่าวต่อไปว่ามันคืออะไร) คาดว่าเจ้า View นี่จะถูกออกแบบใหม่อีกรอบให้ใช้ความสามารถจาก Observer Data และ Theme และจัดการอื่น ๆ ในส่วนที่ Observer Data และ Theme ไม่มีหน้าทีครอบคลุมถึงส่วน View (จริง ๆ ในตอนนี้ Alpha Test นี้มันทดแทนได้หมดแลย นะเนี่ย -_-‘)
โดยด้านบนคือ Core ของระบบ ซึ่งในตอนนี้มี Module อยู่ 7 ตัว และคาดว่าจะมีเพิ่มในอนาคตเพื่อเพิ่มความสามารถ และปรับแก้ข้อผิดพลาดด้วย
ต่อมาในส่วนของ Add-on นั้นเป็นส่วนเพิ่มเติมในระบบทั้งหมด โดยเมื่อต่อการใส่ Add-on ลงใน Framework นั้นต้องมีการเขียนไฟล์ XML ตาม Schema ที่กำหนดไว้ (มีพร้อมใน Framework แล้ว) เพื่อให้ Core อ่านคุณสมบัติของ Add-on ได้ทั้งหมด โดยมี Add-on มาตรฐานอยู่ 4 ตัวคือ
- HTML Form Validation ซึ่งได้เป็นเขียน PHP Class เพื่อใช้งานร่วมกับ JavaScript Form Validator Version 2.0.2 จาก JavaScript-coder.com และใน JavaScript ดังกล่าวได้เพิ่มส่วนของการตรวจสอบความถูกต้องของการกรอกวันที่ เช่นกรอกวันที่ 31 ในเดือนกุมพาพันธ์ และความเหมือนกันของข้อมูล ซึ่งมันถูกใช้ในการตรวจทานรหัสผ่านและอีเมล เป็นต้นด้วย
- JavaScript ShowHide Link Area เป็นการนำข้อดีของ CSS และ XHTML มาใช้ร่วมกัน โดยเป็นการเขียน PHP Class เพื่อสร้าง JavaScript สำหรับสร้าง Link เพื่อบังคับการแสดงและซ่อนพื้นที่ที่เราต้อง
- Lightbox v2.02 จาก Lokesh Dhakar เป็น JavaScript ที่ใช้ในการแสดงผลรูปภาพขนาดจริงที่มี Effect สวยงามมาก (ใน Blog ผมก็ใช้ Lightbox นี้เช่นกัน)
- Mod Msg Digest เป็นการนำ Message-Digest Algorithm 5 (md5) มาใช้ประโยชน์ในการทำ Message-Digest Data อีกครั้งโดยใช้การซ่อนรหัสลงในชุดข้อมูลขยะอีกรอบหนึ่ง
ต่อมาในส่วนอขง Warpper Class (เอาแนวคิดมาจากภาษา Java อีกตามเคย) เป็น Class ที่ไม่จำเป็นต้อง Initialize Object แต่สามารถใช้งานได้ทันที โดยจริง ๆ แล้วมันก็ทำงานคล้าย ๆ กับ Function ทั่วไปนั้นแหละ เพียงแต่ว่าการใช้ Function มีผลต่อชื่อที่อาจซ้ำกับ Function พื้นฐานในอนาคตได้ (ตอนนี้ Function บางตัวที่ผมเขียนในอดีตก็ดันไปซ้ำกับ Function พื้นฐานใน PHP 5 เสียแล้ว) เลยจำเป็นต้องเขียนใน Warpper Class แทน และยังเป็นการจัดกลุ่ม Function ด้วย โดย Warpper Class นั้นในตอนนี้มีอยู่ 5 ตัวคือ
- HTTP-Page เป็น Class ที่เอาไว้สร้าง URL, Redirect หน้าเว็บ และกรองข้อมูลจาก Request Variables พวก ENV, GET, POST, COOKIE, SERVER ต่าง ๆ ให้เป็นไปตามข้อมูลที่ควรจะเป็นเช่นการกรอง Injection Data จาก QueryString หรือการเปลี่ยน arg_separator ใน PHP จาก & เป็น ; เพื่อให้เป็นไปตามคำแนะนำของ XHTML 4.0 โดยใน Class นี้ยังรองรับการสร้าง URL ด้วยวิธี mod_rewrite ด้วย (โดยมาตรฐานแล้วจะเปิดการใช้งาน mod_rewrite เป็นค่าเริ่มต้น)
- Observer Data เป็น Class ที่สร้างขึ้นเพื่อใช้ในการสื่อสารระหว่าง Model, View และ Controller
- SuperGlobals เป็น Class ที่ใช้ในการเรียกใช้ข้อมูลชนิด Predefined Variables นั้นเอง โดยแทนที่จะทำงานผ่านตัวแปร Predefined Variables โดยตรงก็ใช้ Class นี้แทน โดยมี Method ที่่ช่วยในการจัดการข้อมูลใน Predefined Variables ได้ด้วย รวมถึง Method ในการสร้าง Temp Data ลง Sessionเพื่อใช้ประโยชน์ในบางกรณีที่ต้องการใช้ข้อมูลข้ามหน้ากัน
- Theme เป็น Class ที่ใช้ในการเพื่อ, ปรับแต่ง และสร้าง ส่วนขยายของ Theme ทั่วไปให้มีความสามารถมากขึ้นเช่นเพิ่ม JavaScript และ CSS ลงไปใน Theme หลักจาก Add-on และจะเพิ่มเองภายหลังก็ได้ โดยไม่จำเป็นต้อเข้าไปแก้ใน Theme หลักแต่อย่างใด
- Permission เป็น Class ที่สร้างขึ้นเพื่อตรวจสอบสิทธิ์ในการใช้งานเช่น Guest, User และ Admin โดยตัวมันเองนั้นจะอ่านไฟล์ XML ที่สร้างตาม Schema Permission ที่กำหนดไว้ โดย Permission นี้จะตรวจสอบการเข้าถึง Controller และ Controller Method ซึ่ง Controllre นั้นเป็นตัวดักจับ Event อยู่แล้ว การตั้ง Permission ที่อิงกับ Controller จึงถือว่าปลอดถัยต่อข้อมูลมากที่สุด เพราะ Controller นั้นจะเป็นตัวจับคู่ Model และ View เข้าด้วยกัน ถ้า Controller ถูกจำกัดการทำงาน ก็ไม่มีทางที่ View จะส่งข้อมูลให้กับ Model และ Model จะส่งข้อมูลกลับไปให้ View ได้
ทั้งนี้ทั้งนั้นระบบ Framework นี้ไม่ได้ถูกทำขึ้นเพื่อใช้แค่ MVC เท่านั้น เรายังสามารถสร้างหน้าทั่วไป ในที่นี้ขอเรียกว่า ‘Page’ ได้เหมือนการเขียน HTML ทั่วไป เพียงแต่ข้อมูลที่มีจะถูกนำไปใส่ใน Theme โดยอัตโนมัติ โดยการเรียกหน้านั้นทำผ่าน URL "page" ของระบบ
โดยอย่างที่บอกไปแล้วว่าใน Framework นี้รองรับการสร้าง URL แบบ Rewrite ซึ่งสามารถเลือกที่จะไม่ใช้ก็ได้ในกรณีที่ Server ไม่รองรับ โดยไม่ต้องแก้ไข URL ใน Link ต่าง ๆ ใหม่ ซึ่ง URL ใน Link ต่าง ๆ นั้นต้องสร้างจาก Metod "url" ใน HTTP-Page เท่านั้น
จริงรายละเอียดมีมากกว่านี้ครับ แต่ว่าขอเอาแค่นี้ก่อนแล้วกัน ส่วน Diagram ของระบบยังไม่ขอเอามาลงเพราะระบบยังไม่นิ่งพอครับ
โหววว เล่นพัฒนา Framework เลยหรอ เหอๆ