วันจันทร์ที่ 23 พฤศจิกายน พ.ศ. 2558

เทคนิคออกแบบตาราง เขียน SQL ให้ Query ไวขึ้น

เทคนิคออกแบบตาราง เขียน SQL ให้ Query ไวขึ้น
การใช้งานฐานข้อมูล SQL Server ให้เกิดประสิทธิภาพ (performance) สูงสุดนั้น มีปัจจัยอยู่หลายอย่าง เนื้อหาในบทความนี้ เราจะมาเผยเทคนิค วิธีการออกแบบฐานข้อมูล ตาราง และหลักในการพิจารณาสร้าง index รวมไปจนถึงการเขียนคำสั่ง Transact-SQL และ Stored procedure เพื่อให้ SQL Server สามารถทำงานร่วมกับระบบหรือโปรแกรมที่เราพัฒนาขึ้นได้อย่างมีประสิทธิภาพ ประมวลผลเพื่อส่งต่อข้อมูลกันได้อย่างรวดเร็ว

เทคนิคและวิธีการออกแบบตาราง และสร้าง index

  1. ทุกตารางที่ได้รับการออกแบบควรสร้าง clustered index ไว้หนึ่งตัวเสมอ คอลัมน์ที่ใช้ในการสร้าง clustered index ควรเป็นคอลัมน์ identity หรือคอลัมน์ใดๆ ที่มีค่าไม่ซ้ำกัน (unique) โดยปกติแล้วการสร้าง primary key ก็เป็นส่วนหนึ่งที่ทำให้เกิด clustered index อัตโนมัติอยู่แล้ว
  2. การพิจารณาว่าควรสร้าง index อะไรบ้าง และจำนวนเท่าใดนั้น ให้พิจารณาว่ามีกลุ่มของคอลัมน์ใดบ้างที่ใช้ค้นหาหรือเปรียบเทียบบ่อยๆ ภายใต้ส่วนของคำสั่ง where, join...on, order by, group by, top และ distinct เป็นต้น
  3. แม้ index จะช่วยเพิ่มประสิทธิภาพในการค้นหาข้อมูล แต่หากมีมากจนเกินไปในแต่ละตาราง ก็จะส่งผลให้การเพิ่มหรือปรับปรุงข้อมูลจะมีการประมวลผลมากตามไปด้วย
  4. ไม่ควรสร้าง index ที่เหมือนกัน แม้ว่าชื่อ index จะไม่เหมือนกัน แต่ไม่มีความจำเป็น เป็นภาระในการประมวลผลโดยเปล่าประโยชน์
  5. รายละเอียดเงื่อนไขของ index ที่ไม่ควรสร้าง (ถ้ามีอยู่ให้ลบทิ้ง)
    • index ที่ไม่ได้ใช้งาน
    • ข้อมูลในตารางมีไม่มาก ขนาดของตารางเล็ก
    • index ที่ใช้จำนวนคอลัมน์มากเกินไป เทียบเคียงกับจำนวนคอลัมน์ทั้งหมดในตาราง
    • index ที่มีการใช้คอลัมน์ข้อมูลประเภท TEXT, NTEXT หรือ IMAGE
    • ตารางที่ใช้งานในค้นหาข้อมูล (query) น้อยมาก แต่ปรับปรุงข้อมูล (insert / update / delete) บ่อยๆ
  6. การสร้าง index เป็นไปได้ให้พยายามสร้าง unique index หรือให้เข้าใจอีกแง่หนึ่งคือ index ที่มีข้อมูลในแต่ละคอลัมน์ใน index ไม่ซ้ำกัน การค้นหาจะเร็วกว่า non-unique index
  7. index ที่ใช้ไม่บ่อย หากมีการสร้างไว้จะส่งผลกับการ perfomance ของการปรับปรุง (insert / update / delete) ข้อมูล แนะนำให้สร้างในขั้นตอนการค้นหาข้อมูล (query) และเมื่อสิ้นสุดการค้นหาข้อมูล ค่อยลบ (drop) index ออกไป
  8. หลีกเลี่ยงการใช้คอลัมน์ที่เป็น FLOAT หรือ REAL เป็น primary key
  9. หลีกเลี่ยงประเภทข้อมูล TEXT หากความยาวของข้อมูลไม่เกิน 8,000 ตัวอักษร โดยใช้ VARCHAR แทน TEXT จะเสีย performance สูงมาก
  10. หลีกเลี่ยงประเภทข้อมูล NVARCHAR หรือ NCHAR หากไม่จำเป็นต้องเก็บข้อมูลที่เป็น Unicode หรือ 16-bit เพราะต้องใช้เนื้อที่มากกว่า VARCHAR และ CHAR เป็น 2 เท่า
  11. หากข้อมูลที่จัดเก็บมีความยาวไม่เท่ากัน ให้ใช้ VARCHAR แทนที่ CHAR จะช่วยลดเนื้อที่ในการจัดเก็บในส่วนที่ไม่ได้ใช้
  12. หากข้อมูลที่จัดเก็บมีความยาวเท่ากัน ให้ใช้ CHAR แทนที่ VARCHAR เพราะการประมวลผลของคอลัมน์ที่ fixed length จะเร็วกว่า
  13. หากข้อมูลที่จัดเก็บเป็นตัวเลขเท่านั้น ให้ใช้ประเภทข้อมูลแบบ numeric เช่น INTEGER เนื่องจากใช้พื้นที่น้อยกว่า VARCHAR และ CHAR และ perfomance ในการค้นหาในส่วนของเงื่อนไข (WHERE clause), joined, sorted ทำได้ไวกว่า
  14. หลีกเลี่ยงการใช้ประเภทข้อมูลที่เกินความจำเป็น ยกตัวอย่างเช่น เราจะใช้ BIGINT แต่หากดูแล้วไม่จำเป็น และเห็นว่าแค่ INT ก็เพียงพอแล้ว ให้เลือกใช้ INT เนื่องจาก BIGINT ใช้เนื้อที่ต่อข้อมูล 8 bytes มากกว่า INT ซึ่งใช้เพียง 4 bytes
  15. ไม่ใช้ DATETIME หรือประเภทข้อมูลที่ใช้พื้นที่มากๆ เป็น primary key (จำนวนเนื้อที่ที่ใช้จัดเก็บข้อมูล หรือใช้ในสร้าง index ยิ่งใช้มากก็จะยิ่งเสีย performance ในการเข้าถึงข้อมูลมากกว่า โดยเฉพาะ primary key ซึ่งใช้สำหรับเข้าถึงข้อมูลอยู่บ่อยๆ)

