แสดงกระทู้

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - admin

หน้า: 1 2 [3] 4 5 ... 34
31
 [SMF] ไฟล์สำหรับแก้ไขTheme smf เพื่อไม่ให้กระทบโค๊ดหลัก (Core)
ที่ตั้งไฟล์   
Themes/โฟลเดอร์เทมเพลทของท่าน เช่น Themes/mythem/ (ย้ำว่าไม่ใช่ Themes/default/ นะครับ)

1. index.template.php
 ไฟล์ที่เป็นโครงสร้างหลักของธีม ประกอบด้วย Header และ Footer
 Header และFooter ในไฟล์นี้จะเป็นเหมือนกันทุกๆหน้า จากไฟล์ตัวนี้

2. BoardIndex.template.php
  แสดงหมวดหมู่ของกระทู้ทั้งหมด ซึ่งจะแสดงในหน้าแรก

3.MessageIndex.template.php
 ไฟล์นี้ แสดงกระทู้รวมในหมวดหนึ่งๆ ที่เราคลิกจากหน้าแรกมีโครงสร้างเป็นตาราง Table

4. Display.template.php
แสดงรายละเอียดของกระทู้ พร้อมทั้งคำตอบ

5. Post.template.php
 ไฟล์นี้จัดการฟอร์มสำหรับโพสต์กระทู้

 เมื่อรู้ว่าไฟล์ไหนทำอะไรแล้ว เวลาจะทำการจัดการแก้ไข ก็ง่ายขึ้นครับ

32
 [SMF] ข้อควรระวังก่อนการอัพเกรดเวอร์ชั่น

ข้อควรระวังก่อนการอัพเกรดเวอร์ชั่นจาก 1.10++ เป็นเวอร์ชั่น 2.0

วันก่อนนั่งอัพเกรอบอร์ดเวอร์ชั่น  1 เป็นเวอร์ชั่น 2.0.2 มั่นใจเต็มที่เพราะเคยอัพเกรดมาแล้วหลายต่อหลายครั้ง
ครั้งนี้เลยไม่คิดจะbackup ข้อมูลอะไรไว้ก่อนเลย

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

แล้วลองอัพเกรดใหม่..

ครั้งนี้..สำเร็จ แต่..ข้อมูลที่ดึงจากฐานข้อมูลเป็นตัวประหลาดหมดเลย!!

ทั้งๆที่เมนูต่างๆเป็นภาษาไทย แต่กระทู้ทั้งหมดกลายเป็นตัวประหลาด นั่งแก้ทั้งคืนก็ไม่หาย เลยต้องเข้านอนก่อนพรุ่งนี้ค่อยว่ากันใหม่

เช้าต่อมา นำดาต้าเบสข้างบนลงมาข้างล่างและลอง install ลงในเครื่องทุกอย่างปกติ ตัวหนังสือปกติ ..ผมค่อยใจชื้นขึ้นมาหน่อย
แต่ปัญหาที่ตามมาติดๆ  คือ ไม่สามารถเอาฐานข้อมูลจากเครื่องขึ้นไปข้างบนได้เลย!!

วิธีแก้ ดูจะง่อยไปหน่อย แต่เหมือนว่าจะเป็นวิธีสุดท้ายที่เหลืออยู่
ผมนั่ง dump ตารางของ smf ทุกตัว ซึ่งมี 63 ตารางลงมาข้างล่างก่อน แล้วค่อย import เข้าฐานข้อมูลผ่าน PHPMyAdmin ทีละตารางๆ

เรียบร้อยครับ บอร์ดผมมามีชีวิตและมีชาติไทยเหมือนเดิมแล้ว

ข้อควรระวังสำหรับเรื่องนี้ คือ ก่อนอัพเกรด ต้อง
1. เลือกธีมให้เป็นธีมdefault
2. เลือกภาษาอังกฤษ
3. ถอด mod ทั้งหมดออกก่อน

33
 [SMF]การปรับpermission หรือการอนุญาตในบอร์ด


โจทย์ คือ ต้องการให้สมาชิกบางกลุ่ม อ่านได้อย่างเดียวในบางบอร์ด

1. ล็อกอินเข้าระบบแอดมิน
2. ไปที่ ผู้ดูแล > ควบคุมสมาชิก > Permissions > Edit Profiles
3. ดูด้านล่างที่แทบ New Profile มี 2 ช่องในการสร้าง Profile ใหม่
    -  Profile Name:  ตั้งชื่อโปรไฟล์ใหม่
    - Copy Permissions From: เลือกโปรไฟล์ต้นแบบ
4. คลิกCreate

5. หลังจากสร้างแล้วเราจะได้ Profile ตัวใหม่ที่เกิดจากน้ำมือที่เราสร้างขึ้นมา คลิกไปที่โปรไฟล์ใหม่นั้นเลย
6. ระบบจะนำไปยังหน้าจัดการ 'การอนุญาต' ทีนี้เราจะกำหนดให้กลุ่มไหนทำอะไรได้ ก็กำหนดตรงนี้เลยให้เสร็จ  (อย่าลืมกำหนดให้อ่านได้อย่างเดียวด้วยตามโจทย์ที่ตั้งไว้)

7. จากนั้นไปที่เมนู Permission By Board
8. เราอยากให้บอร์ดไหนอ่านได้อย่างเดียว คลิกที่ชื่อบอร์ดนั้นเลย
9. หลังจากคลิกแล้ว ดูด้านล่าง เมนู Permission Profile:
 เลือกโปรไฟล์ที่เราได้สร้างไว้ในข้อที่ 3  แล้วคลิกปุ่ม แก้ไข
10. เสร็จพิธี

34
 [SMF] เพิ่ม thumbnail ในหน้ากระทู้รวม

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


