- ชื่อ: new.gif Don't show
- ผู้เขียน: UnclEo
- นำเสนอโดย: DexMoreGroup
- ประเภท: SMF Problem and Questions
- รองรับ: SMF 1.1.xx, 2.0.xx
- ปรับปรุงล่าสุด: 19 กุมภาพันธ์ 2554
รายละเอียด เห็นถามกันมากมายหลายที่เหลือเกินครับ ตอบไว้ก็หลายที่ ในเรื่องของภาพ new.gif ไม่แสดงเมื่อเปลี่ยนไปใช้ธีมอื่นๆ ที่ไม่ใชธีมมาตรฐาน แต่เป็นกระทู้ถาม-ตอบ กระจัดกระจายไป เลยคิดว่าตั้งเป็นหัวข้อการแก้ปัญหาเรื่องนี้โดยเฉพาะเป็นเรื่องเป็นราวไปเลย และได้เพิ่มรูปประกอบเข้าไปด้วย ด้วยว่าบางคนอธิบายเป็นตัวอักษรแล้วก็ยังเข้าใจยากเหลือเกิ๊น..
ตัวอย่าง
1. จัดการแตกไฟล์ของธีมที่คุณดาวน์โหลดมา ซึ่งอยู่ในรูปนามสกลุล *.zip ในที่นี้ผมขอยกตัวอย่างธีม Urban ซึ่งโหลดมาแล้วจะเป็นหน้าตาประมาณนี้

จัดการแตกไฟล์ตามรูปเลยครับ
2. เมื่อแตกไฟล์คลายซิปออกมาแล้วก็จะได้เป็นโฟลเดอร์ปกติ เข้าไปในโฟลเดอร์นั้นเลยครับ
3. เข้าไปในโฟลเดอร์ของธีมแล้วคุณจะเห็นโฟล์เดอร์ images

4. เข้าไปในโฟลเดอร์ images แล้วคุณจะเห็นโฟลเดอร์ english

จัดการคัดลอกมันเลยครับ
5. นำไปวางในที่เดียวกับที่เราคัดลอกนี่แหละ ไม่ต้องไปใหนไกล และจัดการเปลี่ยนชื่อซะ..

เปลี่ยนชื่อเป็น thai-utf8 เพราะเป็นคนไทย ใช้ภาษาไทย ซึ่งภาษาไทยที่ใช้อยู่ในเว็บมีอยู่ 3 ชุดภาษาด้วยกันคือ windows-874, tis-620 และ thai-utf8 สองชุดแรกนั่นหล้าหลังไปแล้วครับ ในปัจจุบันใช้ UTF-8 กันเป็นส่วนมาก
6. อัพโหลดโฟลเดอร์ที่คุณเปลี่ยนชื่อแล้วเข้าไปไว้ในธีมที่คุณใช้ และมีปัญหา ในที่นี้ผมใช้ธีม Urban เป็นธีมสมติในการแก้ปัญหา ท่านที่ใช้ธีมอื่นๆ ก็เปลี่ยนไปตามชื่อธีมที่ใช้นะครับ อันนี้ผมอัพโหลดไปไว้ที่
/domains/dexmore.com/public_html/Themes/Urban/images

อันนี้ SMF ของผมอยู่ใน $root (public_html) เลยนะครับ หากของท่านติดตั้ง SMF ใน Sub Folder ก็ต้องเข้าไปให้ถึงที่ท่านติดตั้งนั้นแหละ
โค้ดคำสั่งที่เรียกใช้งานให้แสดงรูป new.gif อยู่ในไฟล์ MessageIndex.template.php ซึ่งมีรูปแบบโค้ดเป็นแบบนี้ครับ
// Is this topic new? (assuming they are logged in!)
if ($topic['new'] && $context['user']['is_logged'])
echo '
<a href="', $topic['new_href'], '" id="newicon' . $topic['first_post']['id'] . '"><img src="', $settings['images_url'], '/', $context['user']['language'], '/new.gif" alt="', $txt[302], '" /></a>';
หากมีปัญหา และแก้ตามด้านบนแล้วยังไม่แสดงก็ให้ดูโค้ดส่วนนี้ หากโค้ดส่วนนี้ถูกต้อง แต่ไม่มีรูปที่เรียกใช้งาน มันจะแสดงข้อความว่า "ใหม่" และโค้ดนี้กำหนดเรียกใช้งานรูป new.gif จากโฟลเดอร์ที่ตรงกับภาษาที่ผู้ใช้เลือกใช้ด้วยคำสั่ง $context['user']['language'] หากผู้ใช้ใช้ภาษาไทย มันก็เรียกใช้รูป new.gif จากโฟลเดอร์ thai-utf8 แต่ตรงกันข้ามหากผู้ใช้เลือกใช้ภาษาของบอร์ดเป็น english มันก็เรียกใช้งานจากโฟลเดอร์ english ซึ่งเป็นโฟลเดอร์มาตรฐานที่มีมาแล้วทุกธีม เพราะภาษามาตรฐานของ SMF คือ english
ส่วนแหล่งประมวลผล ที่กำหนดว่ากระทู้ใหนใหม่ ยังไม่ได้อ่าน และต้องแสดง new.gif อยู่ในไฟล์ Sources/MessageIndex.php โค้ดเป็นแบบนี้ครับ
'start' => 'new',
'topic' => $row_board['ID_TOPIC'],
'href' => $row_board['subject'] != '' ? $scripturl . '?topic=' . $row_board['ID_TOPIC'] . '.new' . (empty($row_board['isRead']) ? ';boardseen' : '') . '#new' : '',
'link' => $row_board['subject'] != '' ? '<a href="' . $scripturl . '?topic=' . $row_board['ID_TOPIC'] . '.new' . (empty($row_board['isRead']) ? ';boardseen' : '') . '#new" title="' . $row_board['subject'] . '">' . $short_subject . '</a>' : $txt[470]
),
เป็นมาตรฐานของ SMF อยู่แล้วโดยไม่ต้องแก้ไขใดๆ ทั้งสิ้น แต่หากท่านต้องการประยุกติ์ให้เป็นอย่างอื่นก็ปรับแต่งโค้ดได้ส่วนนี้เลยครับ
หวังบทความนี้เป็นประโยชน์กับผู้ประสบปัญหานี้กันบ้างนะครับ
ลิงค์หัวข้อ:
http://dexmore.com/topic/4819