เทคนิคและวิธีการเขียน Transact-SQL และใช้งาน Stored procedure

  1. เริ่มต้นด้วยการใช้คำสั่ง SET NOCOUNT ON ทุกครั้ง ภายใน stored procedure
  2. หากมีการใช้ transaction ควบคุมการทำงานใน stored procedure พยายามเขียนขั้นตอนภายใน transaction ให้น้อยที่สุด เพื่อช่วยลดจำนวนการล็อกตาราง และความรวดเร็วในการประมวลผล
  3. ไม่ควรกำหนดชื่อ stored procedure ในฐานข้อมูลที่ไม่ใช่ Master โดยขึ้นต้นด้วย "sp_" ซึ่งเป็นคำนำหน้าพิเศษสำหรับ stored procedure ของระบบ เพราะอาจส่งผลให้การประมวลผลช้าลงได้
  4. ก่อนนำ stored procedure ไปใช้งาน ให้ตรวจสอบสิ่งที่ไม่ได้ใช้ออก เช่นอาจจะมีการกำหนดตัวแปร หรือพารามิเตอร์ที่ใช้ทดสอบ แต่ไม่ได้ใช้จริงในการประมวลผล ควรลบสิ่งเหล่านี้ออกจาก stored procedure
  5. ทุก objects (table, function) ที่เรียกใช้ภายใน stored procedure ให้ระบุชื่อ schema นำหน้าทุกครั้ง เช่น dbo.tableX
  6. ถ้าจำเป็นต้อง execute คำสั่ง Transact-SQL ควรใช้ store procedure "sp_executesql" แทนการใช้คำสั่ง EXECUTE
  7. การตรวจสอบความถูกต้องของ input parameters ทั้งหมดให้ดำเนินการในช่วงแรกของ stored procedure หากมีข้อผิดพลาดของ input parameters จะได้ตรวจพบก่อน และข้ามขั้นตอนการประมวลผลที่ส่งผลกับ performance ได้
  8. การเรียกใช้ stored procedure จากระบบหรือโปรแกรมที่เขียนขึ้น ให้เรียกใช้ด้วย qualified name เช่น exec dbo.myStored ไม่ควรใช้ exec myStored เฉยๆ
  9. หาก stored procedure ใด return ค่าๆ เดียวกลับมา ไม่ใช่ record set ให้กำหนด output parameter ด้วย
  10. ใช้ stored procedure แทนที่ view จะได้ performance ที่ดีกว่า
  11. ไม่ควรเขียนโค๊ด หรือกำหนดตัวแปร พารามิเตอร์ใดๆ ที่ไม่ได้ใช้ใน store procedure
  12. การเขียน comment ต่างๆ ใน store procedure สามารถใช้ได้โดยไม่ส่งผลกับ performance แต่อย่างใด แถมยังช่วยให้เราเข้าใจมากขึ้นในการกลับมาแก้ไขงานอีกด้วย
  13. หลีกเลี่ยงการใช้ SQL Server cursors ถ้าเป็นไปได้ เนื่องจากจะทำให้เสีย resources และ performance ค่อนข้างมาก
  14. โดยทั่วไปแล้วการใช้คำสั่ง join จะประมวลผลได้ไวกว่าการใช้ sub-query แต่ก็ไม่ใช่เสมอไป ในการค้นหาข้อมูลบางกรณี อาจจำเป็นต้องทดสอบการใช้งานทั้ง 2 คำสั่งนี้เพื่อเปรียบเทียบก่อนว่า performance ใดดีกว่า
  15. ถ้ามีการสร้าง temporary table ในรูปแบบ global หรือ per connection use ให้พิจารณาว่าหากใช้เก็บข้อมูลในปริมาณมาก ควรกำหนด index ให้กับ temporary table ด้วย
  16. การใช้ derived table แทนที่ temperary table จะได้ performance ที่ดีกว่า ให้คำนึงถึงวัตถุประสงค์และขอบเขตในการใช้งาน หากเลี่ยงไม่ได้ก็ต้องใช้ temperary table
  17. พยายามใช้ table variable แทนการใช้ temperary table ใน Transact-SQL
  18. ให้จำกัดจำนวนคอลัมน์ที่ต้องการค้นหาข้อมูล หรือปรับปรุงเฉพาะคอลัมน์ที่จำเป็นเท่านั้น เพื่อลดจำนวนของข้อมูลที่ใช้อ่านและเขียนข้อมูล
  19. การใช้ฟังชั่น CONVERT ให้ระบุขนาดของข้อมูลด้วย และให้จำกัดเท่าที่จำเป็นต้องใช้ จะช่วยลดหน่วยความจำในการใช้งาน
  20. ให้หลีกเลี่ยงการใช้คำสั่ง DISTINCT โดยไม่จำเป็น
  21. การเพิ่มข้อมูลลงในตารางโดยใช้คำสั่ง SELECT INTO ระหว่างที่ประมวลผล ตารางที่กำลังเพิ่มข้อมูลอยู่นั้นจะถูก lock อาจส่งผลให้ transaction อื่นๆ ไม่สามารถเข้าถึงข้อมูลได้ในชั่วขณะหนึ่ง ถ้าสามารถเลือกได้ให้ใช้คำสั่ง SELECT INTO กับข้อมูลไม่มากแต่ทำหลายๆ ครั้ง ดีกว่าทำกับข้อมูลมากๆ ในครั้งเดียว
  22. ในการตรวจสอบว่ามีข้อมูลอยู่แล้วหรือไม่นั้น ให้ใช้คำสั่ง IF EXISTS ให้หลีกเลี่ยงการใช้ SELECT COUNT(*) เพื่อหาค่ามาตรวจสอบ
  23. หากเป็นไปได้เลี่ยงใช้งานฟังชั่นกับคอลัมน์ข้อมูลใน WHERE clauses เพราะจะไม่ได้ใช้ประโยชน์ของ index การประมวลผลจำเป็นต้องสแกนข้อมูลในตารางเสียก่อน เช่น WHERE SUBSTRING(column_name, 2, 2) = 'ab'
  24. คำสั่ง NOT IN จะส่งผลให้ performance แย่มาก พยายามทดแทนด้วยคำสั่งต่อไปนี้ ตามลำดับ
  25. จากหัวข้อข้างต้น เมื่อต้องเลือกระหว่างใช้คำสั่ง IN หรือ EXISTS ให้เลือกใช้ EXISTS จะประมวลผลได้ไวกว่า
  26. ถ้ามีการใช้คำสั่ง IN ชุดของข้อมูล (list of values) ที่ใช้ค้นหา ให้ขึ้นต้นด้วยข้อมูลที่มีโอกาสค้นหาเจอมากที่สุดก่อน ไปถึงข้อมูลที่โอกาสค้นหาเจอน้อยที่สุด จะเพิ่มความรวดเร็วในการค้นหา
  27. คำสั่ง LIKE ถ้าเป็นไปได้ ให้ใช้กับเงื่อนไขค้นหาคำนำหน้าเท่านั้น เช่น LIKE 'xx%' ไม่ควรใช้กับ LIKE '%xx' หรือ LIKE '%xx% (รูปแบบท้ายสุด โดยส่วนใหญ่จะเลี่ยงกันไม่ได้เนาะ - -")
  28. ถ้าระบบหรือโปรแกรมมีการดึงค่าผลรวม หรือผลการคำนวณอยู่บ่อยๆ หากไม่ต้องการให้การทำงานของฐานข้อมูลหนักจนเกินไป ให้สร้างตารางใหม่ขึ้นเพื่อใช้จัดเก็บผลการคำนวณ และอาจใช้ trigger ช่วยในการจัดเก็บข้อมูลได้
  29. ไม่ใช้ ORDER BY ในคำสั่ง SELECT หากไม่จำเป็น เป็นไปได้ควร sort ข้อมูลที่ฝั่ง client ไม่ใช่ server (คำสั่งที่ทำให้เกิดการ sort ข้อมูล ประกอบด้วย ORDER BY, GROUP BY, SELECT DISTINCT และ UNION)
  30. ให้พิจารณาคอลัมน์ที่มีโอกาสใช้ sort บ่อยครั้ง เป็นไปได้ให้สร้าง clusterd index ให้กับคอลัมน์เหล่านั้น
  31. ถ้าระบบหรือโปรแกรมมีการใช้ wildcard text search (LIKE %) มากๆ กับข้อมูลประเภท CHAR หรือ VARCHAR ให้ใช้ full-text search option ของ SQL Server จะเพิ่มความเร็วในการค้นหาข้อมูล
  32. ควรประมวลผลข้อมูลต่างๆ ที่ฝั่งของ SQL Server และส่งข้อมูลเฉพาะที่จำเป็นให้กับ client นำไปแสดงผลเท่านั้น ควรหลีกเลี่ยงการส่งข้อมูลทั้งหมด หรือปริมาณมากๆ ไปให้ client คัดกรองก่อนนำใช้งานอีกครั้งหนึ่ง เพื่อเป็นการลด network traffic ที่เกิดขึ้นระหว่าง client หรือ server กับ SQL Server