(ดูตัวอย่างจริงที่ http://phithan-toyota.com/forums/index.php/board,18.0.html)

ดูภาพประกอบคำอธิบายนะครับ
ผมดึงภาพเป็น thumbnail จากกระทู้โดยการสุ่ม ดึงมาแค่ 4 กระทู้และดึงสุ่มมาทุกครั้งที่แสดงพร้อมกับหัวข้อกระทู้ เพื่อเพิ่มความน่าสนใจกับบอร์ดมากขึ้น

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

เป็นทิปสั้นๆนะครับ ลองเข้าไปปรับดูที่ไฟล์  MessageIndex.template.php ส่วนรายละเอียดว่าปรับยังไง ตรงจุดไหนบ้าง เดี๋ยวค่อยว่ากันต่อในบทความถัดไป

อันนี้แค่เกริ่นนำพอเป็นไอเดียก่อน

35
 [SMF] ตัวอย่างธีม SMFแสดงกระทู้เป็นลิสต์แบ่งเป็นห้อง
วันนี้หากินง่าย ๆ
เอาตัวอย่างเว็บบอร์ดของ smf มาให้ชมครับ
เป็นบอร์ดของเว็บที่เป็นdealer ของโตโยต้า

บอร์ดตัวนี้ใช้ Tab jQuery มาดึงกระทู้ล่าสุดของทุกห้องมาแสดง ห้องละ 5 กระทู้ แบ่งcontent เป็น 2 คอลัมน์ เนื้อหาหลักยังฝั่งซ้ายและมีเมนูย่อยอยู่ฝั่งขวา
ดูภาพตัวอย่างและดูของจริงกันเลยดีกว่าครับ
http://phithan-toyota.com/forums/index.php

ดูตัวอย่างจริงที่ www.phithan-toyota.com/forums/

36
 [SMF] ช่วยด้วย!! ลงมอด..จนบอร์ดเน่า!!
มีอีเมล์ร่อนมาถามเกี่ยวกับการลง มอด
ถามว่า บอร์ดลงมอดแบบตามปกติที่เคยลงมา แต่อยู่มาวันหนึ่ง ลองลงมอดตัวหนึ่งดู ชื่อ PrettyUrls ขั้นตอนลงก็เหมือนปกติทั่วไป แต่พอเสร็จแล้วปรากฏว่าบอร์ดเน่าคะ ทำยังไงดี?

อย่างที่เคยบอกเมื่อหลายบทความก่อนหน้านี้แล้วว่า มอดของ smf มีความยุ่งยากตอนลงตรงที่มันจะพยายามเขียนไฟล์ใหม่เพิ่มเข้าไป ซึ่งหากไฟล์นั้นๆ ไม่ได้เซตเป็น 777 ไว้ มอดก็ง่อยแดกเลย ทำอะไรไม่ได้ ทีนี้แต่ละมอดก็มีการเขียนไฟล์มากหรือน้อยไม่เหมือนกันอีก

เดาว่ามอดตัวก่อนๆที่ลงแล้วไม่มีปัญหา น่าจะเป็นมอดตัวไม่ใหญ่มากนัก และบังเอิญไฟล์ที่มอดตัวนั้นไปเกี่ยวข้องอาจจเป็นไฟล์ที่เซตเป็น 777 แล้ว

ส่วนมอด PrettyUrls ซึ่งเป็นมอดที่ค่อนข้างใหญ่ มีการเขียนไฟล์เยอะ จึงอาจเจอปัญหาเขียนไฟล์ลงไปไม่ได้บ้าง หรือเขียนลงไปแต่ไม่สมบูรณ์บ้าง เมื่อเป็นเช่นนี้ บอร์ดก็เน่าด้วยประการฉะนี้แล

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

เืมื่อรู้แล้วว่าเป็นไฟล์ไหนบ้าง ก็เอาไฟล์ใหม่ไปทับตัวเก่า ก็เท่านั้นเอง
อย่างมอด PrettyUrls ไฟล์ที่ถูกเขียนส่วนใหญ่เป็นไฟล์ในโฟลเดอร์ Sources ก็เอาตัวใหม่ไปทับตัวเก่า ..ก็เรียบร้อยแล้วครับ

37
 [SMF] แก้ไขรูปแบบเวลาใน SMF


เวลาที่แสดงผลในเว็บบอร์ดของ SMF ในกระทู้รวม ค่าดีฟอลต์ หรือค่าเริ่มต้น จะอยู่ในรูปแบบนี้ครับ  กรกฎาคม 20, 2012, 08:03:49 AM

ทีนี้หากเราอยากจะเปลี่ยนแปลงรูปแบบ ให้เป็นแบบอื่นบ้าง เช่น อยากให้เป็น วันที่ 20 กรกฎาคม 2012, 08:03:49 น. ต้องทำอย่างไร ?

ทีนี้มีคำตอบครับ
ก่อนอื่นล็อกอินเข้าสู่ระบบ admin
เสร็จแล้วไปที่เมนู ปรับแต่งบอร์ด  > Featureds And Options.. > General (ทั่วไป)

เสร็จแล้วลองเลื่อนลงมาด้านล่างครับ
ตรง Default time format
เปลี่ยนข้อมูลในช่องใหม่ โดยลบอันเก่าทิ้ง ใส่อันนี้ลงไปแทน  วันที่ %e %B  %Y, %H:%M:%S น.
ค่าที่จะแสดงในเว็บบอร์ด คือ  วันที่ 20 กรกฎาคม 2012, 08:03:49 น.

แต่ถ้าอยากให้เดือนเป็นคำย่อ ก็เปลี่ยนจาก %B เป็น %b  เท่านี้ก็เรียบร้อยแล้วครับ

เล็กๆน้อยๆ แต่ก็อาจจะทำให้เว็บบอร์ดของคุณดูดีขึ้นมาได้

38
 [SMF] สร้างหน้าพักสำหรับลิงค์ไปนอกเว็บ Redirectpage
ไปตามบอร์ดใหญ่ๆ เวลามีลิงค์ให้คลิกไปยังเว็บอื่น ก่อนไปถึงเว็บนั้นๆ เราจะเจอหน้าหนึ่งดักไว้ก่อนเสมอ และจะมีข้อความว่า ..
"คุณกำลังลิงค์ไปนอกเว็บยังเว็บไซต์ www.xxxx.com"
หรือบางเว็บอาจแอบแปะโฆษณาในหน้าตรงนี้ด้วยและอาจใช้ข้อความอย่างอื่น แต่ก็ใกล้เคียงแบบนี้
หน้านี้เรียกว่า "หน้าพัก" หรือ Redirect Page

หลายคนหรือแม้แต่ผมเองก็สงสัยว่ามันมีประโยชน์อะไรหรือไอ้หนักพักเนี่ยะ โคตรเกะกะลูกกะตา เวลาจะคลิกไปยังเว็บอื่นมันยังมาดักเรา 5-10 วินาที เสียเวลานะเว้ยเฮ้ย!!

ประโยชน์ของมันก็คือ เพื่อไม่ให้มี link ออกไปจากหน้ากระทู้โดยตรงเพื่อผลดีต่ออันดับใน google ดังนั้นการที่สมาชิกจะใช้วิธีใส่ลิ้งในลายเซ็นหรือทำลิ้งในกระทู้เพื่อหวังผล back link ก็จะไม่มีผลต่อ อันดับใน google เห็นประโยชน์ของมันแล้วใช่มั้ยครับ ถ้าเห็นว่าเข้าท่าดี งั้นมาลงมือทำกันเลยดีกว่า

วิธีทำมี 2 แบบให้เลือกครับ
วิธีแรก ง่ายๆเลยไปหามอดมาติดในบอร์ดซะ ตามลิงค์นี้เลย http://custom.simplemachines.org/mods/index.php?mod=2562
 วิธีลงไม่ยุ่งยากเท่าไรคล้ายมอดอื่นๆทั่วไป มีหน้าสำหรับ settings ก็ลองไปเซตๆ ติ้งๆ ดู ผมไม่พูดถึงรายละเอียด

ส่วนอีกวิธีหนึ่ง สำหรับคนที่ไม่แฮปปี้กับการติดตั้งมอด เพราะต้องให้เราไป set chmod ไฟล์โน้นไฟล์นี้ให้เป็น 777 ยุ่งยากนัก ขอแบบเมนวลๆ
ทำตามวิธีนี้เลยครับ (อ้างอิงจาก thaiseoboard.com)

1. เปิดไฟล์ Sources/Subs.php มองหาโค๊ด
 // If it wasn't changed, no copying or other boring stuff has to happen!
if ($data != substr($message, $last_pos, $pos - $last_pos + 1))
{
 $message = substr($message, 0, $last_pos) . $data . substr($message, $pos + 1);
 // Since we changed it, look again incase we added or removed a tag. But we don't want to skip any. 
  $old_pos = strlen($data) + $last_pos - 1;
  $pos = strpos($message, '[', $last_pos);
  $pos = $pos === false ? $old_pos : min($pos, $old_pos);
  }
 }

 จากนั้นเติมโค๊ดในบรรทัดถัดมา..
 $_SERVER['svz']['go'] = '/go.php?';

