แกะโค๊ดเว็บบอร์ดมาเยอะ แต่ 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 )