วันอาทิตย์ที่ 22 เมษายน พ.ศ. 2555

Meta Tag Optimization (การเขียน Meta Element ให้เหมาะกับการทำ SEO)


Metadata Elements หรือ Meta Tag คือ ส่วนของซอร์สโค๊ดที่อยู่ใน Head (ส่วนหัว) ของเอกสาร HTML โดยปกติเมื่อเราเปิดหน้าเว็บไซต์หนึ่ง ๆ ขึ้นมา ส่วนของ Head จะถูกประมวลผลก่อน ดังนั้น Meta Tag จึงเป็นส่วนที่บอกคุณลักษณะของเว็บนั้น ๆ ว่าเป็นเว็บเกี่ยวกับอะไร แสดงผลด้วยภาษาอะไร ใครเป็นผู้เขียน มีคำค้นที่ใช้ว่าอะไร เป็นต้น

ซึ่ง Robot ของ Search Engine จะเก็บข้อมูลเหล่านี้ไปใช้ในการประมวลผลจัดเก็บเว็บไซต์ เรามาทำความรู้จักกับ Meta Element แต่ละ Tags กันดีกว่าครับ ผมจะใช้ความรู้สึกของผมในการวัดว่า Tagsใด มีผลกับการทำ SEO มากหรือน้อยในวงเล็บหลังหัวข้อนะครับ (ซึ่งไม่จำเป็นต้องเชื่อผมก็ได้)
Title Element - Page Titles (มีผลกับการทำ SEO มาก)
ใช้สำหรับบอกว่า หน้าเว็บไซต์ที่กำลังแสดงผลอยู่มีหัวข้อว่าอะไร เช่น
<title>SEO - Meta Tags</title>
Meta Description Tag (มีผลกับการทำ SEO ปานกลาง)
ใช้สำหรับแสดงรายละเอียดสั้น ๆ ของหน้าเว็บไซต์ที่กำลังแสดงผลอยู่ ไม่ควรเขียนให้สั้น หรือ ยาวจนเกินไป ข้อความที่เขียนควรสัมพันธ์กับเนื้อหาของหน้านั้น ๆ ด้วยนะครับ เช่น
<meta name=”description” content=”Thailand Search Engine Optimization Blog” />
Meta Keywords Tag (มีผลกับการทำ SEO ปานกลาง)
ใช้สำหรับระบุคำค้น ที่สามารถเข้ากันได้กับเนื้อหาในหน้าเว็บนั้น ๆ สามารถใส่ได้หลายคำ และแบ่งคำโดยใช้เครื่องหมายจุลภาค ( , ) เช่น
<meta name=”keywords” content=”seo,seo thai,seo blog,seo tools” />
Meta Language Tag (มีผลกับการทำ SEO มาก)
ใช้สำหรับระบุว่า หน้าเว็บไซต์นั้น ๆ มีเนื้อหาเป็นภาษาอะไร เช่น
<meta http-equiv=”content-language” content=”th” />
Meta Content Type Tag (มีผลกับการทำ SEO มาก)
ใช้สำหรับระบุว่า หน้าเว็บไซต์นั้น ๆ สามารถแสดงผลได้ถูกต้องด้วยชุดตัวอักษรแบบใด และเป็นเอกสารประเภทอะไร เช่น
<meta http-equiv=”content-type” content=”text/html; charset=UTF-8″ />
Meta Revisit-After Tag (มีผลกับการทำ SEO ปานกลาง)
ใช้สำหรับบอกกับ Robot ของ Search Engine ว่า ให้มาเก็บข้อมูลอีกครั้งในอีกกี่วันข้างหน้า เช่น
<meta name=”revisit-after” content=”7 days” />
Meta Robots Tag (มีผลกับการทำ SEO มาก)
ใช้สำหรับบอก Robot ของ Search Engine ว่าให้ Robot เก็บข้อมูลในหน้านั้นไป Indexs หรือไม่ หรือ ให้ Robot เดินทางไปตาม Links ที่ปรากฎในหน้านั้น ๆ หรือไม่ เช่น
<meta name=”robots” content=”index, follow” />
นอกจากข้างต้นแล้ว ยังมี Meta Element อีกหลาย Tags ซึ่งผมจะไม่ขอกล่าวถึงครับ เพราะไม่ค่อยเกี่ยวกับเรื่อง SEO ขอให้ทุกท่านสนุกกับการปรับแต่ง Header ของเอกสาร HTML เพื่อให้เกิดประสิทธิภาพสูงสุดในการทำ SEO นะครับ