$message = preg_replace(array('~\[direct\](.*?)\[/direct\]~','~\[direct\=(.*?)](.*?)\[/direct\]~'),array('$1%svz%2','$2%svz%2'),preg_replace_callback('~\(.*?)\[/url\]~',create_function('$m','$go=$_SERVER[\'svz\'][\'go\'];$v=@parse_url($m[1]);return (!preg_match(\'~^\'.$go.\'~\',$m[1])&&$_SERVER[\'HTTP_HOST\']!=$v[\'host\'])?\'[url=\'.$go.$m[1].\']\'.$m[2].\'%svz%1\':\'.\']\'.$m[2].\'\';'),preg_replace('~\[url\](.*?)\[/url\]~','$1',$message)));

 $message = str_replace (array('%svz%1', '%svz%2'), array(' [pr]', ' [direct]'), $message);

สิ่งที่ต้องตระหนักให้มากๆคือไฟล์ go.php ต้องอ้างอิงพาธให้ถูกต้องนะครับ
อ้างอิงถูกต้องหรือไม่อยู่ที่คุณว่าจะเก็บไฟล์ go.php ไว้ที่ไหน
คำถามที่ตามมาคือไฟล์ go.php ควรมีอะไรบ้างในนั้น
อะ ผมยกไฟล์ go.php ให้เลยแบบนี้นะ

<html>
<head>
<meta http-equiv="Content-Language" content="th">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<div align="center">
<p>
<font color="#0000FF">
<a href='<?php echo $_REQUEST['url']; ?>' rel="nofollow"><?php echo $_REQUEST['url']; ?></a></span></font></p>
<script language="javascript"> //setTimeout('document.RedirectX.submit()', 1000); setTimeout('top.location.href="<?php echo $_REQUEST['url']; ?>"', 5000); </script>
<br>
<font color="#008000">เรากำลังพาท่านไปยังหน้าที่ต้องการ.. กรุณารอสักครู๋!</font> <br>
 </div>
 </body>
 </html>

เสร็จแล้วครับ ลองเอาไปประยุกต์ใช้ดู ขัดข้องสงสัยประการใด ..โพสต์ถามได้นะครับ

39
 [SMF] wwwRedirect ตัดมันออกไปได้ไหม?
วันนี้มีปัญหามาให้คบคิดกันและมีวิธีแก้ไขให้ด้วย

เวลาคลิกเมนู เว็บบอร์ด หรือ webboard หรือ forums หรือลิงค์มาที่เว็บบอร์ดซึ่งมาจากหน้าแรก หลังจากคลิกปุ๊บด้านบน url จะติดคำว่า wwwRedirect มาด้วย
เช่น http://xxxxx.com/webboardwwwRedirect   ปัญหานี้ดูผิวเผินก็ไม่มีอะไร เพราะเว็บก็ยังเข้าได้ปกติดี แต่ผู้เชี่ยวชาญบอกว่า ปัญหานี้อาจทำให้บางครั้งเข้าบอร์ดได้บ้าง ไม่ได้บ้าง และที่สำคัญมีปัญหากับเสิรชเอ็นจิ้น ทำให้พี่เขาหาเราไม่เจอซะงั้น

ปัญหานี้เกิดขึ้นเพราะอะไรผมไม่ทราบนะครับ แต่วิธีแก้ผมไปค้นเจอผู้โพสต์ไว้ใน thaiseoboard.com ว่า ให้เปิดไฟล์ 2 ไฟล์ คือ Setthings.php และ Setthings_bak.php

