drupal: ห้อง Drupal

ขออนุญาตแยกห้องให้เป็นระเบียบครับ

ลิงก์ลัด

Drupal Theme

Drupal Module

drupal themes : summary (ของ Drupal 4.7)

basett

ธีมนี้เกิดจากปัญหาลิขสิทธิ์ของธีมใน Drupal Themes ว่าส่วนใหญ่จะมีลิขสิทธิ์ในทำนองว่า เราต้องบอกว่าธีมนี้มาจากไหน และต้องโยงเครดิตไปหาผู้พัฒนา ซึ่งบางทีเราแก้ธีมเสียจนแทบไม่มีเค้าเดิม อีกประการหนึ่งคือ ธีมที่เป็นที่นิยม มักมีการดัดแปลงมาจาก cms อันอื่น (เช่น Wordpress) จึงทำให้ชื่อสไตล์ไม่คล้องกับธีมของ drupal เอง ทำให้งง

จึงเป็นเหตุให้พัฒนาธีมแบบง่าย ๆ สำหรับเป็นฐานที่จะพัฒนาต่อยอดออกไป โดยที่ไม่ต้องกังวลกับเรื่องลิขสิทธิ์เดิมอีกต่อไป เพราะเอาต้นแบบมาจาก bulemarine แต่ตัดส่วนของ <table> ทิ้งไป ใช้แท็ก <div> เข้ามาแทน

เนื่องจากทำใหม่ทั้งหมด จึงทำให้รูปนำหน้าแท็ก (เลียนแบบจากธีม k2) ไม่สวยเหมือนมืออาชีพ แต่ก็พอถูไถน่ะ ใครอยากสวยก็แก้ไขเอาตามใจชอบ

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

update: 2006-10-31 ปรับปรุงให้ใช้งานได้จริง

Download basett (2006-10-31)


blueboxie

ขมายมาจาก bluemarine ( ธีมตั้งต้นของ drupal ) แต่งนิดหน่อย ลบสีเทาด้านซ้ายขวาออก เพิ่มสีน้ำเงินและฟ้าตรึม
ที่เหลือแทบจะไม่ได้แตะต้องอะไร คงใช้งานได้เหมือน bluemarine น่ะ

Download blueboxie (2006-07-30)


bluebox2

เอามาจาก bluemarine เหมือนกัน แต่ได้ความคิดเรื่องสีและรูปแบบจาก www.stopdesign.com

รโชหรณัง ทุกอย่างย่อมมีข้อบกพร่องทั้งสิ้น เนื่องจากธีม bluemarine ใช้ตารางในการจัดคอลัมน์ ธีมนี้ก็เลยได้รับผลเสียของการใช้ตารางเหมือนกัน คือมันจะล้นหน้า ดังนั้น ควรใช้กับจอที่มีความกว้างกว่า 1024 จุด หรือให้ปรับบล๊อกให้ลอยเพียงแค่แถบซ้ายหรือขวา แถบใดแถบหนึ่งเพียงแถบเดียว ก็จะลดปัญหาความกว้างตารางล้นจอได้ครับ :)

Download bluebox2 (2006-08-03)
screenshot


bluebox3

เมื่อได้ลองใช้ tableblue กับ IE แล้ว พบว่าแสดงผลเพี้ยนมาก เลยต้องกลับมาหาตารางเหมือนเดิม เลยเอา bluebox2 มาล้างใหม่ แก้ปัญหาตารางล้นจอ แล้วอีกแต่งนิดหน่อย

Download bluebox3 (2006-08-06)

สำหรับธีมนี้ ลองแล้ว แสดงผลรวดเร็วดี เลยแต่งสีน้ำตาลพ่วงมาด้วย เผื่อได้ไช้เอง


palapanyo2

ปรับได้ทั้ง 2 และ 3 คอลัมน์ เหมือนเดิม

ทำเสร็จวันแม่พอดี ดูร้อนไปหน่อย เพราะตั้งใจจะให้เอารูปมาใส่ตรงส่วนหัว

เหลือข้อผิดพลาดกับ IE นิดหน่อย แต่ก็พอดูได้ (เว็บดัง ๆ ยังมีเลย นับประสาอะไรกับเราเนอะ :P )

Download palapanyo2 (2006-08-12)

palapanyo3

ตกแต่งให้ดูร้อนน้อยลง

แก้ข้อผิดพลาดกับ IE เรื่องสีล้น ด้วยการบังคับขอบคงที่

Download palapanyo3 (2006-08-19)

palapanyo4

พยายามประณีประนอมหลาย ๆ อย่างเข้าด้วยกัน

เนื้องจากต้องการความเข้ากันได้กับ IE รุ่นเก่า จึงใช้แท็ก <table> แทน

เติมความสามารถในการแสดงภาพแบบสุ่ม บวกการเปลี่ยนการแสดงผลแบบจางหาย ดังนั้น ธีมนี้จึงต้องเอาไปแก้ไขโค๊ดภายในเอาเองอีกมาก ไม่ใช่ธีมที่แตกไฟล์แล้วใช้ได้เลย

ภายในมีโค๊ดจาวาสคริปต์ (AJAX) ที่ไม่เกี่ยวกับธีมอยู่ด้วย แต่ขอเก็บรวมไว้ด้วยกัน เพราะขี้เกียจแยกน่ะ

Download palapanyo4 (2006-08-30)

palapanyo5

เอาต้นแบบจากธีม basett

พยายามทำให้ดูเรียบ โล่ง หรูเล็กน้อย

เป็นธีมแบบ fluid width ทั้งสามคอลัมน์ และบังคับว่าต้องมีคอลัมน์ขวา เพราะดัน secondary links และ search box รวมทั้ง mission ลงมาที่ sidebar ทางขวา

(เนื่องจากธีมที่จะใช้งานจริง จะนำรูปไปใส่ตรงนั้น จึงต้องทำส่วน header ให้โล่ง ๆ)

และก็เหมือนเดิม คือ IE แสดงไม่ค่อยดีนัก

Download palapanyo5 (2006-09-27)

palapanyo6

ธีมนี้เกิดจากการศึกษาการทำ tab แบบขอบมน เอาฐานจากธีม basett ลอกหน้าตาจากหลายแห่งมาประชุมกัน เพื่อจะทำให้ใช้กับ drupal-4.7

ธีมที่ทำหลัง ๆ มานี่ พยายามทำให้สามารถปรับได้ทั้ง 2 และ 3 คอลัมน์

ค่อนข้างตั้งใจทำมาก เพราะจะเอาไปใช้จริง แต่ก็ต้องยังมีข้อผิดพลาดอยู่อย่างแน่นอน

Download palapanyo6 (2006-12-14)

ข้อคิดที่ได้จากการทำธีมนี้


storyteller

เหล้าเก่าในขวดใหม่ ขยายมาจาก tashmina อีกที ปรับนิดเดียว

Download storyteller (2006-08-01)

storyglass

แถมอีกหน่อยนึง ทำเป็นบล๊อกพื้นใส แต่ว่า... IE ดูไม่จืด :P

Download storyglass (2006-08-01)


tableblue

เอารูปแบบมาจาก bluebox2 แต่พยายามจะแก้ปัญหาตารางล้น ด้วยการใช้แท็ก <div> แทนตารางแบบเดิม แล้วแก้ปัญหาสีตารางด้วยการใช้ภาพพื้นหลังเป็นไฟล์ gif

แสดงได้ 3 คอลัมน์ ถ้าแสดงเพียง 2 คอลัมน์ จะชดเชยสายตาด้วยคอลัมน์ว่าง

การแสดงผลใน konqueror ช้า เนื่องมาจากการแสดงภาพพื้นหลังเป็นเปอร์เซนต์ การแสดงผลใน IE เพี้ยนมาก

Download tableblue (2006-08-06)
screenshot


table2

แก้ปัญหาแการแสดงผลช้า ด้วยการกำหนดคอลัมน์ซ้ายขวาให้ความกว้างคงที่

การแสดงผลใน konqueror เร็วกว่าเดิมมาก ๆ (แต่ยังช้ากว่าแบบใช้ตาราง) การแสดงผลใน IE เรื่อง overflow:auto เพี้ยน ดันขอบขวาตกจอ

Download table2 (2006-08-08)

นอกจากสีฟ้าแล้วยังทำสีน้ำตาล



และสีเขียวด้วย


table3

ใช้หลักการเดิมของ table2 มาปรับแต่ง เลือกใช้สีจากสีตั้งต้นคือ #112266 เอามาปรับเปอร์เซนต์ความใสใน gimp แล้วเอาสีมาตัดกัน เลยทำให้ไม่อยากใส่รูปในส่วนหัว เพราะดูแล้วไม่ค่อยเข้า

เนื่องจากหลีกเลี่ยงคำสั่ง css คือ position: relative; การแสดงผลใน konqueror และ IE จึงเร็วดี การแสดงผลใน IE เพี้ยนเล็กน้อย คอลัมน์ขวาสุด เลื่อนมาทางซ้ายเล็กน้อย

เลือกได้ทั้ง 2 และ 3 คอลัมน์ (ผมชอบแบบเอาคอลัมน์ขวาไว้ สีมันเข้มสวยดี)

Download table3 (2006-08-14)


tashmina

ลองทำจากรูปผ้าพาชมินา ปรับมาจากธีม slashin แต่แปลงเยอะมาก

Download tashmina (2006-07-31)


tt2


ดัดมาจาก basett ปรับเป็น 2 คอลัมน์แบบความกว้างคงที่

Download tt2 (2006-09-12)


tt2-act


เอาสไตล์ชีตจากธีม tt2-inv
เอาหน้าตามาจาก เว็บ Activate ของคุณ Steve Leggat

เป็นธีมแบบ fixed width สองคอลัมน์ (sidebar-left มาอยู่บน sidebar-right)
ทีแรกจะแต่งให้สวย แต่บังเอิญขี้เกียจเสียก่อน เลยออกมาเหลี่ยม ๆ
Download tt2-act (2006-10-24)


tt2-inv

ลอกรูปแบบมาจาก OpenWebDesign: Invention Template

เขียนขึ้นมาจากธีม tt2 โดยพยายามแต่งรูปให้น้อยที่สุด

การศึกษาครั้งนี้ได้รู้ว่า

Download tt2-inv (2006-09-22)


tt2-zl


เอาสไตล์ชีตจากธีม tt2-inv
เอาหน้าตามาจาก openwebdesign: Zenlike1.0 by NodeThirtyThree

เป็นธีมแบบ fixed width สองคอลัมน์ (sidebar-left มาอยู่บน sidebar-right)
พยายามทำให้เป็นธีมสำเร็จรูป ไม่ต้องแก้แล้วก็สามารถใช้งานได้เลย
ออกแนวลิเกนิดหน่อย เลยแก้ด้วยรูปที่ดูจริงจังหน่อย ;D
Download tt2-zl (2006-10-09)


