ผู้เขียน หัวข้อ: วิธีทำ Recent Topics กระทู้ล่าสุดแบบไม่มี Re: SMF2.0.2  (อ่าน 14473 ครั้ง)

ออฟไลน์ We Love Thailand

  • เรารักประเทศไทย
  • Administrator
  • *
  • กระทู้: 1,229
  • ชอบกด Like+ 844
  • เพศ: ชาย
  • ใช้งานล่าสุด :12 มกราคม 2018, 12:54:45
  • รับบอกรักประเทศไทย
    • SprinklerThailand สปริงเกอร์ไทยแลนด์
วิธีทำ Recent Topics กระทู้ล่าสุดแบบไม่มี Re: SMF2.0.2
ปกติกระทู้เมื่อเร็วๆนี้ที่หน้าบอร์ดจะเป็นแบบ Recent Posts คือเมื่อมีผู้ตอบกลับจะขึ้น Re : ไปเรื่อยๆ ในหัวข้อเดียวกันจนเต็มหน้าบอร์ดและทำให้กระทู้อื่นๆในหลายๆกระทู้ตกไป



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

[hide=3]
ส่วนแรก :
นำโค้ด title bar ของระบบบอร์ดมาใส่

	
	
// start the "Recent Topics : welovethailand.com.
	
	
echo 
'
	
	
	
<div class="title_barIC">
	
	
	
	
<h4 class="titlebg">
	
	
	
	
	
<span class="ie6_header floatleft">
	
	
	
	
	
	
<a href="'
$scripturl'?action=recent"><img class="icon" src="'

$settings['images_url'], '/post/xx.gif" alt="'$txt['WeloveTh_title'], '" /></a>
	
	
	
	
	
	
'
,$txt['WeloveTh_title'], '
	
	
	
	
	
</span>
	
	
	
	
</h4>
	
	
	
</div>
	
	
	
<div class="hslice" id="recent_posts_content">
	
	
	
	
<div class="entry-title" style="display: none;">'
$context['forum_name_html_safe'], ' - '

$txt['recent_posts'], '</div>
	
	
	
	
<div class="entry-content" style="display: none;">
	
	
	
	
	
<a rel="feedurl" href="'
$scripturl'?action=.xml;type=webslice">'$txt

['subscribe_webslice'], '</a>
	
	
	
	
</div></div>'
;
	
	
	
echo 
'
	
	
	
	
<dl id="ic_recentposts" class="middletext">'
;  


และโค้ดชุดนี้ปิดไว้ท้ายสุดของโค้ด function
	
	
	
	
echo 
'
	
	
	
	
</dl>'
;
	
	
// End the "Recent Topics : welovethailand.com.


ส่วนที่2 :
(เราต้องไปเลือกแบบหรือโค้ดจากหน้านี้มาก่อน) "วิธีดึง10 กระทู้ล่าสุดมาแสดงที่หน้าแรกของเว็บ"

ยกตัวอย่างผมเลือก แบบที่4. ssi_recentTopics4  Full Table มา
ตัดเอาโค้ดเฉพาะช่วง function มาเท่านั้น

