@FordAntiTrust

การทำ Read more ใน entry หรือ post สำหรับ blog หรือลักษณะคล้าย ๆ กัน (Ruby และ PHP)

พอดีว่าลองเขียน 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);
}

Exit mobile version