วันศุกร์ที่ 16 มีนาคม พ.ศ. 2555

เรื่องความปลอดภัย header

 เรื่องความปลอดภัย กรณีอยากเช็คว่า user มีสิทธิ์ในการเข้าถึงข้อมูลนั้นรึเปล่า ถ้าไม่มีสิทธิ์ก็ให้ redirect ไปหน้าอื่น ดังตัวอย่าง

1. ไม่มี exit()
<?php
header("location:exit.php");
?>
ความลับ
Kong Prapan XXX

2. แบบมี exit()
<?php
header("location:exit.php");
exit();
?>
ความลับ
Kong Prapan XXX

ถ้าเราลองใช้ tool พวก HTTP sniffer หรือพวก Packet Sniffer ดูก็จะเห็นข้อมูล "ความลับ"
แต่ถ้าแบบที่สอง เราจะไม่เห้นข้อมูล "ความลับ"

Result แบบไม่มี exit: www.dizcode.com/live-demo/ss-1.png
Result แบบมี exit(): www.dizcode.com/live-demo/ss-2.png

จะเห็นได้ว่าแบบที่ 1 จะเห็นข้อความอยู่ ถึงแม้ว่าจะ set header ไปหน้าอื่นแล้วก็ตาม แต่แบบที่ 2 นั้นไม่เห็น