ในไฟล์ดังกล่านี้จะมีคำสั่งนี้อยู่ $boardurl="htttp://www.xxxxx.com/board";  ให้ลบคำว่า www. ทิ้งเท่านั้นปัญหาดังกล่าวก็หายครับ

ทำไมมันง่ายงี้ว่ะฮ่ะเฮ้ย

40
 [MOD] แค่แปะลิงค์ของวีดีโอ..วีดีโอก็แสดง

วันนี้มาแนะนำ mod สักตัวเอาแบบสั้นๆ ง่ายๆ ได้ใจความ


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

รองรับ SMF ทุกเวอร์ชั่น !!
จงไปเสพ ณ บัดนาวเลย

http://custom.simplemachines.org/mods/index.php?mod=977

41
 [SMF] เพิ่มพื้นที่กระทู้กว้างขึ้น ด้วยการดึงข้อมูลผู้ตั้ง/ผู้ตอบกระทู้ไว้ด้านบน
บอร์ดเกี่ยวกับการถ่ายรูป ส่วนใหญ่ต้องการโชว์ภาพใหญ่ๆ ดังนั้น จึงอยากจะเอาข้อมูลของคนตอบหรือคนตั้งกระทู้จากเดิมอยู่ด้านซ้าย
อยากย้ายไปด้านบนซะ ..ทำยังไงดี?


วันนี้ผมมีวิธีครับ
เปิดไฟล์ Themes/yourthemes/Display.template.php

ค้นหาคำสั่งนี้  // Show information about the poster of this message. เจอแล้วอย่าพึ่งทำอะไร
หาคำสั่งนี้ต่อเลย  // Show the post itself, finally!

ให้ลบคำสั่งตั้งแต่  // Show information about the poster of this message.  ลงมาจนถึง   // Show the post itself, finally! เลยครับ
แล้วเพิ่มคำสั่งนี้ไปแทนที่



    // Show information about the poster of this message.
echo '
<table width="100%" cellpadding="5" cellspacing="0" style="table-layout: fixed;">
<tr>
<td bgcolor="#444">';


    // Show avatars, images, etc.?
if (!empty($settings['show_user_images']) && empty($options['show_no_avatars']) && !empty($message['member']['avatar']['image']))
echo '
        <div class="profileINFO">', $message['member']['avatar']['image'],'<br>';
       
       
                // Show their personal text?
if (!empty($settings['show_blurb']) && $message['member']['blurb'] != '')
echo '
        ', $message['member']['blurb'], '<br />
        <br />';

// This shows the popular messaging icons.
echo '
        ', $message['member']['icq']['link'], '
        ', $message['member']['msn']['link'], '
        ', $message['member']['aim']['link'], '
        ', $message['member']['yim']['link'], '<br />';
       
            // Show the profile, website, email address, and personal message buttons.
if ($settings['show_profile_buttons'])
{
// Don't show the profile button if you're not allowed to view the profile.
if ($message['member']['can_view_profile'])
echo '
        <a href="', $message['member']['href'], '">', ($settings['use_image_buttons'] ? '<img src="' . $settings['images_url'] . '/icons/profile_sm.gif" alt="' . $txt[27] . '" title="' . $txt[27] . '" border="0" />' : $txt[27]), '</a>';

// Don't show an icon if they haven't specified a website.
if ($message['member']['website']['url'] != '')
echo '
        <a href="', $message['member']['website']['url'], '" title="' . $message['member']['website']['title'] . '" target="_blank">', ($settings['use_image_buttons'] ? '<img src="' . $settings['images_url'] . '/www_sm.gif" alt="' . $txt[515] . '" border="0" />' : $txt[515]), '</a>';

// Don't show the email address if they want it hidden.

if (empty($message['member']['hide_email']))
echo '
        <a href="mailto:', $message['member']['email'], '">', ($settings['use_image_buttons'] ? '<img src="' . $settings['images_url'] . '/email_sm.gif" alt="' . $txt[69] . '" title="' . $txt[69] . '" border="0" />' : $txt[69]), '</a>';

// Since we know this person isn't a guest, you *can* message them.

if ($context['can_send_pm'])
echo '
        <a href="', $scripturl, '?action=pm;sa=send;u=', $message['member']['id'], '" title="', $message['member']['online']['label'], '">', $settings['use_image_buttons'] ? '<img src="' . $settings['images_url'] . '/im_' . ($message['member']['online']['is_online'] ? 'on' : 'off') . '.gif" alt="' . $message['member']['online']['label'] . '" border="0" />' : $message['member']['online']['label'], '</a>';
       
       
}
       
        echo '</div> ';

echo '<div style="float:left;padding: 5px; 10px">';

echo'  <b>', $message['member']['link'], '</b>
    <div class="smalltext">';

// Show the member's custom title, if they have one.
if (isset($message['member']['title']) && $message['member']['title'] != '')
echo '
        ', $message['member']['title'], '<br />';

// Show the member's primary group (like 'Administrator') if they have one.
if (isset($message['member']['group']) && $message['member']['group'] != '')
echo '
        ', $message['member']['group'], '<br />';