เดี๋ยวจะทยอยเอาอันอื่นมารวม :)

ช่วงนี้วิญญาณออกแบบเข้าสิง รีบ ๆ ทำไว้หลาย ๆ ธีม ต้องได้ไช้จริงซักธีมนึงละน่า

ธีมสำหรับ Drupal 5.0

basett5

เอาธีม basett มาทำใหม่ สำหรับให้ใช้กับ Drupal-5.0
update

แก้ไขให้บล๊อกหล่นยากขึ้น ทำให้เริ่มซับซ้อนขึ้น

Download basett5 (2006-11-28)


base2tt5

ผมได้มีโอกาสเข้าไปที่เว็บ debianclub.com รู้สึกขอบธีม New Portal ซึ่งมีข้อดีคือโครงสร้างเรียบง่าย แสดงผลได้เร็ว และเป็นธีมที่มีลักษณะ self align คือจะปรับตัวเพื่อเว้นช่องสำหรับบล๊อกทางซ้าย หรือทางขวา แบบอัตโนมัติโดยไม่ต้องเขียนสคริปต์ช่วย

จึงลองเอาธีม bluemarine จาก drupal-5 beta 2 มาทดลองสร้างใหม่ขึ้นเลียนแบบ ก็ใช้ได้ผลดี

แต่เสียดายที่ใช้กับ Konqueror ไม่ได้ เพราะเกิดข้อผิดพลาดคือ

เมื่อเปิดเพจครั้งแรก การแสดงผลจะถูกต้อง (ยกเว้นกรณี content ล้นขวา - ถึงแม้จะดักด้วย width: 95% ไว้แล้ว ก็ไม่ได้ผล)
แต่เมื่อเคลื่อนเมาส์ไปมา content จะเลื่อนมาทางซ้าย ไปหลบอยู่หลังบล๊อกด้านซ้ายทันที

ยังไม่ทราบว่าเป็นข้อผิดพลาดที่ Konqueror หรือเปล่า

จึงตัดสินใจ freeze code ไว้ก่อน เพื่อจะดูผลของ CSS ในแบบต่าง ๆ

Download base2tt5 (2006-12-01)


tt15-cssmania

ได้ความคิดหน้าตาจาก CSSmania โดยมาทำแบบไม่ต้องใช้ไฟล์ภาพ แต่ใช้ css ล้วน ๆ ในการปรับหน้าตาให้ดูมีมิติ

ร้างเวทีมานานแล้ว กลับมาทำใหม่มันงง ๆ ก็เลยทำลวก ๆ เหมือนเดิมครับ

Download tt15-cssmania (2007-07-18)


tt15-greenorange

คล้าย ๆ ธีม tt35-cw
หมดแรงบันดาลใจแล้ว สมองเลยเริ่มตัน แหะ ๆ

ปรับส่วนหัวให้ขยายและหดได้ จัด sidebar ซ้ายมาขวา ขวาไปล่าง ทำให้เข้าที่เข้าทางมากขึ้นหน่อย

ทำลวก ๆ มาก ถ้าเอาไปใช้จริง คงต้องปรับแก้เอาเองครับ

Download tt15-greenorange (2007-01-02)


tt15-ldv

กลับจากเที่ยวเชียงใหม่ เลยเอาธีม tt15-palapanyo6 มาทำใหม่ ตกแต่งเพ่ิมเติมนิดหน่อยยามหัวกำลังตัน :P

ldv: Long Distance Voyager สะกดถูกหรือเปล่าก็ไม่รู้ ;D

Download tt15-ldv (2007-01-18)


tt15-ndhistory

เอาหน้าตามาจาก University of Notre Dame - Department of History ขโมยมาตรงหัวนิดเดียว ที่เหลือขี้เกียจแล้ว เพราะงานเยอะเกินไป

Download tt15-ndhistory (2007-01-20)


tt15-palapanyo6

ธีมนี้เกิดจากการศึกษาการทำ tab แบบขอบมน เอาฐานจากธีม basett ลอกหน้าตาจากหลายแห่งมาประชุมกัน เพื่อจะทำให้ใช้กับ drupal-4.7

ธีมที่ทำหลัง ๆ มานี่ พยายามทำให้สามารถปรับได้ทั้ง 2 และ 3 คอลัมน์

ค่อนข้างตั้งใจทำมาก เพราะจะเอาไปใช้จริง แต่ก็ต้องยังมีข้อผิดพลาดอยู่อย่างแน่นอน

Download tt15-palapanyo6 (2006-12-14)

ข้อคิดที่ได้จากการทำธีมนี้

tt15-Palapany 6.1

เอาธีมเก่าจาก tt15-palapanyo6 มาปรับปรุง

เป็น 3 สดมภ์ที่ปรับความกว้างของสดมภ์ซ้ายขวาตามความกว้างของบราวเซอร์ ปรับปรุงให้ดูมีมิติขึ้น ทนทานขึ้น ตั้งใจทำ logo ให้คาบระหว่างสองส่วนใน header เพื่อให้ดูมีมิติ ซึ่งอาจทำ site-name เป็นไฟล์ภาพ ซึ่งจะทำให้ดูดีขึ้นอีก

Download tt15-Palapanyo 6.1 (2007-12-25)


tt25-dhamportal

เอาธีม base2tt5 มาปรับแต่งให้ใช้กับ Konqueror ได้ แล้วลองปรับเปลี่ยนดู ได้ออกมาเป็นธีมนี้ครับ

ลองใช้ดูสักหลายวันนะครับ

Download tt25-dhamportal (2006-12-05)


tt25-django

ลอกแบบมาจากโฮมเพจของเว็บเฟรมเวิร์ก Django แต่เปลี่ยนเป็นสีแดงแทน

ท่อนบนเหมือนแบบ แต่ท่อนล่างไม่ค่อยสวย เพราะต้นแบบคือธีม base2tt ไม่เอื้อให้ใช้ layout แบบนี้

Download tt25-django (2006-12-09)


tt25-saupadisesa

ตบแต่งเพิ่มเติมนะครับ ธีมเดิมดูเข้มไปหน่อย

Download tt25-saupadisesa-old (2006-12-06)

ปรับปรุง

ปรับแต่งให้กลมกลืนขึ้น

Download tt25-saupadisesa (2007-12-27)

หมายเหตุ

ชื่อยากไปหน่อย อธิบายเผื่อคุณหมอนะครับ ;D
saupadisesa ย่อมาจาก สอุปาทิเสสะนิพพาน แปลว่าจิตถึงนิพพานแล้ว แต่ยังมีอุปาทิ(ขันธ์ ๕)เหลืออยู่ ทำให้ยังต้องบริหารขันธ์ที่ยังเหลืออยู่

เปรียบเสมือนกับน้ำบนใบบัว น้ำเปรียบเหมือนอุปาทิ ใบบัวเปรียบเหมือนจิต

อุปาทิไม่สามารถแทรกซึมเข้าถึงจิตได้ เหมือนน้ำเพียงแค่กลิ้งไปมาอยู่บนใบบัวฉันนั้น

เอวัง :)


tt35-carrot

ลอกแบบจาก http://www.cabedge.com โดยเอาธีม tt35-cw มาปรับใช้

เอาภาพมาจากที่ไปเที่ยวพม่า สถานที่คือพระธาตุอินทร์แขวน
สามารถดูภาพได้ที่ www.palapanyo.com/gal/burma

บล๊อกซ้ายจะถูกเลื่อนไปทางขวาบน และบล๊อกขวาจะอยู่เลื่อนลงมาข้างใต้

Download tt35-carrot (2007-10-09)

tt35-cw

เกิดจากความอยากลองบล๊อกแบบลอยขัี้นกับลอยไปทางซ้ายได้ สร้างขึ้นแบบหยาบ ๆ เพื่อจะใช้งานกับ Drupal-5 (ถ้าจะเอามาใช้งานจริง คงต้องปรับบล๊อกให้เหมาะสมกับธีมด้วย)

บล๊อกซ้ายจะถูกเลื่อนไปทางขวาบน และบล๊อกขวาจะอยู่ใต้ลงมา และถ้ามีที่เหลือทางซ้าย จะสามารถปรับตัวเองให้เลื่อนไปทางซ้ายได้ด้วย

เอาหน้าตามาจาก Cal Wineries ซึ่งโยงลิงก์ไปจาก cssvault.com อีกทีนึง

Download tt35-cw (2006-12-16)

update

ปรับปรุงนิดหน่อย Download tt35-cw2 (2006-12-21)


tt35-Palapanyo8

เอาโครงจาก tt36-carrot

เอาความคิดทางหน้าตาจาก เว็บหลวงพ่อชุมพล พลปญฺโญ

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

เป็น 2+1 สดมภ์ บล๊อกซ้ายย้ายมาอยู่ขวา เนื้อหาหลักจะเลื่อนไหลไปเต็มพื้นที่ และบล๊อกขวาจะอยู่เลื่อนลงมาข้างใต้

Download tt35-Palapanyo8 (2007-12-29)

drupal: ธีม tt35-carrot

tt35-carrot

ลอกแบบจาก http://www.cabedge.com โดยเอาธีม tt35-cw มาปรับใช้

เอาภาพมาจากที่ไปเที่ยวพม่า สถานที่คือพระธาตุอินทร์แขวน
สามารถดูภาพได้ที่ www.palapanyo.com/gal/burma

บล๊อกซ้ายจะถูกเลื่อนไปทางขวาบน และบล๊อกขวาจะอยู่เลื่อนลงมาข้างใต้

Download tt35-carrot (2007-10-09)

ธีมสำหรับ Drupal 6.0


tt16-Booklet

เอาโครงจาก tt16-cssmania โดยต้องการทำธีม 3 สดมภ์ ที่ดูคล้าย 2 สดมภ์ เรียบง่าย

เอาความคิดทางหน้าตาจาก Bracewell & Giuliani แต่ทำไปแล้วมันไม่สวย เปลี่ยนไปมาเลยกลายเป็นแบบที่เห็น

*** ยังทำไม่เสร็จ *** ขาดตรงเมื่อยุบเหลือ 2 สดมภ์และ 1 สดมภ์แล้ว พื้นหลังยังเหมือนเดิม และ IE แสดงผลเพี้ยน ๆ หน่อย ถ้ามีเวลาคงได้กลับมาปรับปรุงใหม่ให้สมบูรณ์

สดมภ์ทั้ง 3 จะเปลี่ยนความกว้างตามความกว้างของขนาดหน้าต่าง ใช้เทคนิกพื้นหลังเป็นไฟล์ GIF แสดงผลเป็นเปอร์เซนต์ตามแนวนนอน โดยเจาะโปร่งเป็นส่วน ๆ จึงทำให้สามารถแสดงผลแบบ liquid ได้