ซึ่งจริงๆแล้วอาจจะไม่ต้องใช้ exit(); เสมอไป อาจจะใช้ if{}else{} เป็นตัวเช็คแทนก็ได้

วันอังคารที่ 14 กุมภาพันธ์ พ.ศ. 2555

เครื่องหมาย :: ใน parent::__construct($message, $code);

เครื่องหมาย ::

เป็นการเข้าถึง static หรือ constant member ของ class 
และรวมถึง method หรือ ตัวแปรที่เรา override มาด้วยครับ

และคำข้างหน้า เครื่องหมาย :: 
บางทีจะเห็นเป็น parent บางทีอาจเห็นเป็นชื่อ class

ก็หมายถึง 

หากเป็นการเรียกใช้ภายใน class จะใช้ parent
และเช่นเดียวกัน 
หากเรียกใช้ภายนอก class แน่นอนครับ parent ใช้ไม่ได้ ก็ต้องหันไปใช้ชื่อ class แทน



Exam

class A {

    function __construct($message, $code);
}
class B extends A {
    function test(){
        parent::__construct($message, $code); // คือการเรียกให้ Class แม่ทำงานใน Method ที่เราเรียกครับ
    }
}

วันพุธที่ 18 มกราคม พ.ศ. 2555

การทำให้ Google รู้จักเว็บเราใน 24 ชั่วโมง