// Don't show these things for guests.
if (!$message['member']['is_guest'])
{
// Show the post group if and only if they have no other group or the option is on, and they are in a post group.
if ((empty($settings['hide_post_group']) || $message['member']['group'] == '') && $message['member']['post_group'] != '')
echo '
        ', $message['member']['post_group'], '<br />';
echo '
        ', $message['member']['group_stars'], '<br />';

// Is karma display enabled?  Total or +/-?
if ($modSettings['karmaMode'] == '1')
echo '
        <br />
        ', $modSettings['karmaLabel'], ' ', $message['member']['karma']['good'] - $message['member']['karma']['bad'], '<br />';
elseif ($modSettings['karmaMode'] == '2')
echo '
        <br />
        ', $modSettings['karmaLabel'], ' +', $message['member']['karma']['good'], '/-', $message['member']['karma']['bad'], '<br />';

// Is this user allowed to modify this member's karma?
if ($message['member']['karma']['allow'])
echo '
        <a href="', $scripturl, '?action=modifykarma;sa=applaud;uid=', $message['member']['id'], ';topic=', $context['current_topic'], '.' . $context['start'], ';m=', $message['id'], ';sesc=', $context['session_id'], '">', $modSettings['karmaApplaudLabel'], '</a>
        <a href="', $scripturl, '?action=modifykarma;sa=smite;uid=', $message['member']['id'], ';topic=', $context['current_topic'], '.', $context['start'], ';m=', $message['id'], ';sesc=', $context['session_id'], '">', $modSettings['karmaSmiteLabel'], '</a><br />';

// Show online and offline buttons?
if (!empty($modSettings['onlineEnable']) && !$message['member']['is_guest'])
echo '
        ', $context['can_send_pm'] ? '<a href="' . $message['member']['online']['href'] . '" title="' . $message['member']['online']['label'] . '">' : '', $settings['use_image_buttons'] ? '<img src="' . $message['member']['online']['image_href'] . '" alt="' . $message['member']['online']['text'] . '" border="0" style="margin-top: 2px;" />' : $message['member']['online']['text'], $context['can_send_pm'] ? '</a>' : '', $settings['use_image_buttons'] ? '<span class="smalltext"> ' . $message['member']['online']['text'] . '</span>' : '', '<br /><br />';

// Show the member's gender icon?
if (!empty($settings['show_gender']) && $message['member']['gender']['image'] != '')
echo '
        ', $txt[231], ': ', $message['member']['gender']['image'], '<br />';

// Show how many posts they have made.
echo '
        ', $txt[26], ': ', $message['member']['posts'], '<br />
        <br />';

}
// Otherwise, show the guest's email.
elseif (empty($message['member']['hide_email']))
echo '
        <br />
        <br />
    <a href="mailto:', $message['member']['email'], '">', ($settings['use_image_buttons'] ? '<img src="' . $settings['images_url'] . '/email_sm.gif" alt="' . $txt[69] . '" title="' . $txt[69] . '" border="0" />' : $txt[69]), '</a>';

// Done with the information about the poster... on to the post itself.
echo '
    </div>
</td>
</tr>



<tr>
<td valign="top" width="100%" height="100%">
    <table width="100%" border="0"><tr>
        <td valign="middle"><a href="', $message['href'], '"><img src="', $message['icon_url'] . '" alt="" border="0" /></a></td>
        <td valign="middle">
            <div style="font-weight: bold;" id="subject_', $message['id'], '">
                <a href="', $message['href'], '">', $message['subject'], '</a>
            </div>';

// If this is the first post, (#0) just say when it was posted - otherwise give the reply #.
echo '
            <div class="smalltext">« <b>', !empty($message['counter']) ? $txt[146] . ' #' . $message['counter'] : '', ' ', $txt[30], ':</b> ', $message['time'], ' »</div></td>
        <td align="', !$context['right_to_left'] ? 'right' : 'left', '" valign="bottom" height="20" style="font-size: smaller;">';

// Can they reply? Have they turned on quick reply?
if ($context['can_reply'] && !empty($options['display_quick_reply']))
echo '
<a href="', $scripturl, '?action=post;quote=', $message['id'], ';topic=', $context['current_topic'], '.', $context['start'], ';num_replies=', $context['num_replies'], ';sesc=', $context['session_id'], '" onclick="doQuote(', $message['id'], ', \'', $context['session_id'], '\'); return false;">', $reply_button, '</a>';

// So... quick reply is off, but they *can* reply?
elseif ($context['can_reply'])
echo '
<a href="', $scripturl, '?action=post;quote=', $message['id'], ';topic=', $context['current_topic'], '.', $context['start'], ';num_replies=', $context['num_replies'], ';sesc=', $context['session_id'], '">', $reply_button, '</a>';

// Can the user modify the contents of this post?
if ($message['can_modify'])
echo '
<a href="', $scripturl, '?action=post;msg=', $message['id'], ';topic=', $context['current_topic'], '.', $context['start'], ';sesc=', $context['session_id'], '">', $modify_button, '</a>';

// How about... even... remove it entirely?!
if ($message['can_remove'])
echo '
<a href="', $scripturl, '?action=deletemsg;topic=', $context['current_topic'], '.', $context['start'], ';msg=', $message['id'], ';sesc=', $context['session_id'], '" onclick="return confirm(\'', $txt[154], '?\');">', $remove_button, '</a>';

// What about splitting it off the rest of the topic?
if ($context['can_split'])
echo '
<a href="', $scripturl, '?action=splittopics;topic=', $context['current_topic'], '.0;at=', $message['id'], '">', $split_button, '</a>';

// Can do some Thank You Post things :)
if ($message['thank_you_post']['post'] && !$message['thank_you_post']['locked'])
echo '
<a href="', $scripturl, '?action=thankyou;topic=', $context['current_topic'], '.0;msg=', $message['id'], '">', $thankyoupostpost_button, '</a>';

if ($message['thank_you_post']['lock'] && $message['thank_you_post']['isThankYouPost'])
echo '
<a href="', $scripturl, '?action=thankyoupostlock;topic=', $context['current_topic'], '.0;msg=', $message['id'], '">', $message['thank_you_post']['locked'] ? $thankyoupostopen_button : $thankyoupostlock_button, '</a>';

if ($message['thank_you_post']['delete'] && $message['thank_you_post']['isThankYouPost'])
echo '
<a href="', $scripturl, '?action=thankyoupostdelete;topic=', $context['current_topic'], '.0;msg=', $message['id'], ';sesc=', $context['session_id'], '" onclick="return confirm(\'', $txt['remove_thank_you_post'], '?\');">', $thankyoupostdelete_button, '</a>';

// Show a checkbox for quick moderation?
if (!empty($options['display_quick_mod']) && $options['display_quick_mod'] == 1 && $message['can_remove'])
echo '
            <input type="checkbox" name="msgs[]" value="', $message['id'], '" class="check" ', empty($settings['use_tabs']) ? 'onclick="document.getElementById(\'quickmodSubmit\').style.display = \'\';"' : '', ' />';