Download tt16-booklet (2007-12-08)


tt16-cssmania

ได้ความคิดหน้าตาจาก CSSmania โดยมาทำแบบไม่ต้องใช้ไฟล์ภาพ แต่ใช้ css ล้วน ๆ ในการปรับหน้าตาให้ดูมีมิติ

ร้างเวทีมานานแล้ว กลับมาทำใหม่มันงง ๆ ก็เลยทำลวก ๆ เหมือนเดิมครับ

Download tt16-cssmania (2007-10-25)

 


tt16-Merit Dawn

เอาโครงจาก tt16-cssmania โดยต้องการทำธีม 3 สดมภ์ สีฟ้า

ทำ ๆ ไปแล้วหมดแรง เอาแค่นี้พอแล้ว (ธีมนี้ไม่ค่อยดีเท่าไหร่)

สดมภ์ทั้ง 3 จะเปลี่ยนความกว้างตามความกว้างของขนาดหน้าต่าง ใช้เทคนิกเงาของบล๊อกแบบใช้ภาพพื้นหลังเป็น gif

Download tt16-Merit Dawn (2008-01-27)


tt16-Palapanyo 6.1

เอาธีมเก่าจาก tt15-palapanyo6 มาปรับปรุง

เป็น 3 สดมภ์ที่ปรับความกว้างของสดมภ์ซ้ายขวาตามความกว้างของบราวเซอร์ ปรับปรุงให้ดูมีมิติขึ้น ทนทานขึ้น ตั้งใจทำ logo ให้คาบระหว่างสองส่วนใน header เพื่อให้ดูมีมิติ ซึ่งอาจทำ site-name เป็นไฟล์ภาพ ซึ่งจะทำให้ดูดีขึ้นอีก

Download tt16-Palapanyo 6.1 (2007-12-25)


tt26-Freebird

อยากได้ธีมที่ค่อนข้างโล่งแบบนี้มานานแล้ว เพิ่งมีรูปที่กลับจากไปเที่ยวมา เลยทำไว้ก่อนทิ้งไปทำงานอื่น ทำลวก ๆ เช่นเดิม จึงไม่ค่อยถูกกับ IE เท่าไหร่ บล๊อกกลางหล่นง่ายไปหน่อย

เป็น 3 สดมภ์ แบบความกว้างของบล๊อกซ้ายขวาคงที่ ที่ 210px กว้างรวมน้อยสุดที่ 800px และมากสุดที่ 1080px

Download tt26-Freebird (2008-11-27)


tt26-Morning Grass

เอาโครงจาก tt26-dhamportal

เอาแบบจาก Blaugallery

เป็น 3 สดมภ์ที่ตรึงความกว้างของสดมภ์ซ้ายขวาให้คงที่ ปรับให้เนื้อความดูแน่น และคลายความอืดอัดด้วยการลดความแตกต่างของสีลง

Download tt26-Morning Grass (2007-12-21)


tt26-Renaissance Green

เอาโครงจาก tt26-dhamportal

ตั้งต้นจาก Green Renaissance แต่ทำไปทำมาดันไปลอกธีมของเว็บ Drupal

ทำไม่รอด ดังนั้นจึงยังไม่เสร็จ ใช้กับ IE ไม่ผ่าน

เป็น 3 สดมภ์ที่ปรับทุกสดมภ์พร้อมกัน ตามความกว้างของบราวเซอร์

Download tt26-Renaissance Green (2007-12-19)


tt26-Saupadisesa

เอาธีมเก่าจาก tt25-saupadisesa มาปรับปรุงให้กลมกลืน (รวมทั้งถือโอกาสปรับปรุงธีมเก่าของ Drupal-5 ด้วย)

เป็น 3 สดมภ์ที่ปรับความกว้างของสดมภ์ซ้ายขวาตามความกว้างของบราวเซอร์ โดยแบ่ง sidebar-left sidebar-right และ main ให้อยู่ในระนาบเดียวกัน ทำให้แสดงผลได้เร็ว (ใช้โครงของ tt2) ปรับปรุงใหม่ให้กลมกลืนและมีมิติขึ้นเล็กน้อย

Download tt26-Saupadisesa (2007-12-27)


tt36-borneo

เอาโครงจาก tt36-carrot ลอกสีมาจากเว็บ Borneo Tropical Rainforce Foundation

บล๊อกซ้ายอยู่ปกติ และบล๊อกขวาจะอยู่เลื่อนลงมาข้างใต้

Download tt36-borneo (2007-11-21)

 

tt36-carrot

เอาโครงมาจาก tt35-carrot ปรับแต่งเรื่องภาพเล็กน้อยจาก web: แสดงรูปแบบสุ่ม - revised

ทีแรกกะจะใช้ flash แต่ทำไม่เป็น ถ้าทำได้ก็ขนาดไฟล์ใหญ่มาก เลยใช้วิธีเดิมดีกว่า render ภาพได้นิ่มนวลด้วย

บล๊อกซ้ายจะถูกเลื่อนไปทางขวาบน และบล๊อกขวาจะอยู่เลื่อนลงมาข้างใต้

Download tt36-carrot (2007-10-23)


tt36-Heaven Blessing

ต้องการให้เรียบ โล่ง นุ่ม สงบ และไม่ให้จืดตา แต่เนื่องจากเรื้อเวทีนานไปหน่อย กอรปกับทำลวกไปหน่อย จึงดูหยาบเล็กน้อย

เป็น 2+1 สดมภ์ บล๊อกซ้ายอยู่ซ้าย บล๊อกขวาจะอยู่เลื่อนลงมาข้างใต้ กว้างน้อยสุดที่ 800px และมากสุดที่ 980px

Download tt36-Heaven Blessing (2008-11-26)


tt36-Ozone

เอาโครงจาก tt36-Palapanyo8

ต้องการทำเป็นธีมเลียนธรรมชาติ กึ่งเทคโนโลยีหน่อย ๆ แต่ทำออกมาแล้วดูการ์ตูนไปนิดนึง

เป็น 2+1 สดมภ์ บล๊อกซ้ายย้ายมาอยู่ขวา เนื้อหาหลักจะเลื่อนไหลไปเต็มพื้นที่ และบล๊อกขวาจะอยู่เลื่อนลงมาข้างใต้ ตรง mission เว้นเผื่อใส่ภาพเคลื่อนไหว

Download tt36-Ozone (2008-01-24)


tt36-palapanyo7

เอาโครงจาก tt36-carrot เอาแรงบันดาลใจเรื่องหน้าตาจากเว็บพระป่า forestsangha.org

อยากให้ดูสงบ สะอาด

บล๊อกซ้ายอยู่ปกติ และบล๊อกขวาจะอยู่เลื่อนลงมาข้างใต้

Download tt36-palapanyo7 (2007-10-28)


tt36-Palapanyo8

เอาโครงจาก tt36-carrot

เอาความคิดทางหน้าตาจาก เว็บหลวงพ่อชุมพล พลปญฺโญ

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

เป็น 2+1 สดมภ์ บล๊อกซ้ายย้ายมาอยู่ขวา เนื้อหาหลักจะเลื่อนไหลไปเต็มพื้นที่ และบล๊อกขวาจะอยู่เลื่อนลงมาข้างใต้

Download tt36-Palapanyo8-old (2007-12-29)

update

เนื่องจากปัญหาข้อจำกัดในการแสดงเนื้อหา จึงปรับปรุงมาเป็นแบบมาตรฐานแทนครับ

Download tt36-Palapanyo8 (2008-01-02)


tt36-BlueSky

เอาโครงจาก tt36-carrot

เที่ยวนี้คิดหน้าตาเอง ทำให้พื้นหลังดูโปร่งตาเล็กน้อย โดยหนีปัญหา IE ไม่รองรับไฟล์กราฟฟิก png ด้วยการทำพื้นหลังเป็นหลายชั้น แล้วนำมาซ้อนทับกัน

ใจจริงอยากทำให้พิสดารมีตัวแบ่งพื้นที่เยอะ ๆ แต่ทำไปทำมาหมดแรงเสียก่อน ได้แค่นี้เลยเอาแค่นี้ครับ

บล๊อกซ้ายอยู่ปกติ และบล๊อกขวาจะอยู่เลื่อนลงมาข้างใต้

Download tt36-bluesky (2007-12-03)


tt36-Fancy

เอาโครงจาก tt36-carrot

เอาความคิดทางหน้าตาจาก Spektacle ทำให้หัวดูโปร่งตาเล็กน้อย เอาพื้นหลังจากกระเบื้องพื้นวัดที่มัณฑะเลย์ ภาพหัวจากตลาดผ้าจันปาธในนิวเดลลี (ธีมเดียว 3 ประเทศ)

ทำค่อนข้างหยาบ เลยทำให้ IE แสดงผลเพี้ยน ๆ หน่อย

บล๊อกซ้ายอยู่ปกติ และบล๊อกขวาจะอยู่เลื่อนลงมาข้างใต้ โดยแต่ละบล๊อกจะแสดงได้ 10 สี จาก 0-9 โดยเอาตัวเลขมาจากตัวแปร $block-&gt;delta โดยแปลงที่ไฟล์ block.tpl.php

Download tt36-fancy (2007-12-04)


tt36-Mara Black

เอาโครงจาก tt36-carrot

เอาความคิดทางหน้าตาจาก Artworking โดยตั้งใจจะทำให้มีความเปรียบต่างสูง เพื่อถนอมสายตา พื้นหลังเป็นเทาดำเพื่อการประหยัดพลังงาน

อีตอนกำลังสร้างส่วนหัว (header) ลูกสาวถามว่ากำลังทำเว็บมารเหรอ เลยเอามาตั้งชื่อธีมเสียเลย ว่าธีมมาร (Mara) แต่เติม Black ด้วย เพราะว่าอาจเปลี่ยนสีพื้นไปได้หลายสีครับ

บล๊อกซ้ายอยู่ปกติ และบล๊อกขวาจะอยู่เลื่อนลงมาข้างใต้

Download tt36-Mara Black (2007-12-10)

drupal: ธีม tt16-Booklet

tt16-Booklet

เอาโครงจาก tt16-cssmania โดยต้องการทำธีม 3 สดมภ์ ที่ดูคล้าย 2 สดมภ์ เรียบง่าย

เอาความคิดทางหน้าตาจาก Bracewell & Giuliani แต่ทำไปแล้วมันไม่สวย ถ้าจะให้สวยก็ต้องเหมือนต้นแบบ เกรงใจเจ้าของเว็ป เลยทดลองเปลี่ยนไปมาเลยกลายเป็นแบบที่เห็น

