• April 27, 2018

    แกะโค๊ดเว็บบอร์ดมาเยอะ แต่ SMF  มันยืดหยุ่นมาก ถ้าศึกษาจริงจังเชื่อว่าสามารถที่จะเปลี่ยนรูปแบบของบอร์ดได้อย่างง่ายๆ เลย

    อยากจะเอารูปภาพที่อยู่ในโพสแต่ละโพสของบอร์ด SMF มาแสดงที่หน้าแรก หรือหน้าที่เราต้องการต้องทำอย่างไร ?
    – ไม่รู้ว่ามันต้องทำอย่างไรบ้าง
    – ต้องแก้ไฟล์ไหนบ้าง
    – ต้องแก้อย่างไร

    การโพสลงในเว็บบอร์ด SMF ส่วนใหญ่แล้วจะต้องใช้  code แบบ BBCode
    เช่น [center]xxx[/center] , [url]xxx[/url] , [color]xxx[/color] , [img]xxx[/img]

    มันจะมีเครื่องหมาย [] แสดงแท็กนั้นอยู่ด้วยเสมอๆ และเราจะเอาแท็กที่ต้องการมาใช้ ที่เราพูดถึงตอนนี้คือแท็ก [img]xxx[/img]  xxx ที่อยู่ตรงกลางนั้นก็คือ url ของรูปภาพ

    เมื่อเราจะโพสรูปภาพลงในโพส ก็เพียงแค่ใช้แท็ก [img] ได้ดังนี้
    [img]https://vir9.com/img/xxx.jpg[/img] เพียงแค่นี้รูปภาพที่เราต้องการมันก็จะไปโผล่ในโพสให้เราแล้ว

    ต่อไปเมื่อเราทำการโพสแล้วข้อความโพสของเราก็จะถูกเก็บลงในฐานข้อมูลของเว็บบอร์ดนั้นๆ ในรูปแบบของ BBCode(ซึ่งอาจจะมีบางแท็กที่ยังเป็น html อยู่ เช่น <br />) ซึ่งหากท่านต้องความความแน่ชัดว่าข้อมูลโพสมันถูกเก็บไว้ในรูปแบบของโค๊ดแบบไหนก็เพียงแค่เข้าไปดูในฐานข้อมูล แล้วเลือกตาราง smf_messages ในฟิลด์ body เราก็จะเห็นข้อความที่เราได้โพสไปพร้อมกับ BBCode [img] ที่เราได้ใส่เข้าไป

    เมื่อเรารู้แล้วว่าข้อมูลของโพสมันอยู่ในรูปแบบไหนแล้ว เวลาที่เราจะเขียนโค๊ดเพื่อดึงเอาเฉพาะข้อมูลที่เราต้องการนั้นก็เป็นเรื่องง่าย เช่นต้องการดึงเอารูปภาพที่อยู่ในแต่ละโพสมาแสดงที่หน้าแรกในลักษณะของ โพสล่าสุด ( recent post ) เรียงเป็นแถวลงมาเรื่อยๆ ซึ่งค่าเดิมของบอร์ด SMF นั้นมันจะไม่แสดงรูปภาพที่มีอยู่ในแต่ละโพสให้เรา ก็ต้องเขียนโค๊ดเพิ่มเติม เช่น

    จากตัวอย่างใช้เวอร์ชั่น 2.0.2

    File SSI.php

    ส่วนที่ใช้ในการแสดงโพสล่าสุดจะใช้ function ssi_recentPosts();
    โดยใน ssi_recentPosts() จะแสดงฟิลด์ $row[‘body’] อยู่ในรูปแบบของโค๊ด html ธรรมดา
    เช่น <img src=”image_path” /> รวมอยู่ในข้อความของโพส
    ถ้าหากเราต้องการเอาแค่รูปภาพนั้น ก็ใช้ php function ที่ชื่อว่า preg_match() มาทำการดึงเอาเฉพาะ Pattern ที่เราต้องการ
    โดย Pattern ที่เอาเฉพาะรูปภาพจะได้ดังนี้

    $html = 'รูปสาวๆ น่ารักๆ จัดไปครับ !! <img src="http://s.img.kapook.com/photo/134/kapook_world-132672.jpg" width="150" height="180"/><br>
    <img src="http://s.img.kapook.com/photo/134/kapook_world-132671.jpg" width="150" height="180"/>';
    
    preg_match('/<img[^>]+\>/i',$html ,$img_third);
    
    echo '<pre>';
    echo htmlspecialchars($img_third[0]);
    echo '</pre>';
    
    

    ผลลัพธ์ที่ได้ก็จะเป็น

    <img src="http://s.img.kapook.com/photo/134/kapook_world-132672.jpg" width="150" height="180"/>
    
    /* เนื่องจากว่า preg_match() นั้นจะแสดงข้อมูลที่พบตรงตาม pattern เพียงแค่ชุดแรกเท่านั้น */
    /* หากต้องการหลายรูปให้เลือกใช้ preg_match_all() แทนครับ */
    

    ถ้า $row[‘body’] มันแสดงในรูปแบบ BBCode แบบ [img] ล่ะจะทำอย่างไร?
    ก็เขียน Pattern ให้กับ preg_match() ใหม่เป็น

    $bbcode = 'รูปสาวๆ น่ารักๆ จัดเลย!! [img]http://s.img.kapook.com/photo/134/kapook_world-132672.jpg[/img]';
    
    preg_match('/\[img\](.*?)\[\/img\]/i',$bbcode ,$img);
    
    echo '<pre>';
    print_r($img);
    echo '</pre>';
    
    

    ผลลัทธ์ที่ได้

    Array (
    [0] => [img]http://s.img.kapook.com/photo/134/kapook_world-132672.jpg[/img]
    [1] => http://s.img.kapook.com/photo/134/kapook_world-132672.jpg
    )
    


เวอไนน์ไอคอร์ส

ประหยัดเวลากว่า 100 เท่า!






เวอไนน์เว็บไซต์⚡️
สร้างเว็บไซต์ ดูแลเว็บไซต์

Categories