// Show the post itself, finally!



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

42
 [SMF] ลงMODไม่ได้ทำไงดี?



หลายครั้งที่เวลาจะลงมอดตัวใหญ่ๆ มักพบปัญหาลงไม่สำเร็จ แต่ลงในเครื่องสำเร็จดี ทั้งนี้สาเหตุเป็นเพราะอันใดหรือ? ช่วยชี้แจงแถลงไขที
ครับ, ปัญหานี้เป็นกันบ่อย เป็นกันเยอะ เป็นกันมาก จนบางคนหนีไปจาก SMF เลยทีเดียวเีชียว แต่ยังไงก็หนีไม่พ้นหรอกครับ ไปหา CMS เจ้าอื่นก็จะเจอปัญหาอื่นอีกไปเรื่อยๆ  เราไม่สามารถหนีปัญหาได้หรอกครับ
ต้องสู้กับมัน!!

สาเหตุที่ลงmod บนโฮสท์จริงแล้วไม่ค่อยผ่าน สาเหตุหลักมาจากไฟล์หรือโฟลเดอร์ของเราไม่ได้ set permission ให้เป็น 777 หรือให้เป็น writeable นั่นเองครับ
คำถามตามมาทันที แล้วจะต้องไปเซตไฟล์ไหนบ้าง?

อันนี้ตอบไม่ได้เลยครับ เพราะปลั๊กอินแต่ละตัวมีการเขียนไฟล์ไม่เหมือนกัน ไม่เท่ากัน บางมอดต้องสร้างตารางขึ้นมาใหม่ หรือเพิ่มฟิลด์ไปในตารางเดิม ฯลฯ
จะให้มานั่งไล่เซตไฟล์ให้เป็น 777 ก็ไม่ไหว เพราะบางไฟล์เซตไม่ได้อีก เพราะถูกทางโฮสท์fixไว้ไม่ให้แก้ไขหรือลบบางไฟล์

แล้วงี้..ต้องทำไง?

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

เพียงเท่านี้เราก็สามารถ install มอดใหญ่ได้อย่างไม่มีปัญหา (ถึงแม้ว่าจะยุ่งยากไปนิดก็ตาม!!)

43
 [SMF] ปัญหาระหว่างอัพเกรดเวอร์ชั่นของ SMF จากเวอร์ชั่น 1 สู่เวอร์ชั่น 2


เว็บบอร์ด smf ที่ใช้กันมานานแล้ว ส่วนใหญ่ก็จะใช้เวอร์ชั่น 1 กัน ทีนีพอ smf ออกเวอร์ชั่นใหม่มา นั่นคือเวอร์ชั่น 2 หลายๆคนก็อยากจะใช้เวอร์ชั่น 2 บ้าง
แต่ก็ยังลังเลไม่กล้าอัพเกรด เพราะเกรงว่าข้อมูลในบอร์ดทั้งหมด ไม่ว่าจะเป็นรายชื่อสมาชิก หรือกระทู้ต่างๆนานามากมายจะอันตรธานหายไปในระหว่างการเปลี่ยนเวอร์ชั่น!!

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

แต่วันนี้จะมาแชร์ปัญหาที่เกิดขึ้นระหว่างอัพเกรด
หากเราอัพโหลดไฟล์ upgrade ขึ้นไปเรียบร้อยแล้ว นาทีนี้เราจะถอยหลังไม่ได้แล้ว ต้องเดินหน้าอัพเกรดอย่างเดียว
พออัพโหลดไฟล์เสร็จสรรพ เรียกหาไฟล์ upgrade.php ผ่านบราวเซอร์ ..ความระทึกใจอยู่ตรงนี้แหละครับ

หากเรียกแล้วมันขึ้นมาด้วยหน้าตาปกติ ดูดี ..เราก็หายใจทั่วท้อง มั่นใจได้ว่า การอัพเกรดครั้งนี้ต้องผ่านไปได้ด้วยดีอย่างแน่นอน !!

แต่ถ้าเรียกไฟล์ upgrade.php ผ่านบราวเซอร์ปุ๊บ หน้าตามันดูเอ่อๆ ผิดปกติ แถมยังมีแจ้งเอ่อเร่อแจ้งบรรทัดที่ผิดด้วย โอ้ย ตาย เราจะแก้ปัญหายังไงดี!!

ปัญหานี้เกิดขึ้นเพราะไฟล์ที่เราอัพโหลดไปนั้น ไม่สมบูรณ์!!
ทั้งๆที่เรามั่นใจว่าเราอัพโหลดไฟล์ไปทับไฟล์เก่าเรียบร้อยหมดแล้วนะ แต่ทำไม ถึงบอกว่าไม่สมบูรณ์

อย่างนี้ครับ ไฟล์บางไฟล์ถูกห้ามไม่ให้ลบหรือทับ ดังนั้น มันจึงยังคงเป็นไฟล์เก่าอยู่ พอเป็นไฟล์เก่า การอัพเกรดก็ไม่ผ่่าน!!

การแก้ปัญหาคือ ให้พยายามลบไฟล์นั้นให้ได้ครับ แต่ถ้าพยายามจนสุดความสามารถแล้วยังลบไม่ได้ ก็ให้ไปเปลี่ยนชื่อไฟล์ หรือโฟลเดอร์นั่นซะ แล้วค่อยอัพไฟล์ใหม่เข้าไปแทน

ทีนี้ ..ก็ค่อยทำการอัพเกรดต่อไป รับรองผ่าน ฉลุย !!

44
 [SMF] วิธีทำกระทู้แนะนำในเว็บบอร์ด

อ้างอิงจากกระทู้นี้ http://forum.ubuntuclub.com/forum?topic=8915 ของ Ubuntuclub Forum  ครับ
เห็นว่าน่าสนใจดีเลยขออนุญาตนำมาเผยแพร่ต่อเผื่อให้ท่านที่สนใจ

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