*** ยังทำไม่เสร็จ *** ขาดตรงเมื่อยุบเหลือ 2 สดมภ์และ 1 สดมภ์แล้ว พื้นหลังยังเหมือนเดิม และ IE แสดงผลเพี้ยน ๆ หน่อย ถ้ามีเวลาคงได้กลับมาปรับปรุงใหม่ให้สมบูรณ์

สดมภ์ทั้ง 3 จะเปลี่ยนความกว้างตามความกว้างของขนาดหน้าต่าง ใช้เทคนิกพื้นหลังเป็นไฟล์ GIF แสดงผลเป็นเปอร์เซนต์ตามแนวนนอน โดยเจาะโปร่งเป็นส่วน ๆ จึงทำให้สามารถแสดงผลแบบ liquid ได้

Download tt16-booklet (2007-12-08)

drupal: ธีม tt16-Merit Dawn

tt16-Merit Dawn

เอาโครงจาก tt16-cssmania โดยต้องการทำธีม 3 สดมภ์ สีฟ้า

ทำ ๆ ไปแล้วหมดแรง เอาแค่นี้พอแล้ว (ธีมนี้ไม่ค่อยดีเท่าไหร่)

สดมภ์ทั้ง 3 จะเปลี่ยนความกว้างตามความกว้างของขนาดหน้าต่าง ใช้เทคนิกเงาของบล๊อกแบบใช้ภาพพื้นหลังเป็น gif

Download tt16-Merit Dawn (2008-01-27)

drupal: ธีม tt16-Palapanyo 6.1

tt16-Palapanyo 6.1


เอาธีมเก่าจาก tt15-palapanyo6 มาปรับปรุง

เป็น 3 สดมภ์ที่ปรับความกว้างของสดมภ์ซ้ายขวาตามความกว้างของบราวเซอร์ ปรับปรุงให้ดูมีมิติขึ้น ทนทานขึ้น ตั้งใจทำ logo ให้คาบระหว่างสองส่วนใน header เพื่อให้ดูมีมิติ ซึ่งอาจทำ site-name เป็นไฟล์ภาพ ซึ่งจะทำให้ดูดีขึ้นอีก
Download tt16-Palapanyo 6.1 (2007-12-25)

drupal: ธีม tt26-Freebird

tt26-Freebird


อยากได้ธีมที่ค่อนข้างโล่งแบบนี้มานานแล้ว เพิ่งมีรูปที่กลับจากไปเที่ยวมา เลยทำไว้ก่อนทิ้งไปทำงานอื่น ทำลวก ๆ เช่นเดิม จึงไม่ค่อยถูกกับ IE เท่าไหร่ บล๊อกกลางหล่นง่ายไปหน่อย
เป็น 3 สดมภ์ แบบความกว้างของบล๊อกซ้ายขวาคงที่ ที่ 210px กว้างรวมน้อยสุดที่ 800px และมากสุดที่ 1080px
Download tt26-Freebird (2008-11-27)

drupal: ธีม tt26-Morning Grass

tt26-Morning Grass

เอาโครงจาก tt26-dhamportal

เอาแบบจาก Blaugallery

เป็น 3 สดมภ์ที่ตรึงความกว้างของสดมภ์ซ้ายขวาให้คงที่ ปรับให้เนื้อความดูแน่น และคลายความอืดอัดด้วยการลดความแตกต่างของสีลง

Download tt26-Morning Grass (2007-12-21)

drupal: ธีม tt26-Renaissance Green

tt26-Renaissance Green

เอาโครงจาก tt26-dhamportal

ตั้งต้นจาก Green Renaissance แต่ทำไปทำมาดันไปลอกธีมของเว็บ Drupal

ทำไม่รอด ดังนั้นจึงยังไม่เสร็จ ใช้กับ IE ไม่ผ่าน

เป็น 3 สดมภ์ที่ปรับทุกสดมภ์พร้อมกัน ตามความกว้างของบราวเซอร์

Download tt26-Renaissance Green (2007-12-19)

 

drupal: ธีม tt26-Saupadisesa

tt26-Saupadisesa

เอาธีมเก่าจาก tt25-saupadisesa มาปรับปรุงให้กลมกลืน (รวมทั้งถือโอกาสปรับปรุงธีมเก่าของ Drupal-5 ด้วย)

เป็น 3 สดมภ์ที่ปรับความกว้างของสดมภ์ซ้ายขวาตามความกว้างของบราวเซอร์ โดยแบ่ง sidebar-left sidebar-right และ main ให้อยู่ในระนาบเดียวกัน ทำให้แสดงผลได้เร็ว (ใช้โครงของ tt2) ปรับปรุงใหม่ให้กลมกลืนและมีมิติขึ้นเล็กน้อย

Download tt26-Saupadisesa (2007-12-27)

drupal: ธีม tt36-BlueSky

tt36-BlueSky


เอาโครงจาก tt36-carrot
เที่ยวนี้คิดหน้าตาเอง ทำให้พื้นหลังดูโปร่งตาเล็กน้อย โดยหนีปัญหา IE ไม่รองรับไฟล์กราฟฟิก png ด้วยการทำพื้นหลังเป็นหลายชั้น แล้วนำมาซ้อนทับกัน
ใจจริงอยากทำให้พิสดารมีตัวแบ่งพื้นที่เยอะ ๆ แต่ทำไปทำมาหมดแรงเสียก่อน ได้แค่นี้เลยเอาแค่นี้ครับ

บล๊อกซ้ายอยู่ปกติ และบล๊อกขวาจะอยู่เลื่อนลงมาข้างใต้
Download tt36-bluesky (2007-12-03)

drupal: ธีม tt36-Fancy

tt36-Fancy


เอาโครงจาก tt36-carrot
เอาความคิดทางหน้าตาจาก Spektacle ทำให้หัวดูโปร่งตาเล็กน้อย เอาพื้นหลังจากกระเบื้องพื้นวัดที่มัณฑะเลย์ ภาพหัวจากตลาดผ้าจันปาธในนิวเดลลี (ธีมเดียว 3 ประเทศ)
ทำค่อนข้างหยาบ เลยทำให้ IE แสดงผลเพี้ยน ๆ หน่อย

บล๊อกซ้ายอยู่ปกติ และบล๊อกขวาจะอยู่เลื่อนลงมาข้างใต้ โดยแต่ละบล๊อกจะแสดงได้ 10 สี จาก 0-9 โดยเอาตัวเลขมาจากตัวแปร $block->delta โดยแปลงที่ไฟล์ block.tpl.php
Download tt36-fancy (2007-12-04)

drupal: ธีม tt36-Heaven Blessing

tt36-Heaven Blessing


ต้องการให้เรียบ โล่ง นุ่ม สงบ และไม่ให้จืดตา แต่เนื่องจากเรื้อเวทีนานไปหน่อย กอรปกับทำลวกไปหน่อย จึงดูหยาบเล็กน้อย
เป็น 2+1 สดมภ์ บล๊อกซ้ายอยู่ซ้าย บล๊อกขวาจะอยู่เลื่อนลงมาข้างใต้ กว้างน้อยสุดที่ 800px และมากสุดที่ 980px
Download tt36-Heaven Blessing (2008-11-26)

drupal: ธีม tt36-Mara Black

tt36-Mara Black

เอาโครงจาก tt36-carrot

เอาความคิดทางหน้าตาจาก Artworking โดยตั้งใจจะทำให้มีความเปรียบต่างสูง เพื่อถนอมสายตา พื้นหลังเป็นเทาดำเพื่อการประหยัดพลังงาน

อีตอนกำลังสร้างส่วนหัว (header) ลูกสาวถามว่ากำลังทำเว็บมารเหรอ เลยเอามาตั้งชื่อธีมเสียเลย ว่าธีมมาร (Mara) แต่เติม Black ด้วย เพราะว่าอาจเปลี่ยนสีพื้นไปได้หลายสีครับ

บล๊อกซ้ายอยู่ปกติ และบล๊อกขวาจะอยู่เลื่อนลงมาข้างใต้

Download tt36-Mara Black (2007-12-10)

 

drupal: ธีม tt36-Ozone

tt36-Ozone

เอาโครงจาก tt36-Palapanyo8

ต้องการทำเป็นธีมเลียนธรรมชาติ กึ่งเทคโนโลยีหน่อย ๆ แต่ทำออกมาแล้วดูการ์ตูนไปนิดนึง

เป็น 2+1 สดมภ์ บล๊อกซ้ายย้ายมาอยู่ขวา เนื้อหาหลักจะเลื่อนไหลไปเต็มพื้นที่ และบล๊อกขวาจะอยู่เลื่อนลงมาข้างใต้ ตรง mission เว้นเผื่อใส่ภาพเคลื่อนไหว

Download tt36-Ozone (2008-01-24)

drupal: ธีม tt36-borneo

tt36-borneo


เอาโครงจาก tt36-carrot
ลอกสีมาจากเว็บ Borneo Tropical Rainforce Foundation

บล๊อกซ้ายอยู่ปกติ และบล๊อกขวาจะอยู่เลื่อนลงมาข้างใต้
Download tt36-borneo (2007-11-21)

drupal: ธีม tt36-carrot

tt36-carrot


ทำไว้สำหรับ drupal-6 โดยเอาโครงมาจาก tt35-carrot ปรับแต่งเรื่องภาพเล็กน้อยจาก web: แสดงรูปแบบสุ่ม - revised
ทีแรกกะจะใช้ flash แต่ทำไม่เป็น ถ้าทำได้ก็ขนาดไฟล์ใหญ่มาก เลยใช้วิธีเดิมดีกว่า render ภาพได้นิ่มนวลด้วย

บล๊อกซ้ายจะถูกเลื่อนไปทางขวาบน และบล๊อกขวาจะอยู่เลื่อนลงมาข้างใต้
Download tt36-carrot (2007-10-23)

drupal: ธีม tt36-palapanyo7

tt36-palapanyo7

เอาโครงจาก tt36-carrot
เอาแรงบันดาลใจเรื่องหน้าตาจากเว็บพระป่า forestsangha.org

อยากให้ดูสงบ สะอาด

บล๊อกซ้ายอยู่ปกติ และบล๊อกขวาจะอยู่เลื่อนลงมาข้างใต้

Download tt36-palapanyo7 (2007-10-28)

drupal: ธีม tt36-palapanyo8

tt36-Palapanyo8

เอาโครงจาก tt36-carrot

เอาความคิดทางหน้าตาจาก เว็บหลวงพ่อชุมพล พลปญฺโญ

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

เป็น 2+1 สดมภ์ บล๊อกซ้ายย้ายมาอยู่ขวา เนื้อหาหลักจะเลื่อนไหลไปเต็มพื้นที่ และบล๊อกขวาจะอยู่เลื่อนลงมาข้างใต้