$welovetopic ssi_recentTopics('20',array(), array(),'array'); 
//20 จำนวนกระทู้ที่ต้องการให้แสดง , array(4,5,6)บอร์ดที่จะไม่ให้แสดง,  array(1,2,3)บอร์ดที่จะให้แสดง และปล่อยว่าง array() แสดงทุกบอร์ด
foreach ($welovetopic as $post)
{
	
echo 
'
	
	
<table border="0" width="100%">'
;
	
	
echo 
'
	
	
<tr>
	
	
<td width="540">
	
	
<b><a href="'
$post['href'], '">'$post['subject'], '</a></b>
	
	
	
	
	
'
$txt['by'], ' '$post['poster']['link'], 
	
	
'
, !$post['is_new'] ? '' '<a href="' $scripturl '?topic=' $post['topic'] . '.msg' $post['new_from'] . ';topicseen#new" rel="nofollow"><img src="' $settings['lang_images_url'] . '/new.gif" alt="' $txt['new'] . '" /></a>''
	
	
</td>
	
	
<td width="124"align="right"><span class="virep">['
$txt['views'], ' '$post['views'],'] ['$txt['replies'], ' ',$post['replies'],']</span></td>
	
	
	
	

	
	
<td width="180"align="right">['
$post['board']['link'], ']</td> 
	
	
<td width="180"align="right">'
$post['time'], '</td>
	
	
	
	

	
	
</tr>'
;
	
echo 
'
	
	
</table>'
;
	
}
   


แล้วนำโค้ดทั้ง2ส่วนมา mix รวมกันจะได้ดังนี้
โค๊ด: [Select]
// start the "Recent Topics : welovethailand.com.

echo '
<div class="title_barIC">
<h4 class="titlebg">
<span class="ie6_header floatleft">
<a href="', $scripturl, '?action=recent"><img class="icon" src="',

$settings['images_url'], '/post/xx.gif" alt="', $txt['WeloveTh_title'], '" /></a>
',$txt['WeloveTh_title'], '
</span>
</h4>
</div>
<div class="hslice" id="recent_posts_content">
<div class="entry-title" style="display: none;">', $context['forum_name_html_safe'], ' - ',

$txt['recent_posts'], '</div>
<div class="entry-content" style="display: none;">
<a rel="feedurl" href="', $scripturl, '?action=.xml;type=webslice">', $txt

['subscribe_webslice'], '</a>
</div></div>';
echo '
<dl id="ic_recentposts" class="middletext">';       
$welovetopic = ssi_recentTopics('20',array(), array(),'array');
//20 จำนวนกระทู้ที่ต้องการให้แสดง , array(4,5,6)บอร์ดที่จะไม่ให้แสดง,  array(1,2,3)บอร์ดที่จะให้แสดง และปล่อยว่าง array() แสดงทุกบอร์ด
foreach ($welovetopic as $post)
{
echo '
<table border="0" width="100%">';
echo '
<tr>
<td width="540">
<b><a href="', $post['href'], '">', $post['subject'], '</a></b>
', $txt['by'], ' ', $post['poster']['link'], '
', !$post['is_new'] ? '' : '<a href="' . $scripturl . '?topic=' . $post['topic'] . '.msg' . $post['new_from'] . ';topicseen#new" rel="nofollow"><img src="' . $settings['lang_images_url'] . '/new.gif" alt="' . $txt['new'] . '" /></a>', '
</td>
<td width="124"align="right"><span class="virep">[', $txt['views'], ' ', $post['views'],'] [', $txt['replies'], ' ',$post['replies'],']</span></td>

<td width="180"align="right">[', $post['board']['link'], ']</td>
<td width="180"align="right">', $post['time'], '</td>

</tr>';
echo '
</table>';
}
echo '
</dl>';
// End the "Recent Topics : welovethailand.com.

ตำแหน่งการวางโค้ด
แก้ไข Themes/default ธีมปัจจุบันที่ใช้/BoardIndex.template.php
(ควรก็อปปี่ไฟล์ BoardIndex.template.php ไว้ 2 ชุดก่อนแก้ไขงาน)

ค้นหา
โค๊ด: [Select]
<?php
เติมต่อท้ายที่หา
โค๊ด: [Select]
require("SSI.php");

ตำแหน่งที่แสดง มี2ตำแหน่งให้เลือกคือ
ย้ายไปตำแหน่งด้านบน ต่อจากข่าว กับ ใช้ตำแหน่งเดิม Info Center

ถ้าต้องการตำแหน่งด้านบน ต่อจากข่าว

ค้นหา    
โค๊ด: [Select]
echo '
<div id="boardindex_table">
<table class="table_list">';

และถ้าต้องการตำแหน่งเดิม Info Center
ค้นหา

	
// Show information about events, birthdays, and holidays on the calendar.



นำโค้ดทั้ง2ส่วนที่ mix รวมกันจากด้านบนมา เติมก่อนที่หา

อาจจะ ปิดใช้งานระบบ กระทู้ล่าสุดที่แสดงผลบนหน้ารวมบอร์ดหรือไม่ก็ได้ (ถ้าไม่ปิดจะมี 2 อัน ของเดิมกับของใหม่ เหมือนของที่นี่)
admin/ปรับแต่งบอร์ด /ตั้งค่าธีมปัจจุบัน/Themes Settings/  จำนวนกระทู้ล่าสุดที่แสดงผลบนหน้ารวมบอร์ด: ใส่ 0 เพื่อปิดใช้งาน



ปรับความกว้าง ยาวที่ <table border="0" width="100%">';
และที่คอลัมน์ของแต่ละคอลัมน์ตามความเหมาะสมของแต่ละบอร์ด

<td width="540"> คอลัมน์1 หัวข้อกระทู้
<td width="124"align="right"> คอลัมน์2 อ่าน/ตอบ
<td width="180"align="right"> คอลัมน์3 รายชื่อบอร์ด
<td width="180"align="right"> คอลัมน์4 วันเวลา


สามารถใส่จำนวนที่ต้องการให้แสดง
กับบอร์ดที่ต้องการให้แสดงและไม่ต้องการให้แสดง ตามโค้ดด้านล่างนี้ Function เดียว เอาอยู่ !

$welovetopic ssi_recentTopics('20',array(), array(),'array'); 
//20 จำนวนกระทู้ที่ต้องการให้แสดง , array(4,5,6)บอร์ดที่จะไม่ให้แสดง,  array(1,2,3)บอร์ดที่จะให้แสดง และปล่อยว่าง array() แสดงทุกบอร์ด


หมายเหตุ เมื่อใส่ บอร์ดที่ไม่ให้แสดง array(4,5,6) นานๆไป Recent Topics มักจะลดจำนวนเหลือน้อยลงจนหายเกลี้ยง
อธิบายดังนี้ Recent Topics เป็นการนำบทความล่าสุดมาแสดงตามจำนวน เช่น จำนวนกระทู้ที่ต้องการให้แสดง 20 ถ้าสั่งให้แสดงทุกๆบอร์ด แม้ไม่มีกระทู้เข้ามาใหม่
บทความเก่าล่าสุดก็ยังแสดงอยู่ แต่ถ้าเมื่อไหร่มีคำสั่งให้ ไม่แสดงบอร์ดใดๆร่วมด้วย และบอร์ดที่ไม่ให้แสดงมีจำนวนกระทู้ใหม่มากกว่า บอร์ดที่แสดงในหน้ารวมกระทู้
จนมากขึ้นไปเรื่อยๆ จึงทำให้หน้ารวมกระทู้ Recent Topics ถูกลดจำนวนลงไปจนหายเกลี้ยง เพราะกระทู้ที่แสดงถูกแทนที่ด้วย20บทความใหม่ ที่ถูกไม่ให้แสดง หน้าจึงว่างเปล่า
    ยกตัวอย่าง array(4,5,6)บอร์ดที่จะไม่ให้แสดง สมุติว่าบอร์ดที่ 4,5,6 คือบอร์ดเกี่ยวกับให้ลงประกาศโฆษณาฟรี เราไม่ต้องการให้แสดงในหน้ารวมกระทู้ Recent Topics
เราให้ array(1,2,3)บอร์ดที่จะให้แสดง เป็นบอร์ดหลักที่ต้องการให้แสดงผลที่หน้ารวมกระทู้เท่านั้น แต่บังเอิญ บอร์ดหลักของเว็บเราดันมีบทความอัพเดทน้อยกว่าบอร์ดที่
ให้ลงประกาศโฆษณาฟรี จึงทำให้ บทความที่ลงประกาศโฆษณาฟรี มีจำนวนเพิ่มขึ้นเรื่อยๆจนเกินจำนวน 20 กระทู้ทีเราตั้งโชว์ไว้ ในเมื่อ Recent Topics ถูกให้โชว์กระทู้ล่าสุด
ที่ 20 กระทู้ แต่แล้ว บอร์ดที่ 4,5,6 คือบอร์ดเกี่ยวกับให้ลงประกาศโฆษณาฟรี กลับถูกงดให้แสดง ดังนั้นในหน้ารวมกระทู้ Recent Topics จึงไม่มีอะไรเหลือให้แสดงอีก
จนกว่าเราจะไปโพสท์บทความใหม่ๆ ของบอร์ดหลัก (1,2,3)บอร์ดที่จะให้แสดง เพิ่มกระทู้ใหม่ขึ้นมาจนมากกว่าบอร์ด ลงประกาศโฆษณาฟรี (บอร์ดที่จะไม่ให้แสดง) เมื่อนั้นจึงมี
บทความใหม่ๆแสดงให้เห็น นี่คือหลักของ Recent Post - Topics ถ้าต้องการแสดงแยกเดีี่ยวๆ แนะนำไม่ให้ใช้ Function Recent หรือถ้าจะใช้ต้องสั่งแสดงทุกบอร์ด
หรือไม่บอร์ดหลักของเราต้องมีกระทู้โพสท์ใหม่ๆ มากกว่าบอร์ดที่ไม่ต้องการให้แสดง


แก้ไขสีหรือไม่ก็ได้
แก้ไข index.css ของธีมที่ใช้ Themes/default ธีมที่ใช้ /css/index.css
เติมไว้ท้ายสุด
โค๊ด: [Select]
.virep {color: #666666}
*หมายเหตุ .virep {color: #666666}

เป็นสีของ  [อ่าน 0] [ตอบ 0] ถ้าไม่เติมจะใช้สีปกติของธีม*


แก้ไขชื่อไตเติ้ลใหม่
แก้ไข Themes/default/languages/Modifications.thai-utf8.php

ค้นหา
โค๊ด: [Select]
?>
วางก่อนที่หา
โค๊ด: [Select]
//Recent Topics : welovethailand.com
$txt['WeloveTh_title'] = 'หัวข้อโพสท์ล่าสุด';

ถ้าต้องการแก้ไขเปลี่ยนตำแหน่งของตัวแปร $post ให้ไปดูที่ วิธีดึง10 กระทู้ล่าสุดมาแสดงที่หน้าแรกของเว็บ
จบ วิธีทำ Recent Topics กระทู้ล่าสุดแบบไม่มี Re: SMF2.0.2 แบบฉบับ welovethailand.com
[/hide]

อื่นๆ
วิธีดึง10 กระทู้ล่าสุดมาแสดงที่หน้าแรกของเว็บ (SMF2.0.2)
SMF โชว์ 10 กระทู้ล่าสุดแบบแยกบอร์ด ดึงจากฐานข้อมูล
SMF วิธีดึงภาพแรกในกระทู้มาแสดง
[SMF] วิธีดึงภาพแรกในกระทู้มาแสดง พร้อมกระทู้และไฟล์แนบ
ดึงรูปจากไฟล์แนบมาแสดงหน้าแรก
« แก้ไขครั้งสุดท้าย: 13 พฤศจิกายน 2014, 04:50:21 โดย We Love Thailand »
สวัสดีคุณ...บุคคลทั่วไป กด Like ให้หรือยัง...
welovethailand.com welovethailand.net เรารักประเทศไทย.com

ออฟไลน์ NenaDesign

  • Jr. Member
  • **
  • กระทู้: 98
  • ชอบกด Like+ 13
  • ใช้งานล่าสุด :18 มกราคม 2016, 11:27:53
    • ของเล่นเสริมพัฒนาการ
+1 ขอบคุณมากค่ะ  :^6thx^:

[spoiler]แต่ไม่รู้คิดไปเองหรือเปล่า ว่าพอลงโค้ดเสร็จแล้ว บอร์ดช้าลง   :^19^:[/spoiler]

ออฟไลน์ NenaDesign

  • Jr. Member
  • **
  • กระทู้: 98
  • ชอบกด Like+ 13
  • ใช้งานล่าสุด :18 มกราคม 2016, 11:27:53
    • ของเล่นเสริมพัฒนาการ
สอบถามหน่อยซิคะ 

จาก
โค๊ด: [Select]
$welovetopic = ssi_recentTopics('20',array(), array(),'array');
ปรับแก้เป็นแบบนี้
โค๊ด: [Select]
$welovetopic = ssi_recentTopics('20',array(17,18,19), array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,20,21,22),'array');
วันก่อนลงเรียบร้อย กระทู้ก็แสดง 20 กระทู้ดี พอมาวันนี้เห็นค่ 4 กระทู้  :^14ngng^:

พอลองแก้จากเลข 20 เป็น 30 ก็เห็นค่ 4 กระทู้ แต่พอลองแก้เป็นเลข 2 ไม่เห็นซักกะทู้เลยค่ะ ทำยังไงดีค่ะ  :^15ngng^:


ออฟไลน์ Maxzi

  • Global Mod
  • *
  • กระทู้: 101
  • ชอบกด Like+ 49
  • เพศ: ชาย
  • ใช้งานล่าสุด :30 ธันวาคม 2014, 18:30:11
ลองแบบนี้ครับ
$welovetopic ssi_recentTopics('20',array(17,18,19), array(),'array'); 
ใส่บอร์ดที่ไม่ต้องการให้แสดงอย่างเดียว ที่เหลือปล่อยไว้

ออฟไลน์ NenaDesign

  • Jr. Member
  • **
  • กระทู้: 98
  • ชอบกด Like+ 13
  • ใช้งานล่าสุด :18 มกราคม 2016, 11:27:53
    • ของเล่นเสริมพัฒนาการ
ลองแบบนี้ครับ
$welovetopic ssi_recentTopics('20',array(17,18,19), array(),'array'); 
ใส่บอร์ดที่ไม่ต้องการให้แสดงอย่างเดียว ที่เหลือปล่อยไว้

ลองแล้วค่ะ วันนี้เหลือ 1 กระทู้  :^26sad^:

ออฟไลน์ heartsanova

  • Newbie
  • *
  • กระทู้: 3
  • ชอบกด Like+ 0
  • ใช้งานล่าสุด :16 ตุลาคม 2012, 16:03:29
  • Thanks You welovethailand.com

ออฟไลน์ onetcafe

  • Newbie
  • *
  • กระทู้: 3
  • ชอบกด Like+ 0
  • เพศ: หญิง
  • ใช้งานล่าสุด :23 มกราคม 2013, 22:00:41
  • Thanks You welovethailand.com
    • ฟังเพลงออนไลน์

ออฟไลน์ ponpe

  • Newbie
  • *
  • กระทู้: 4
  • ชอบกด Like+ 0
  • ใช้งานล่าสุด :28 พฤศจิกายน 2012, 13:53:33
  • Thanks You welovethailand.com

ออฟไลน์ dj_vayo

  • Newbie
  • *
  • กระทู้: 8
  • ชอบกด Like+ 0
  • ใช้งานล่าสุด :11 พฤศจิกายน 2012, 15:52:34
  • Thanks You welovethailand.com

ออฟไลน์ anyway

  • Newbie
  • *
  • กระทู้: 9
  • ชอบกด Like+ 1
  • ใช้งานล่าสุด :24 ธันวาคม 2012, 21:59:16
  • Thanks You welovethailand.com

ออฟไลน์ khajitsree

  • Newbie
  • *
  • กระทู้: 3
  • ชอบกด Like+ 0
  • ใช้งานล่าสุด : 3 ธันวาคม 2012, 21:00:04
  • Thanks You welovethailand.com

ออฟไลน์ nightzkung

  • Newbie
  • *
  • กระทู้: 8
  • ชอบกด Like+ 0
  • เพศ: ชาย
  • ใช้งานล่าสุด :17 ตุลาคม 2013, 10:36:33
  • Thanks You welovethailand.com
    • :: FAIRYFC ::
ขอบคุณครับ มีประโยชน์มาก  :^1great^:

ออฟไลน์ siamoverboost

  • Newbie
  • *
  • กระทู้: 3
  • ชอบกด Like+ 0
  • ใช้งานล่าสุด :13 กุมภาพันธ์ 2013, 11:17:18
  • Thanks You welovethailand.com

ออฟไลน์ 12345open

  • Newbie
  • *
  • กระทู้: 5
  • ชอบกด Like+ 0
  • ใช้งานล่าสุด : 8 มีนาคม 2013, 14:25:01
  • Thanks You welovethailand.com

ออฟไลน์ peeyoung

  • Newbie
  • *
  • กระทู้: 4
  • ชอบกด Like+ 0
  • ใช้งานล่าสุด :22 เมษายน 2013, 13:54:40
  • Thanks You welovethailand.com
ขอบคุณมากๆ ครับ
กำลังฝึกทำเว็บอยู่ครับ