ความจริงจะบอกว่าเป็นกระทู้โหวตก็ไม่ใคร่ถูกนัก เป็นเพียงการอนุญาตให้สมาชิกคลิกเลือกกระทู้ให้ไปอยู่ในหมวด "กระทู้แนะนำ" ซึ่งจะอยู่บนสุด แขกใครไปไหนมาไหนก็จะเห็นเด่นเป็นสง่า
ผมจะไม่เขียนอะไรเพิ่มเติมในระบบที่ทาง Ubuntuclub Forum  เขียนไว้แล้วนะครับ
แค่จะแนะนำวิธีใช้งานเท่านั้นเอง (ในลิงค์ดังกล่าวแนะนำการใช้งานไว้สำหรับทั้งเวอร์ชั่น 1 และเวอร์ชั่น 2 แต่ในที่นี้ผมจะขอพูดถึงเฉพาะเวอร์ชั่น 2 เท่านั้นนะครับ)

ถ้าท่านยังคิดภาพกระทู้แนะนำไม่ออก ..ก็ขอให้คิดถึงภาพเว็บบอร์ดที่มีกระทู้เรียงกันเป็นลำดับ แต่ด้านบนสุดของกระทู้ที่เรียงเป็นลำดับนั้น มีกล่องสี่เหลี่ยมตกแต่งสวยงาม ซึ่งในกล่องนั้นปรากฏกระทู้, ผู้ตั้งกระทู้, วันเวลาที่ตั้งกระทู้ ฯลฯ แล้วแต่จะหยิบนำอะไรมาแสดง ไม่เรียงลำดับ ไม่ใช่กระทู้ปักหมุด แต่เป็นกระทู้แนะนำ (ตามภาพ)

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

มาดูการนำไปใช้งานเลยดีกว่านะครับ
ไฟล์ที่เกี่ยวข้องมี 3 ไฟล์ และ 1 ใน 3 ไฟล์นั้นต้องสร้างขึ้นมาใหม่
1. Display.template.php // เพิ่มปุ่มโหวต หรือปุ่มเลือกกระทู้ในไฟล์นี้
2. BoardIndex.template.php //  สำหรับแสดงกระทู้โหวต และ
3. voterec.php // สำหรับโหวตหรือเลือกกระทู้

ไฟล์  Display.template.php ค้นหาคำว่า
  if (!$message['approved'] && $message['member']['id'] != 0 && $message['member']['id'] == $context['user']['id'])
   echo '
        <div class="approve_post">
         ', $txt['post_awaiting_approval'], '
        </div>';

 พบแล้ววางคำสั่งด้านล่างนี้ต่อท้ายไป                             
      if(empty($message['counter']))
      echo '
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.js"></script>
<script type="text/javascript">
function voterec(id, ele){
   $(ele).unbind("click")
   $(".whs-rec-desc").html("โปรดรอ...")
   $.get("',$settings['theme_url'],'/voterec?act=vote&id="+id, {}, function(d){
      if(d!="OK")
         $(".whs-rec-desc").html(d)
      else
         $(".whs-rec-desc").html("โหวตเรียบร้อยแล้วครับ :)")
   })
}
</script>
                  <div class="whs-rec" style="float: right; text-align: center; font-size: 9pt;">
                     <a href="javascript:ubuntuclub();" onclick="voterec(',$context['current_topic'],', this); return false;">
                        <img src="',$settings['default_theme_url'],'/images/recommend.png" />
                     </a>
                     <div class="whs-rec-desc" style="margin-top: -20px;">
                        โหวตกระทู้นี้ ห้เป็นกระทู้แนะนำ
                     </div>
                  </div>';   
               
ไฟล์ BoardIndex.template.php ให้ค้นหาคำว่า
 /* Each category in categories is made up of:
 id, href, link, name, is_collapsed (is it collapsed?), can_collapse (is it okay if it is?),
 new (is it new?), collapse_href (href to collapse/expand), collapse_image (up/down image),
 and boards. (see below.) */
 
    พบแล้วให้วางโค๊ดด้านล่างนี้ด้านบน ..
 
       // WHS's Mod -> Recommend Topic
   print <<<WHSDOC
   <div class="tborder marginbottom categoryframe">
      <h3 class="catbg headerpadding">กระทู้แนะนำ</h3>
      <table cellspacing="1" class="bordercolor boardsframe">
         <tr>
            <td class="windowbg icon"><img src="{$settings['default_theme_url']}/images/recommend.png" alt="กระทู้แนะนำ" border="0" /><div style="margin-top: -20px;">กระทู้แนะนำ</div></td>
            <td class="windowbg"><iframe src="/voterec?act=view" style="width:100%; border: none;"></iframe></td>
         </tr>
      </table>
   </div>
WHSDOC;         

และสุดท้ายสร้างสร้างไฟล์ voterec.php และวางชุดคำสั่งนี้ลงไป