Download tt36-Palapanyo8-old (2007-12-29)

update

เนื่องจากปัญหาข้อจำกัดในการแสดงเนื้อหา จึงปรับปรุงมาเป็นแบบมาตรฐานแทนครับ

Download tt36-Palapanyo8 (2007-12-29)

ห้องทดลอง Drupal

ศึกษาและทดลอง Drupal ในห้องนี้ครับ

drupal: ติดตั้งมอดูล และการแก้ปัญหา

บันทึกการติดตั้งมอดูล และการแก้ปัญหา

drupal5: สร้างเอกสารภายในและภายนอก

ถ้าเราต้องการให้ผู้อ่านมีสิทธิ์ที่ไม่เท่ากัน โดยให้กำหนดด้วย role ในการเข้าถึงเอกสารใน node ต่าง ๆ สามารถทำได้โดยใช้มอดูล Taxonomy Access Control Lite ดังนี้

  1. ติดตั้งมอดูล Taxonomy Access Control Lite
    $ cd /var/www/drupal/sites/all/modules
    $ wget http://ftp.drupal.org/files/projects/tac_lite-5.x-1.1.tar.gz
    $ tar xfz tac_lite-5.x-1.1.tar.gz
  2. เปิดใช้งานผ่าน URL:admin/build/modules
  3. สร้าง Vocaburary ใหม่ ด้วย Taxonomy ผ่าน URL:admin/content/taxonomy
    โดยเลือกแท็บ Add vocaburaly ตั้งชื่อว่า Privacy
    สร้าง terms ชื่อว่า Public และ Private ตามลำดับ โดยอย่าให้เป็นฟรีแท็กส์
  4. เปิดให้ admin สามารถใช้งานมอดูลได้ ผ่าน URL:admin/user/access
  5. เมื่อสร้างเสร็จจะเกิดเมนูย่อยชื่อ Access control by taxonomy ให้เลือก Vocaburary ว่า Privacy
  6. เลือกแท็บ Role based privileges และเล็อกกำหนดสิทธิ์ให้แต่ละ role ได้ตามต้องการ เช่น anonymous เป็น Public และ authenticated เป็นทั้ง Public และ Private เป็นต้น

เสร็จแล้ว หลังจากนี้ ในขั้นตอนของการสร้างเอกสาร จะมีที่เลือก Privacy ในหัวข้อ Categories ให้เราเลือกว่าจะให้เป็น Public หรือ Private

อ้างอิง - Content Type access permisions

หมายเหตุ

ถ้าใช้ Drupal-5.5 และ Drupal-5.6 และใช้ฐานข้อมูล Postgresql อาจมีข้อผิดพลาดเกิดขึ้น ต้องปรับแก้ Core ที่ไฟล์ includes/database.pgsql.inc ดังนี้
$ vi includes/database.pgsql.inc

...
function db_distinct_field($table, $field, $query) {
    if (!preg_match('/FROM\s+\S+\s+AS/si', $query)
      && !preg_match('/DISTINCT\s+ON\s*\(\s*('. $table .'\s*\.\s*)?'. $field .'\s*\)/si', $query)
      && preg_match('/(.*FROM\s+)(.*?\s)(\s*(WHERE|GROUP|HAVING|ORDER|LIMIT|FOR).*)/Asi', $query, $m)) {
        $query = $m[1];
        $query .= preg_replace('/([\{\w+\}]+)\s+(' . $table . ')\s/Usi', '(SELECT DISTINCT ON (' . $field . ') * FROM \1) \2 ', $m[2]);
        $query .= $m[3];
    }

    return $query;
}
...

อ้างอิง - Nodes are sorted incorrectly with PostgreSQL

drupal6: ทดลองใช้งานมอดูล geshifilter