1. Tag on Social Bookmarking Sites
ให้ระบบของ Social Bookmarking ช่วยเรา โดยการเป็นสมาชิกของDel.icio.usBlinkListStumbleUpon.com,BlinkList หรือ Furl จากนั้น ให้เพิ่มเว็บเราเข้าไป

2. Comment on popular and recent blogs (with your link)
ไปแสดงความเห็นตามเว็บไซต์หรือ blog ดังๆ

3. Create, Submit, and Ping your XML Sitemap
ไปสร้างบัญชีสมาชิกใน Google Webmaster Central และทำ sitemap เพื่อให้ Google ได้ทำการ ping เว็บไซต์ของเรา

4. Install Google Analytics
ติดตั้ง Google Analytics ในเว็บไซต์ของเรา โดยการไปเปิดบัญชีกับมัน (ฟรี) แล้วก็เอา Code มาติด เราก็จะทำให้ Google รู้จักเว็บไซต์เราอีกทางหนึ่งรวมทั้งได้สถิติดีๆ ไว้ใช้งานอีกด้วย

5. add url ให้ google รู้จัก

วันอังคารที่ 4 ตุลาคม พ.ศ. 2554

[Android] การตั้งค่า APN ของ AIS, DTAC และ TRUE

AIS

name AIS
apn internet
username ais
password ais
server no
mmsc http://mms.mobilelife.co.th
mms proxy 203.170.229.34
mms port 8080
mcc ไม่ต้องแก้ไข
mnc ไม่ต้องแก้ไข
apn Type default
==========================
DTAC

