พอดีว่าลองเขียน blog ใน RoR แล้ว ลองทำ Read more ใน entry ดู คนที่เขียน Blog อยู่คงรู้ว่าการเพิ่ม Read more ใน entry นั้น ทำได้โดยใส่ comment ชื่อ more หรือ <!– more –> ซึ่งเราจะมาดู concept มันก่อนดีกว่า โดยตัวอย่างผมจะอ้างอิงกับภาษา Ruby และ PHP (เอาด้วย เพราะเป็นภาษาที่ถนัดที่สุด และเป็นภาษาหากิน ฮ่า …… )
Concept ก็คือ ข้อมูลของเรานั้น เป็น String และ String คือ Array ของ Charactor (ตัวอักษรมาเรียงต่อกัน) การตัดสาย String ออกมานั้นก็เหมือนกับการ Slice Array ออกมา หรือบางคนอาจจะเรียกกว่าการ Sub-String ก็ไม่ผิดนัก สิ่งที่เราต้องรู้ก่อนเสมอคือตำแหน่งของ comment more ว่าอยู่ที่ index ในของ Array ของ Charactor (หรือสาย String) แล้วทำการ Sub-String ญ. ตำแหน่งเริ่มต้น ( index ที่ 0 ) ไปจนถึงตำแหน่งที่ comment more อยู่
Ruby
# เรากำหนด body เป็นตัวแปรที่เก็บ String ยาว ๆ หนึ่งสาย
# แล้วเราทำการหา <!– more –> ใน body ว่ามีหรือไม่
# โดยใน method "index" แล้วใส่ค่าที่ต้องการหาลงไป นั้นคือ "<!– more –>"
# สิ่งที่ได้ออกมานั้นต้อง convert เป็น integer นิดนึง
# เพื่อให้มันเปรียบเทียบได้ด้วย to_i
index_more = body.index("<!– more –>").to_i
if index_more == 0 then
# ถ้าไม่มี "<!– more –>" ก็ส่งสาย String ออกมาทั้งหมด
puts body
else
# ถ้ามี "<!– more –>" ก็ Sub-String เสีย
# ณ. ตั้งแต่ตำแหน่งที่ 0 ถึงตำแหน่งที่ "<!– more –>" อยู่
puts body[0, index_more]
end
PHP
// เรากำหนด $body เป็นตัวแปรที่เก็บ String ยาว ๆ หนึ่งสาย
// แล้วเราทำการหา <!– more –> ใน $body ว่ามีหรือไม่
// โดยใช้ function "strpos" แล้วตัวแปรที่เก็บ String
// และใส่ค่าที่ต้องการหาลงไปใน นั้นคือ "<!– more –>" ลงไป
$index_more = strpos($body, "<!– more –>");
if($index_more == 0){
// ถ้าไม่มี "<!– more –>" ก็ส่งสาย String ออกมาทั้งหมด
echo $body;
}
else {
// ถ้ามี "<!– more –>" ก็ Sub-String เสีย
// ณ. ตั้งแต่ตำแหน่งที่ 0 ถึงตำแหน่งที่ "<!– more –>" อยู่
// โดยการ Sub-String ก็ใช้ function "substr"
echo substr($body, 0,$index_more);
}