<?php
include "smf/SSI.php";
// no trespasser!
if($context['user']['is_guest']){
   die('ต้องสมัครสมาชิกก่อนทำการโหวตครับ');
}
function boardName($bid){
   global $smcFunc;
   $req = $smcFunc['db_query']('', "
      SELECT name
      FROM {db_prefix}boards
      WHERE id_board = {int:bid}
      LIMIT 1
   ", array(
      'bid' => $bid,
   ));
   $row = $smcFunc['db_fetch_row']($req);
   return $row[0];
}
// yeah, I cheat.
// this using the [t=..] by the DtTvB :) ported to SMF 2's
// Get topic title from Zone-IT, with member color link!
function ubuntuclub_topic($message){
   global $smcFunc, $memberContext, $txt, $scripturl;
   $req = $smcFunc['db_query']('', "
      SELECT subject, id_member, id_board, id_topic
      FROM {db_prefix}messages
      WHERE id_topic = {int:idt}
      ORDER BY id_msg ASC LIMIT 1
   ", array(
      'idt' => $message,
   ));
   $row = $smcFunc['db_fetch_row']($req);
   if($row[1] != 0){
      // I don't reinvent the wheel, I'm lazy. I know this is slow but since we use iframe that doesn't matter.
      loadMemberData($row[1], false, 'minimal');
      @loadMemberContext($row[1]); // SHUT UP!
      $member = $memberContext[$row[1]]['link'];
   }else{
      $member = $txt['guest_title']; //I'm Fedora's l10n team after all.
   }
   // get the board's name!
   $bn = boardName($row[2]);
   return array($row[0], $member, "<a href='{$scripturl}/board,{$row[2]}.0.html'>$bn</a>");
}
if($_GET['act'] == "vote"){
   $topic = $_GET['id'];
   // is that thing really, exists?
   if (!ubuntuclub_topic($topic)){
      $smcFunc['db_free_result']($request);
      die("ไม่พบกระทู้ที่เรียก");
   }
   $smcFunc['db_free_result']($request);
   // well, so now it's exists. Just inject that into the table
   // but we need to know how much vote does it having?
   $request = $smcFunc['db_query']('', '
      SELECT * FROM {db_prefix}recommend WHERE ID_TOPIC = {int:idt}
   ', array(
      'idt' => $topic
   ));
   // hmm, PHP's DBAPI is clearly a mess, python's DBAPI is really simple
   $recommend = $smcFunc['db_fetch_row']($request);
   $smcFunc['db_free_result']($request);
   if(!$recommend){
      $request = $smcFunc['db_query']('', '
         INSERT INTO {db_prefix}recommend VALUES ({int:idt}, 1, "'.$context['user']['id'].'")
      ', array(
         'idt' => $topic
      ));
      die("OK");
   }else{
      // PHP showing it's suckness again, I think context.user.id in recommend[2].split(",") is more readable
      if(in_array($context['user']['id'], split(",", $recommend[2]))){
         die("คุณโหวตไปแล้ว");
      }
      $recommend[2] .= ",".$context['user']['id'];
      $recommend[1] += 1;
      // commit!
      $request = $smcFunc['db_query']('', '
         UPDATE {db_prefix}recommend SET count = {int:count}, voters = "'.$recommend[2].'"
         WHERE ID_TOPIC = {int:idt}
      ', array(
         'idt' => $topic,
         'count' => $recommend[1]
      ));
      die("OK");
   }
}else if($_GET['act'] == "view"){
   $req = $smcFunc['db_query']('', "
      SELECT ID_TOPIC FROM {db_prefix}recommend
      ORDER BY count DESC LIMIT 5
   ", array());
   while($row = $smcFunc['db_fetch_row']($req)){
      $tt = ubuntuclub_topic($row[0]);
      // hard coding to prevent beggars to use this
      print "<div><a href='$scripturl/topic,{$row[0]}.0.html' target='_parent'>{$tt[0]}</a> {$txt['started_by']} {$tt[1]} {$txt['in']} {$tt[2]}</div>";
   }
}
 
เซฟไว้ในโฟล์เดอร์ธีมของเรา
สุดท้ายต้องไปสร้างตารางไว้ในฐานข้อมูลด้วยครัับ

CREATE TABLE `smf_recommend` (
  `ID_TOPIC` int(11) NOT NULL,
  `count` int(11) NOT NULL default '0',
  `voters` longtext NOT NULL,
  PRIMARY KEY  (`ID_TOPIC`),
  KEY `count` (`count`)
)

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


45
 [SMF] ฟังก์ชั่นแสดงกระทู้ล่าสุดอย่างเดียว ไม่แสดงกระทู้ตอบ
หลายวันก่อน มีน้องคนหนึ่งร่อนอีเมล์มาถามว่า
กำลังทำบอร์ดอยู่เหมือนกัน แต่อยากทราบว่า กระทู้ล่าสุดในบอร์ดทำยังไงถึงจะให้แสดงเฉพาะกระทู้ล่าสุดจริงๆ ไม่แสดงกระทู้อัพเดทที่มีคำว่า Re: นำหน้า

น้องเค้ากลัวผมไม่เข้าใจก็เลยส่งภาพมาให้ดูต่างหน้าด้วย


วิธีทำก็ไม่ซับซ้อนอะไร เอาให้ง่ายๆ เข้าใจง่ายๆ
ฟังก์ชั่นที่ทางระบบ smf ทำไว้แล้วนั้น เราจะไม่ไปแตะต้อง เราเขียนฟังก์ชั่นขึ้นมาใหม่เลยก็แล้วกัน

ดังนี้ครับ

  function recentTopics($num=20)
  {
      global $context, $settings, $db_prefix, $txt, $scripturl, $user_info, $modSettings,$smcFunc;

          $request1=$smcFunc['db_query']('','SELECT t.id_topic,m.body,m.subject,mb.member_name
          FROM ({db_prefix}topics as t , {db_prefix}messages as m,{db_prefix}members as mb)
          WHERE t.id_first_msg=m.id_msg AND m.id_member=mb.id_member
          ORDER BY t.id_topic DESC
          LIMIT {int:num}',
          array( 'num'=>$num,
  )  );
 
 
  echo "<ul>";
  while ($row = mysql_fetch_assoc($request1))
  {
 
  echo '<li><a href="/smf/?topic='.$row['id_topic'].'">'.$row['subject'].' </a> โดย '.$row['member_name'].' </li>';

 }
echo "</ul>";
 
  mysql_free_result($request1);

}

การนำไปใช้

ก็นำฟังก์ชั่นนี้ไปทิ้งไว้ในไฟล์ index.template.php
ไปใส่ด้านล่างสุดเลยก็ได้ครับ แต่ต้องอยู่ภายในเครื่องหมาย ? >

จากนั้น หาตำแหน่งเหมาะที่อยากให้กระทู้ล่าสุดโชว์ ใส่คำสั่งนี้ไป <?php recentTopics();?>
อยากให้แสดงจำนวนเท่าไร ก็ใส่ตัวเลขในเครื่องหมายวงเล็บไปเท่านั้น

เช่น  recentTopics(10);

ก็จะแสดงจำนวนกระทู้ทั้งหมด 10 กระทู้

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

ก็ประมาณนี้นะครับ ลองเอาไปปรับใช้ดู
ติดขัดตรงไหนก็สอบถามได้ครับ ยินดีถ้าช่วยได้ก็ช่วยเต็มที่

หน้า: 1 2 [3] 4 5 ... 34