name DTAC
apn www.dtac.co.th
proxy 203.155.200.133
port 8080
username no
password no
server no
mmsc http://mms.dtac.co.th:8002/
mms proxy 203.155.200.133
mms port 8080
mcc ไม่ต้องแก้ไข
mnc ไม่ต้องแก้ไข
apn Type default

ถ้าต้องการตั้งให้รับ MMs ได้ด้วยก้ทำตามนี้นะครับ

Name : Dtac Mms
APN : MMS
MMSC : http://mms.dtac.co.th:8002
MMS Proxy : 203.170.229.34
MMS Port : 8080
APN Type : mms
===============================
TRUE

name TRUE
apn internet
proxy 10.4.4.4
port 8080
username true
password true
server no
mmsc http://mms.trueworld.net
mms proxy 10.4.7.39
mms port 8080
mcc ไม่ต้องแก้ไข
mnc ไม่ต้องแก้ไข
apn Type default 

เครดิต : pdamobiz.com

วันศุกร์ที่ 30 กันยายน พ.ศ. 2554

เพิ่ม position ให้กับ joomla


position ใน joomla เป็นตำแหน่งที่ถูกสร้างขึ้นให้กับโมดูลต่างๆได้เลือกใช้ เช่น left , right , user1 , user2 เป็นต้น อันนี้ก็แล้วแต่ template จะอนุเคราะห์ตำแหน่งมาให้เราในการใช้งาน แต่ถ้าเราต้องการเพิ่ม position ใน template ของ joomla เองละจะทำยังไงทำได้ไหมคำตอบคือได้ครับ ไม่ยากด้วย
โดย Position ใน template ของ joomla จะถูกกำหนดไว้ที่ไฟล์ index.php โดย จะอยู่ในส่วนของ code รูปแบบนี้นะครับ
1
<jdoc:include type="modules" name="left" />
โดยที่ตรง name คือการกำหนดชื่อของ position ลงไป เช่น
1
2
<jdoc:include type="modules" name="user7"  /> <!-- กำหนด  position ชื่อ user7 -->
<jdoc:include type="modules" name="toolbar"/> <!-- กำหนด  position ชื่อ toolber-->
และให้แสดงรายละเอียดของ position ด้วยก้ต้องไปแก้ไขไฟล์ templateDetails.xml โดยจะเป็นแบบนี้
1
<position>ชื่อของ Position</position>
ตอนนี้เรารู้โค็ดแล้วก็นำมาใช้งานกันดีกว่าให้เราไปที่โฟลเดอร์ template ที่เราใช้งาน ในที่นี้ผมขอใช้ template beez ในการทดสอบละกันก็ไปที่ templates/beez/ เปิดไฟล์ templateDetails.xml ขึ้นมาและดูในส่วนของแท็ก position ให้เราเพิ่ม position ที่ต้องการเข้าไป
1
<position>bottom</position>
joomla-position
ต่อมาก็เปิดไฟล์ index.php ของ template ขึ้นมาเพิ่มโค็ดด้านล่างไปยังตำแหน่งที่ต้องการให้แสดงผลออกมา
1
2
3
<div class="bottom">
<jdoc:include type="modules" name="bottom"  />
</div>
พอเรา preview template ก็จะมี bottom ขึ้นมาให้ใช้งาน…
Selection_001