ขั้นตอนตั้งแต่ติดตั้งคือ

  1. ดาวน์โหลดมอดูล GeSHi Filter
    สำหรับรุ่น 6-rc2 คือ

    $ cd sites/all/modules
    $ wget http://ftp.drupal.org/files/projects/geshifilter-6.x-1.0-rc2.tar.gz
    $ tar cfz geshifilter-6.x-1.0-rc2.tar.gz

  2. ดาวน์โหลดไลบรารี GeSHi (Generic Syntax Highlighter) มาไว้ในไดเรกทอรี่ geshi

    $ cd geshifilter/geshi
    $ wget http://nchc.dl.sourceforge.net/sourceforge/geshi/GeSHi-1.0.7.20.tar.bz2
    $ tar cfj GeSHi-1.0.7.20.tar.bz2

  3. เปิดใช้มอดูลจาก URL: admin/builds/modules
  4. เปิดการอนุญาตจาก URL: admin/user/permissions
  5. ตั้งค่าการใช้งาน URL: admin/settings/geshifilter
    เพื่อให้กระทบต่อการแสดงผลของธีมให้น้อยที่สุด เลือกเปลี่ยนแปลงสามตัวคือ
    • Generic syntax highlighting tags: เพิ่มแท็ก &lt;pre&gt;
    • Tag style: เลือก [foo] (ลดข้อจำกัดการแสดงผล HTML)
    • Code container: เลือกใช้ Use &lt;div&gt; container (enables automatic line wrapping)

    ส่วนภาษา สามารถเพิ่มลดได้จากแท็บ Languages

  6. ตรงนี้สำคัญนิดนึง คือ Input Format ต้องเข้าไปเปิดให้ใช้งาน GeSHi ด้วย จาก URL: admin/settings/filters จะใช้ตัวไหนบ้าง ก็ต้องเข้าไปเปิดในทุก ๆ ตัว
  7. เวลาสร้างเนื้อหา จะใช้รูปแบบคือ
    [pre language="php"]

    ...CONTENT...

    ...CODE...
    

    [/pre]
    ตัวจริงให้เปลี่ยนจาก < เป็น [

  8. เสร็จแล้ว วิธีนี้น่าจะกระทบต่อธีมน้อยที่สุด ทดลองใช้งานดูสักระยะนึง

    อ้างอิง

drupal6: ปรับปรุงการใช้งานมอดูล geshifilter

โพสต์นี้ อย่าเชื่อมาก เป็นแค่การทดลองเท่านั้น

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

  • ตั้งค่าการใช้งาน geshifilter ผ่าน URL: admin/settings/geshifilter
    • Generic syntax highlighting tags: เพิ่มแท็ก pre
    • Code container: เลือก Use &lt;div&gt; container
  • แก้มอดูลเล็กน้อย เพื่อยกเลิกการแปลง entities อัตโนมัติ

    $ vi sites/all/modules/geshifilter/geshifilter.pages.inc

    เพิ่มการ decode สองครั้ง (โดยเพิ่มบรรทัดที่เป็นตัวหนา)
    :129

    ...
      $source_code = decode_entities($source_code);
      $source_code = decode_entities($source_code);
    ...
    

เสร็จแล้ว

เสร็จแล้ว แต่ยังงง ๆ กับผลลัพธ์อยู่ รอดูอีกสักพัก

เริ่มเข้าใจแล้ว
แท็กที่เราจะทำพิเศษเพิ่มในบล๊อกของโค๊ด ไม่สามารถทำได้ เพราะ GeSHi จะแปลงเป็น entities ทั้งหมด
ต้องหาทางอื่นในการเน้นประโยคแทน เช่นทำบรรทัดคอมเมนต์เป็นต้น
เช่น

...
  $source_code = decode_entities($source_code);
  $source_code = decode_entities($source_code);  //ADD THIS LINE
...

ตัวอย่างข้างต้น ต้องกรอกในฟอร์มว่า

<div class="geshifilter">
<pre language="drupal6">
...
  $source_code = decode_entities($source_code);
  $source_code = decode_entities($source_code);  //ADD THIS LINE
...
</pre>
</div>

มอดูลนี้ใหญ่และซับซ้อนมาก แฮ็กไม่ไหว เอาเท่าที่ได้แล้วกันครับ

update
ลองใช้งาน geshifilter แล้วมันทำให้โค๊ดในงานเก่าดูเพี้ยนไปหมด

ทางแก้คือสร้าง Input format ใหม่ ผ่าน admin/settings/filters
ตั้งให้สามารถใช้งาน GeSHi ได้ (โดยยกเลิกการใช้งาน GeSHi กับ Input Format อันเก่า เพื่อให้ไม่ต้องตามไปแก้งานเก่า)
ตั้งชื่อว่า GeSHi Filtered HTML
สำหรับงานใหม่ที่จะต้องการใช้ Syntax Highlight ก็ค่อยมาเลือกใช้ Input format แบบนี้

drupal: ทำบล๊อกจากมอดูล tracker

ต้องแฮกเล็กน้อย คือ เอาเนื้อความจาก Add a "Recent posts" block to the tracker module
ไปต่อท้ายไฟล์ modules/tracker/tracker.module

แล้วจะสามารถใช้มอดูล tracker แสดง Recent posts เป็นบล๊อกได้เลย
(แจ๋ว เพราะเขียน Recent Week เอง มีปัญหากับ Drupal-6)

drupal: ลองติดตั้งโมดูล Import HTML

จากคราวก่อนที่ทดลองใส่โค๊ดตัวอย่างลงในเอกสารต้นฉบับเรื่อง python: Adodb Function Reference with example รู้สึกว่าอ่านง่ายดี คล้ายเอกสารของ php ที่เขามีตัวอย่างประกอบตลอด
เลยคิดว่า ถ้าเราสามารถเอาเอกสาร HTML ต้นฉบับ ที่เป็นคู่มือไพธอน เอามาใส่ตัวอย่างเล็ก ๆ น้อย ๆ ด้วยก็น่าจะดี
ลองศึกษา Drupal ดู พบว่ามีโมดูลนึงที่เข้าข่าย คือโมดูล Import HTML

โมดูลนี้ยังไม่สามารถใช้กับ Drupal-5 ได้ และดูท่าว่ายังไม่มีวีแววพัฒนาต่อ
เลยจะทดลองตั้งไซต์ใหม่ เป็น Drupal-4.7 และ import เอกสารเข้ามายังไซต์นี้ และหาทาง Export มายัง Drupal-5 ต่อไป

ทดลองทำดู ยังไม่สำเร็จ แต่ต้องบันทึกเอาไว้ก่อน ไม่งั้นลืมหมด
ผลที่ยังไม่สำเร็จคือ

  • หน้าที่อิมพอร์ตเข้ามา เป็น page ได้อย่างเดียว จริง ๆ เราต้องการเป็นแบบ book มากกว่า เพื่อคราวหลังจะได้ export ไปยังไซต์อื่นด้วย
  • การอิมพอร์ตพวกไฟล์รูปภาพและ css ยังไม่ค่อยสมบูรณ์

เริ่มงาน
ไล่ดูตามเอกสารและค้นกูเกิล ได้ผลดังนี้

ติดตั้ง apache2-dev
# aptitude install apache2-dev libapr1-dev libaprutil1-dev libapache2-modxslt php5-xsl php5-tidy

แก้ php.ini ให้รับ xslt (เพราะ php5 ไม่มี xslt)
# vi /etc/php5/apache2/php.ini

...
extension=domxml.so
extension=xsl.so
...

เริ่ม apache2 ใหม่
# /etc/init.d/apache2 restart

จะข้ามขั้นตอนติดตั้ง Drupal-4.7 ไปถึงตอนติดตั้งโมดูลเลย

เปลี่ยนเป็น webmaster และติดตั้งโมดูล
# su webmaster
$ cd /var/www/drupal/modules
$ wget http://ftp.osuosl.org/pub/drupal/files/projects/import_html-4.7.x-1.x-dev.tar.gz
$ tar xfz import_html-4.7.x-1.x-dev.tar.gz
$ cd import_html

ต้องแก้โค๊ดนิดนึง ตามเอกสาร Drupal - Fatal Error on Line 1225
$ vi import_html.module
:1225

...
//dsm($node);
drupal_set_message($node);
...

เสร็จแล้ว

ตั้งค่าโมดูลด้วย
administer -> modules -> เปิดให้ import_html ทำงาน

ตั้งค่าการใช้งานด้วย
administer -> access control -> เลือก role ที่จะเปิดให้ใช้

ตรวจสอบและตั้งค่าการอิมพอร์ต
administer -> settings -> import_html
ถ้าไม่ฟ้องข้อผิดพลาด ก็แสดงว่าใช้ได้แล้ว

เรียกใช้งานได้ทางเดียว
administer -> Import HTML Site

drupal: แก้ไขงานของโมดูล Import HTML

บันทึกการแก้ไขด้วยมือ
จากครั้งก่อน ผมได้สร้างหน้าเปล่าขึ้นมา แล้วแปลงให้เป็น book เตรียมไว้
แล้วจึงนำเข้าเอกสาร ด้วยโมดูล import HTML ดังนั้น หน้าเปล่าของเราจะเป็น node/1 และเอกสารที่นำเข้า จะเริ่มต้นตั้งแต่ node/2 เป็นต้นไป จนถึงหน้าสุดท้าย สมมุติว่าเป็น node/100 แล้วกัน

เมื่อทำการอิมพอร์ตเข้ามาแล้ว จะพบจุดผิดพลาดมากมาย ขอบันทึกการแก้ไขไว้นิดนึง เผื่อจะขยายขอบเขตไปถึงการแก้ไขโค๊ดต้นฉบับ

ตอนอิมพอร์ต ผมเลือกที่จะไม่เพิ่มรายการในเมนูแบบอัตโนมัติ
เราจึงต้องยกเลิกหัวข้อ Add each page to menu

ตอนนี้ศึกษาเรื่อง adodb อยู่ เลยใช้ไพธอนในการทำงานไปด้วยเลย

เริ่มต้น
$ python

Python 2.4.4 (#2, Oct 20 2006, 00:23:25) 
[GCC 4.1.2 20061015 (prerelease) (Debian 4.1.1-16.1)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import adodb
>>> driver = 'mysql'
>>> host = 'localhost'
>>> user = 'user'         # MYSQL USER
>>> password = 'password' # MYSQL PASSWORD
>>> db = 'testdrupal47'   # DRUPAL-4.7 DATABASENAME
>>> conn = adodb.NewADOConnection(driver)
>>> cur = conn.Connect(host,user,password,db)

งานที่ทำคือ

  • เปลี่ยน page เป็น book
  • แก้ไข title ล้น โดยใช้ฟังก์ชั่น string.strip()
  • เรียงลำดับหน้าหนังสือใหม่ ด้วยมือ

ขั้นตอน

เพิ่มหมายเลข node ลงในตาราง book ตั้งแต่ node/2 ถึง node/100
>>> for i in range(2, 101, 1):
...   cur = conn.Execute('INSERT INTO book (vid, nid, parent, weight) VALUE (%s, %s, 0, 0)' % (i, i))
เปลี่ยนฟิลด์ format ในตาราง node_revisions เป็น 1
>>> cur=conn.Execute('UPDATE node_revisions SET format=1 WHERE nid>1')
เปลี่ยนฟิลด์ type ในตาราง node เป็น 'book'
>>> cur=conn.Execute('UPDATE node SET type="book" WHERE nid>1')
เปลี่ยนให้ทุก node ที่เพิ่งอิมพอร์ตเข้ามา เข้าอยู่ภายใต้หน้าว่างคือ node/1
>>> cur=conn.Execute('UPDATE book SET parent=1 WHERE nid>1')
เปลี่ยนฟิลด์ comment ในตาราง node เป็น 2 (ไม่รู้ว่าคืออะไร)
>>> cur=conn.Execute('UPDATE node SET comment=2 WHERE nid>1')
ไม่ต้อง Promoted to front page โดยให้ฟิลด์ promote ในตาราง node เป็นศูนย์
>>> cur=conn.Execute('UPDATE node SET promote=0 WHERE nid>1')
แก้ไข title โดยใช้ฟังก์ชั่น string.strip()
ตาราง node
>>> for i in range(2, 101, 1):
...   cur=conn.Execute('SELECT title FROM node WHERE nid=%s' % (i))
...   title=cur.fields[0].strip()
...   cur=conn.Execute('UPDATE node SET title="%s" WHERE nid=%s' % (title, i))

ตาราง node_revisions

>>> for i in range(2, 101, 1):
...   cur=conn.Execute('SELECT title FROM node_revisions WHERE nid=%s' % (i))
...   title=cur.fields[0].strip()
...   cur=conn.Execute('UPDATE node_revisions SET title="%s" WHERE nid=%s' % (title, i))

เรียงลำดับหน้าหนังสือใหม่ ด้วยมือ
อันนี้นานที่สุด แต่ก็คุ้มกว่าการนำเข้าด้วยมือทั้งหมด

drupal: แก้เรื่องเนื้อความยาว ๆ

มีความจำเป็นที่จะต้องโพสต์เนื้อความยาว ๆ ในเนื้อหาของฟอรั่ม
พบว่า ถ้าข้อความยาวมากเกินไป จะไม่สามารถแสดงผลได้ คือแสดงผลออกมาเหมือนกับไม่มีเนื้อหา
ค้นไปค้นมา พบว่าเป็นกับโมดูล filter
ถ้าเราเลือกใช้ Input format แบบที่ใช้ Line break converter จะทำให้เกิดข้อผิดพลาดดังกล่าว

ทางแก้ชั่วคราวคือ
ให้สร้าง Input format ขึ้นมาใหม่ ไม่ให้ใช้ Line break converter แล้วเลือกใช้ Input format ใหม่นี้
ส่วนตัวเนื้อหาเองนั้น เนื่องจากไม่มีการขึ้นบรรทัดใหม่อัตโนมัติแล้ว เราจึงต้องมาสร้างแท็ก HTML ให้ขึ้นบรรทัดใหม่เอง
อาจทำใน Gedit ก็ได้ โดยใช้การ Find&Replace ธรรมดาครับ

ทางแก้ถาวรคงต้องแจ้ง Bug ไปที่ Drupal ต่อไป

drupal: บันทึก postgresql

ลองใช้งานกับ postgresql

ดัมป์ข้อมูล
$ pg_dump -dc -U user database > dumpfile.sql
  • -d หรือ --inserts คือให้ใช้คำสั่ง INSERT มาตรฐาน ทำให้ช้าแต่แลกเปลี่ยนข้อมูลกับฐานข้อมูลแบบอื่นได้ง่ายกว่า
  • -c หรือ --clean คือให้ล้างตารางและ Sequence ก่อนสร้างตารางใหม่ ดีสำหรับเวลาซ่อมฐานข้อมูล
สร้างตารางกลับคืน
$ psql -f dumpfile.sql -U user database
ดูเนื้อที่การใช้งาน
$ psql -U user dbname
$ SELECT relname, relpages FROM pg_class ORDER BY relpages DESC limit line;
$ \q
แก้ไขค่าในตารางเป็น UTF-8
ตัวอย่างเป็นการแก้เครื่องหมาย ' และ `
UPDATE table SET field=convert_to(field,'UTF8') WHERE field != cast(convert_to(field,'UTF8') AS field_type);

UPDATE table SET field=replace(field,'\\302\\222','\'') WHERE cast(field as bytea) LIKE '%\\302\\222%';

UPDATE table SET field=replace(field,'\\302\\221','`') WHERE cast(field as bytea) LIKE '%\\302\\221%';

drupal5: บันทึกการย้ายจาก Mysql เป็น PostgreSQL

ต้องการใช้ฐานข้อมูล postgresql เพราะงานส่วนใหญ่ลงใน postgresql
ตอนศึกษา Drupal เลือก mysql เพราะหลายมอดูลใช้กับ postgresql ไม่ได้ เลยใช้ mysql มาเรื่อย
ตอนนี้ต้องการเปลี่ยนกลับแล้ว เลยศึกษาวิธีโอนข้อมูลเตรียมไว้

เที่ยวนี้ต้องทำด้วยมือเป็นส่วนใหญ่ เพราะลองค้นจากกูเกิลแล้ว สคริปต์ต่าง ๆ ที่ค้นได้ ส่วนใหญ่จะเขียนด้วย perl และล้าสมัยหมดแล้ว รันแล้วเกิดข้อผิดพลาดทุกอัน

บันทึกการย้ายฐานข้อมูล Drupal รุ่น 5.6 จาก MySQL-5.0.32 มาเป็น PostgreSQL-8.1.11 บนเดเบียน Etch

  1. คัดลอกไดเรกทอรี่เก่ามายังอันใหม่ทั้งหมด
    $ cd /var/www/
    $ cp -xa drupal newdrupal
  2. ปรับตั้ง drupal ของไดเรกทอรี่ใหม่ ให้เป็นฐานข้อมูลใหม่
    $ cd newdrupal
    $ vi sites/default/setting.php
    ...
    //$db_url = 'mysql://myuser:mypassword@localhost/drupal-mysql';
    $db_url = 'pgsql://pguser:pgpassword@localhost/newdrupal-pgsql';
    ...
  3. ดิดตั้งโดยเข้าไปที่ URL: http://www.example.com/install.php ติดตั้งพร้อมเพิ่มผู้ใช้คือ admin ให้เรียบร้อย
  4. ดูใน drupal เก่า ว่าเปิดใช้มอดูลอะไรบ้าง ก็ให้เปิดใช้ให้เหมือนเดิม ทั้งนี้เพื่อให้ Drupal สร้างตารางขึ้นมารองรับการโอน โดยใช้ URL: admin/build/modules เลือกกาทุกมอดูล
  5. ล้างข้อมูลในตารางทั้งหมด แต่ไม่ต้องลบตาราง (งานนี้ลบด้วยมือ โดยใช้ phppgadmin ประมาณสัก 10 ตารางเห็นจะได้
  6. นำข้อมูลจากฐานข้อมูลเก่ามา โดยใช้ mysqldump
    $ mysqldump -c -t --skip-opt -u myuser -p drupal-mysql > mydrupal.sql
    -c คือ complete insert เพื่อให้เหมาะกับการนำเข้าไปยัง postgresql
    -t คือ --no-create-info ไม่ต้องเขียนการสร้างตารางใหม่
    --skip-opt คือไม่ต้องเขียนการล๊อกตาราง
  7. ปรับแต่งข้อมูลให้เหมาะกับ postgresql โดยการลบ backquote (`) ทิ้ง
    $ vi mydrupal.sql
    :1,$ s/`//g
    :wq
  8. ถึงตรงนี้อาจนำเข้าข้อมูลได้แล้ว แต่จะมีข้อผิดพลาดจากโค๊ดของ Drupal ตรงตาราง node_revision หน่อยนึง ตรงสดมถ์ log ที่ mysql ยอมให้เป็น NULL แต่ postgresql ไม่ยอม
    ต้องไปแก้ตาราง node_revision สดมถ์ log ให้เป็น NULL ได้
    งานนี้ทำผ่าน phppgadmin
  9. นำเข้าฐานข้อมูลใหม่ โดยใช้ psql
    $ psql -f mydrupal.sql -U pguser newdrupal-pgsql
  10. เข้าไซต์ใหม่ แล้วอัปเดตครั้งนึง ถ้ายังมีรายงานข้อผิดพลาด อาจต้องไปลบ Constraints ของตาราง locales_source ออก (ตรงนี้ลืมจดชื่อ Constraints) โดยใช้ phppgadmin

เสร็จแล้ว

แต่หากยังมีข้อผิดพลาดแบบเล็กน้อย เราอาจเริ่มสร้างตารางใหม่ทั้งหมดผ่าน pg_dump ได้ คือ

  • ดัมป์ข้อมูลแบบสั่งให้สร้างตารางใหม่ทั้งหมด
    $ pg_dump -c -U pguser newdrupal-pgsql > newpg.sql
    -c ให้สร้างคำสั่งสร้างตารางด้วย
  • นำเข้าข้อมูลอีกครั้ง
    $ psql -f newpg.sql -U pguser newdrupal-pgsql

เสร็จแล้ว

update 51-01-22
ยังไม่เสร็จจริง พอตรวจจริงแล้วเกิดข้อผิดพลาดคือ postgresql ไม่ยอมปรับค่า sequence ให้ตามจริง ไม่รู้ว่าเป็นเพราะอะไร ต้องมานั่งปรับประโยคใน newpg.sql ให้เลข sequence เป็นตัวเลขล่าสุด ต้องทำสักประมาณ 20 ตาราง
ขั้นตอนตั้งแต่เริ่ม (นับตั้งแต่ผ่านขั้นตอนก่อนหน้านี้มาแล้ว) คือ

  1. สั่งดัมป์จาก postgresql โดยให้มีคำสั่งสร้างตารางด้วย
    $ pg_dump -c -U pguser newdrupal-pgsql > newpg.sql
  2. แก้ไขข้อมูล sql โดยเอาแต่ส่วนหัว ตัดส่วน INSERT ทิ้งไป คือดูตั้งแต่คำสั่ง COPY ... เป็นต้นไป
    $ vi newpg.sql
    /COPY
    dG
    :wq
  3. ไล่ดูว่าตารางไหนมีฟีลด์ที่เป็น SERIAL ให้ดูค่าที่มากที่สุดของฟีลด์นั้น แล้วนำไปปรับแก้ในข้อมูล sql
    เช่นสมมุติว่า ตาราง accesslog มีฟีลด์ที่เป็น SERIAL คือ aid โดยมีค่าที่มากที่สุดเป็น 12345 (ดูจาก phppgadmin) ก็ให้ไปปรับแก้ประโยค sql ตรงส่วนปรับ sequence ให้เป็นตัวเลขนี้ด้วย เช่น
    $ vi pgnew.sql
    ...
    SELECT pg_catalog.setval(pg_catalog.pg_get_serial_sequence('accesslog', 'aid'), 12345, true);
    ...

    ทำให้ครบทุกตารางที่มีฟิลด์เป็น SERIAL

  4. นำเข้าข้อมูลจาก sql ของ postgresql ที่เพิ่งปรับแก้เมื่อสักครู่ เพื่อนำไปสร้างตาราง
    $ psql -f newpg.sql -U pguser newdrupal-pgsql
  5. นำเข้าข้อมูลจาก sql ของ mysql ที่ได้จากคราวก่อน เพื่อนำไปเป็นข้อมูล
    $ psql -f mydrupal.sql -U pguser newdrupal-pgsql

เสร็จจริง ๆ แล้ว

ยุ่งเป็นลิงถุง สงสัยเที่ยวหน้าทำเป็นสคริปต์ดูจากข้อมูลดัมป์ของ mysql แล้วโยนไปสร้างสดที่ postgresql เลยดีกว่า

drupal5: ปรับปรุงวิธีย้ายจาก Mysql เป็น PostgreSQL

ปรับปรุงจากครั้งก่อน แต่เพื่อให้สมบูรณ์ในตัวและอ้างอิงภายหลังได้ เลยเขียนใหม่ทั้งหมด

บันทึกการย้ายฐานข้อมูล Drupal รุ่น 5.6 จาก MySQL-5.0.32 มาเป็น PostgreSQL-8.1.11 บนเดเบียน Etch

  1. สร้างฐานข้อมูลใหม่
    $ createdb --encoding=UNICODE -U PG_USER NEW_DRUPAL_PG_DB
  2. คัดลอกไดเรกทอรี่เก่ามายังอันใหม่ทั้งหมด เพราะต้องการเอาไดเรกทอรี่ของมอดูลเก่ามาด้วย เพื่อนำมาเป็นข้อมูลทั้งหมดในการสร้างฐานข้อมูลใหม่
    $ cd /var/www/
    $ cp -xa OLD_DRUPAL_DIR NEW_DRUPAL_DIR
  3. ปรับตั้ง drupal ของไดเรกทอรี่ใหม่ ให้เป็นฐานข้อมูลใหม่
    $ cd NEW_DRUPAL_DIR
    $ vi sites/default/setting.php
    ...
    //$db_url = 'mysql://MY_USER:MY_PASSWORD@localhost/OLD_DRUPAL_MY_DB';
    $db_url = 'pgsql://PG_USER:PG_PASSWORD@localhost/NEW_DRUPAL_PG_DB';
    ...
  4. ดิดตั้งโดยเข้าไปที่ URL: http://WWW.EXAMPLE.COM/install.php ติดตั้งพร้อมเพิ่มผู้ใช้คือ admin ให้เรียบร้อย (create new user)
  5. ดูใน drupal เก่า ว่าเปิดใช้มอดูลอะไรบ้าง ก็ให้เปิดใช้ให้เหมือนเดิม ทั้งนี้เพื่อให้ Drupal สร้างตารางขึ้นมารองรับการโอน โดยใช้ URL: admin/build/modules เลือกกาทุกมอดูล (enable all modules)
  6. ล้างข้อมูลในตารางทั้งหมด รวมทั้งเป็นการสำเนาส่วนหัวของตารางใหม่ไปในตัว โดยใช้ pg_dump
    $ pg_dump -cs -U PG_USER NEW_DRUPAL_PG_DB > NEW_PG.SQL
  7. -c คือ --clean ล้างตารางเก่า ก่อนสร้างตารางใหม่
    -s คือ --schema-only เอาแต่ส่วนหัวของการสร้างตาราง ไม่เอาข้อมูล เพราะเราต้องการล้างอยู่แล้ว

  8. สร้างตารางใหม่จาก sql เมื่อกี้นี้ ด้วย psql
    $ psql -f NEW_PG.SQL -U PG_USER NEW_DRUPAL_PG_DB > temp.log
    ตรงนี้ไม่ควรมีข้อผิดพลาดขึ้น
  9. นำข้อมูลจากฐานข้อมูลเก่ามา โดยใช้ mysqldump
    $ mysqldump -c -t --skip-opt -u MY_USER -p OLD_DRUPAL_MY_DB > OLD_MY.SQL
    -c คือ complete insert เพื่อให้เหมาะกับการนำเข้าไปยัง postgresql
    -t คือ --no-create-info ไม่ต้องเขียนการสร้างตารางใหม่
    --skip-opt คือไม่ต้องเขียนการล๊อกตาราง
  10. ปรับแต่งข้อมูลให้เหมาะกับ postgresql โดยการลบ backquote (`) ทิ้ง
    $ vi OLD_MY.SQL
  11. :1,$ s/`//g
    :wq
  12. ถึงตรงนี้อาจนำเข้าข้อมูลได้แล้ว แต่จะมีข้อผิดพลาดจากโค๊ดของ Drupal ตรงตาราง node_revisions หน่อยนึง ตรงสดมถ์ log ที่ mysql ยอมให้เป็น NULL แต่ postgresql ไม่ยอม
    ต้องไปแก้ตาราง node_revisions สดมถ์ log ให้เป็น NULL ได้
    งานนี้ทำผ่าน phppgadmin (enable NULL in node_revisions.log)
  13. นำเข้าฐานข้อมูลใหม่ โดยใช้ psql
    $ psql -f OLD_MY.SQL -U PG_USER NEW_DRUPAL_PG_DB > temp.log
    ขั้นตอนนี้อาจมีข้อผิดพลาดรายงาน ไม่ต้องสนใจ
  14. แก้เรื่อง sequence ไม่ตรง โดยนำข้อมูลจาก phppgadmin ดูจากหน้า public/Sequences เอาทั้งหมดมาสร้างเป็น sql สมมุติตั้งชื่อว่า fixseq.sql
    $ vi fixseq.sql
    SELECT pg_catalog.setval(pg_catalog.pg_get_serial_sequence('access', 'aid'), (SELECT MAX(aid) FROM access), false);
    SELECT pg_catalog.setval(pg_catalog.pg_get_serial_sequence('accesslog', 'aid'), (SELECT MAX(aid) FROM accesslog), true);
    SELECT pg_catalog.setval(pg_catalog.pg_get_serial_sequence('aggregator_category', 'cid'), (SELECT MAX(cid) FROM aggregator_category), false);
    SELECT pg_catalog.setval(pg_catalog.pg_get_serial_sequence('aggregator_feed', 'fid'), (SELECT MAX(fid) FROM aggregator_feed), false);
    SELECT pg_catalog.setval(pg_catalog.pg_get_serial_sequence('aggregator_item', 'iid'), (SELECT MAX(iid) FROM aggregator_item), false);
    SELECT pg_catalog.setval(pg_catalog.pg_get_serial_sequence('authmap', 'aid'), (SELECT MAX(aid) FROM authmap), false);
    SELECT pg_catalog.setval(pg_catalog.pg_get_serial_sequence('boxes', 'bid'), (SELECT MAX(bid) FROM boxes), false);
    SELECT pg_catalog.setval(pg_catalog.pg_get_serial_sequence('client', 'cid'), (SELECT MAX(cid) FROM client), false);
    SELECT pg_catalog.setval(pg_catalog.pg_get_serial_sequence('comments', 'cid'), (SELECT MAX(cid) FROM comments), false);
    SELECT pg_catalog.setval(pg_catalog.pg_get_serial_sequence('contact', 'cid'), (SELECT MAX(cid) FROM contact), false);
    SELECT pg_catalog.setval(pg_catalog.pg_get_serial_sequence('files', 'fid'), (SELECT MAX(fid) FROM files), false);
    SELECT pg_catalog.setval(pg_catalog.pg_get_serial_sequence('filter_formats', 'format'), (SELECT MAX(format) FROM filter_formats), true);
    SELECT pg_catalog.setval(pg_catalog.pg_get_serial_sequence('locales_source', 'lid'), (SELECT MAX(lid) FROM locales_source), false);
    SELECT pg_catalog.setval(pg_catalog.pg_get_serial_sequence('menu', 'mid'), (SELECT MAX(mid) FROM menu), true);
    SELECT pg_catalog.setval(pg_catalog.pg_get_serial_sequence('node_comment_statistics', 'nid'), (SELECT MAX(nid) FROM node_comment_statistics), false);
    SELECT pg_catalog.setval(pg_catalog.pg_get_serial_sequence('node', 'nid'), (SELECT MAX(nid) FROM node), false);
    SELECT pg_catalog.setval(pg_catalog.pg_get_serial_sequence('node_revisions', 'vid'), (SELECT MAX(vid) FROM node_revisions), false);
    SELECT pg_catalog.setval(pg_catalog.pg_get_serial_sequence('poll_choices', 'chid'), (SELECT MAX(chid) FROM poll_choices), false);
    SELECT pg_catalog.setval(pg_catalog.pg_get_serial_sequence('profile_fields', 'fid'), (SELECT MAX(fid) FROM profile_fields), false);
    SELECT pg_catalog.setval(pg_catalog.pg_get_serial_sequence('"role"', 'rid'), (SELECT MAX(rid) FROM role), true);
    SELECT pg_catalog.setval(pg_catalog.pg_get_serial_sequence('term_data', 'tid'), (SELECT MAX(tid) FROM term_data), false);
    SELECT pg_catalog.setval(pg_catalog.pg_get_serial_sequence('url_alias', 'pid'), (SELECT MAX(pid) FROM url_alias), false);
    SELECT pg_catalog.setval(pg_catalog.pg_get_serial_sequence('users', 'uid'), (SELECT MAX(uid) FROM users), true);
    SELECT pg_catalog.setval(pg_catalog.pg_get_serial_sequence('vocabulary', 'vid'), (SELECT MAX(vid) FROM vocabulary), true);
    SELECT pg_catalog.setval(pg_catalog.pg_get_serial_sequence('watchdog', 'wid'), (SELECT MAX(wid) FROM watchdog), true);

    สั่งรันด้วย psql ให้มาซ่อมเรื่อง sequence
    $ psql -f fixseq.sql -U PG_USER NEW_DRUPAL_PG_DB > temp.log

    ขั้นตอนนี้ไม่ควรมีข้อผิดพลาด

  15. อันนี้สำหรับถ้าติดตั้ง Drupal ไว้ในไดเรกทอรี่รองจากโดเมนหลัก (OPTIONAL: IF INSTALL DRUPAL IN SUBDIR) เช่น http://www.example.com/drupal และเปลี่ยนชื่อไดเรกทอรี่ด้วย
    ต้องปรับแก้ข้อมูลในตาราง locales_source ให้ข้อมูลเป็นอันใหม่
    เช่นอันเก่าชื่อ www.example.com/OLDDRUPAL อันใหม่ชื่อ www.example.com/NEWDRUPAL ต้องเขียน sql ดังนี้
    $ vi fixlocale.sql
    UPDATE locales_source SET location = '/NEWDRUPAL/' || substr(location,12) WHERE location LIKE '/OLDDRUPAL/%'

    ตัวเลข 12 ของฟังก์ชั่น substr(location, NUM) เป็นความยาวของอักขระไดเรกทอรี่เก่า คือ OLDDRUPAL บวก 3 คือเครื่องหมาย '/' หน้าหลังและบวกกับตำแหน่งถัดไป
    สั่งรันได้เลย
    $ psql -f fixlocale.sql -U PG_USER NEW_DRUPAL_PG_DB > temp.log

    ต้องไม่มีข้อผิดพลาด

เสร็จจริง ๆ แล้ว

จะมีรายงานข้อผิดพลาด ที่หน้า Administer หนึ่งครั้ง
และตอนสร้างเนื้อหาใหม่อีกหนึ่งครั้ง ก็สามารถใช้งานได้แล้ว

drupal: บันทึกการอัปเกรด 5.2 -> 6.0-beta-1

สมมุติว่าเว็บคือ example.com

ไปที่ไดเรกทอรี่ทำงาน
$ cd /var/www/example.com
สมมุติไดเรกทรอรี่เก่าคือ drupal ฐานข้อมูลก็ชื่อ example_com_drupal

แบ็กอัพไฟล์
$ tar cfz drupal-old.tar.gz drupal

แบ็กอัพฐานข้อมูล
$ mysqldump -u webmaster -p example_com_drupal > example_com_drupal.mysql.bak

ดาวน์โหลด 6.0-beta-1 และแตกไฟล์
$ wget http://ftp.drupal.org/files/projects/drupal-6.0-beta1.tar.gz
$ tar xfz drupal-6.0-beta1.tar.gz

คัดลอกไฟล์ไปยังไดเรกทอรี่เก่า
$ cp -xa drupal-6.0-beta1/* drupal

แก้ไขตามจำเป็น
$ vi drupal/site/default/setting.php

...

ล้างธีมและโมดูลเก่า พร้อมทั้งคัดลอกมาใหม่
ธีม
$ for i in drupal-6.0-beta1/themes/*; do aaa=`basename $i`; rm -rf drupal/themes/$aaa; cp -xa $i drupal/themes; done
โมดูล
$ for i in drupal-6.0-beta1/modules/*; do aaa=`basename $i`; rm -rf drupal/modules/$aaa; cp -xa $i drupal/modules; done

อัปเดตที่บราวเซอร์

http://www.example.com/update.php

ตรวจสอบว่าธีมและโมดูลที่เราติดตั้งเพิ่มเติมในครั้งก่อน ได้ถูกปรับปรุงขึ้นมาเป็นรุ่น 6 ทั้งหมดหรือยัง

ถ้ายังไม่ครบ ก็ดาวน์โหลดรุ่น 6 มาติดตั้งให้เรียบร้อย

เสร็จแล้ว

drupal: สร้างมอดูลเอง

บันทึกการทำงานเกี่ยวกับการสร้างมอดูล

drupal5: ทำมอดูล Thai Search

แปลง มอดูล Thai Search ของรุ่น 6 มาเป็น ของรุ่น 5
ความสามารถเหมือนกันคือ ค้นคำไทยได้ ทำบล๊อกได้ ค้นได้หลายคำค้นพร้อมกัน
ติดตั้งปกติเหมือนมอดูลของ Drupal ทั่วไป

ดาวน์โหลดได้ที่นี่ครับ

หมายเหตุ

  • ยังไม่ได้ตรวจสอบแบบจริงจัง แต่คงใช้งานได้ปกติโดยไม่ก่อให้เกิดความเสียหายครับ เพราะไม่ได้สร้างหรือเขียนลงฐานข้อมูลเลย
  • ของรุ่น 6 พบว่าใช้ประโยค SQL แบบมีคำสั่ง GROUP BY กับฟังก์ชั่น pager ไม่ได้ แต่กับรุ่น 5 นี้ ยังไม่ได้ทดลองครับ

drupal: สร้างมอดูลเอง (Drupal 6 Module Tutorial)

เอามาจาก Creating modules - a tutorial: Drupal 6.x
พยายามเขียนให้เป็นเรื่องเป็นราว แต่ให้สั้น ๆ

ตามตัวอย่างเป็นการสร้างมอดูลชื่อ onthisdate เพื่อจะทำเป็นบล๊อกแสดง "วันนี้ในอดีตเมื่ออาทิตย์ก่อน"

ลิงก์ที่ต้องไป

01. เริ่มต้น (Getting Started)

ควรเขียนไว้ภายใต้ site/all/module/onthisdate เพื่อไม่ให้ปนกับของ Drupal เอง และปลอดภัยจากการอัปเกรด
$ cd /var/www/drupal
$ mkdir -p site/all/module/onthisdate

โครงสร้างชื่อฟังก์ชั่นในมอดูลจะเป็น

function {modulename}_{hook}

เช่น onthisdate_help เพื่อข่วยเหลือ หรือ onthisdate_menu เพื่อแสดงเมนู เป็นต้น

02. บอกว่ามอดูลเราจะทำอะไร (Telling Drupal about your module)

ต้องสร้างไฟล์ module_name.info สำหรับบอก Drupal ตัวอย่างนี้คือ
$ vi onthisdate.info

; $Id$
name = On this date
description = A block module that lists links to content such as blog entries or forum discussions that were created one week ago.
core = 6.x

ต้องมีหัวข้อดังนี้

name
บอกชื่อมอดูล
description
บอกคนอื่นให้รู้ว่ามอดูลทำอะไร สั้น ๆ 1 บรรทัด ถ้ามีอักขระแปลก ๆ ต้องเขียนด้วย HTML entities เพื่อให้แสดงผลในเว็บได้ เช่น
description = This is my &quot;crazy@email.com&quot; email address instead of description = This is my "crazy@email.com" email address
core
บอกให้รู้รุ่น Drupal เพราะเขาใช้เป็นตัวแยกว่าอันไหนจะเปิดให้ใช้งานบ้าง เวลาอัปเกรด

อาจมีหัวข้อดังนี้

ดีเพนเดนซี (dependencies)
บอกให้รู้ว่ามอดูลเราต้องกา