ข่าวประชาสัมพันธ์

มาร่วมเป็นกำลังใจให้เว็บด้วยการสมัครสมาชิกวีไอพี ~~ เลือกปีที่ท่านต้องการได้โดยไม่ต้องเรียงปี ~~ ปีละ 350 บาท สมัคร 2 ปีลดเหลือ 600 บาท ~~ มีไลน์กลุ่ม VIP จำนวนหลายร้อยท่าน เอาไว้ปรึกษางานซ่อม ~~ เข้าถึงข้อมูลด้านเทคนิค ข้อมูลเชิงลึกมากมาย.....


ผู้เขียน หัวข้อ: การทำกระทู้แนะนำ หรือกระทู้น่าอ่าน ประมาณนั้น  (อ่าน 1439 ครั้ง)

0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

ออฟไลน์ Auto Man

  • Administrator
  • หัวหน้าศูนย์ซ่อมสร้าง
  • *****
  • เจ้าของกระทู้
  • Joined: ก.ย. 2558
  • กระทู้: 37967
  • สมาชิกลำดับที่ : 1
  • เพศ: ชาย
  • มือผู้ให้ย่อมสูงกว่ามือผู้รับ
    • เว็บชุมชนคนรักช่างยนต์
    • อีเมล์
อ้างอิงจากกระทู้นี้ 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 ค้นหาคำว่า
โค๊ด: [Select]
  if (!$message['approved'] && $message['member']['id'] != 0 && $message['member']['id'] == $context['user']['id'])
   echo '
        <div class="approve_post">
         ', $txt['post_awaiting_approval'], '
        </div>';

พบแล้ววางคำสั่งด้านล่างนี้ต่อท้ายไป 
                             
โค๊ด: [Select]
      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" />
                     [/url]
                     <div class="whs-rec-desc" style="margin-top: -20px;">
                        โหวตกระทู้นี้ ห้เป็นกระทู้แนะนำ
                     </div>
                  </div>';
       
         

ไฟล์ BoardIndex.template.php
 ให้ค้นหาคำว่า
โค๊ด: [Select]
/* 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.) */
 
    พบแล้วให้วางโค๊ดด้านล่างนี้ด้านบน ..
 
โค๊ด: [Select]
       // 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
และวางชุดคำสั่งนี้ลงไป

โค๊ด: [Select]
<?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 <img src="http://www.auto-nkp.com/Smileys/Emotion/wanwan022.gif" alt="&#58;&#41;" title="Smiley" class="smiley" /> 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[/url]");
}
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]}[/url] {$txt['started_by']} {$tt[1]} {$txt['in']} {$tt[2]}</div>";
   }
}
 

เซฟไว้ในโฟล์เดอร์ธีมของเรา
สุดท้ายต้องไปสร้างตารางไว้ในฐานข้อมูลด้วยครัับ


โค๊ด: [Select]
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`)
)

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

ขอบคุณมากๆ ครับ
มาจากที่นี่  http://nevikup.blogspot.com/2012/06/smf.html
« แก้ไขครั้งสุดท้าย: 23 พฤษภาคม 2559, 13:33:40 โดย Auto Man »
สวัสดีคุณ...ผู้เยี่ยมชม  กด ❤ ถูกใจโพสท์นี้ หรือยัง...
ต้องการสมัครสมาชิก VIP สมัครได้ที่นี่...   หรือทาง Line ID: k.sonchai

ออฟไลน์ Auto Man

  • Administrator
  • หัวหน้าศูนย์ซ่อมสร้าง
  • *****
  • เจ้าของกระทู้
  • Joined: ก.ย. 2558
  • กระทู้: 37967
  • สมาชิกลำดับที่ : 1
  • เพศ: ชาย
  • มือผู้ให้ย่อมสูงกว่ามือผู้รับ
    • เว็บชุมชนคนรักช่างยนต์
    • อีเมล์
การทำกระทู้แนะนำ หรือกระทู้น่าอ่าน ประมาณนั้น
« ตอบกลับ #1 เมื่อ: 23 พฤษภาคม 2559, 12:49:09 »
  • ขึ้นบน
  • ลงล่าง
  • เพิ่มเติม เทคนิคการสร้างตารางใน smf โดยใช้ PHP My Admin

    อ้างถึง
    ก็อบเท็กทั้งหมด วางในโนตเพจ
    เซฟแอส  ดูว่าดีบีเดิมเราเป็นยูทีเอฟไหม ถ้าใช่ ให้เลือกยูทีเอฟด้วย
    ตั้งชื่อ นามสกุลกรอกลงไปเลย .sql   เช่น   bot.sql

    จากนั้นเข้าพีเอชพีมายแอดมิน แล้วอิมพอร์ต  bot.sql  แค่นี้ก็ได้ละ

    ขอบคุณคำแนะนี้ จาก http://www.justusers.net/forum/index.php?topic=7475.0

    ตรงนี้มีภาพ! แต่ท่านจะมองไม่เห็น , ท่านต้อง  สมัครสมาชิก หรือ ลงชื่อเข้าระบบ


    ลองทำตามดู โดยเข้าหน้า PhpMyAdmin แล้วอิมพอรฺ์ตไฟล์เข้าไป

    ตรงนี้มีภาพ! แต่ท่านจะมองไม่เห็น , ท่านต้อง  สมัครสมาชิก หรือ ลงชื่อเข้าระบบ


    ปัญหาเกิดขึ้น แจ้งดังภาพ  ไม่รู้จะแก้ยังไง

    ตรงนี้มีภาพ! แต่ท่านจะมองไม่เห็น , ท่านต้อง  สมัครสมาชิก หรือ ลงชื่อเข้าระบบ

    « แก้ไขครั้งสุดท้าย: 23 พฤษภาคม 2559, 13:56:54 โดย Auto Man »
    สวัสดีคุณ...ผู้เยี่ยมชม  กด ❤ ถูกใจโพสท์นี้ หรือยัง...
    ต้องการสมัครสมาชิก VIP สมัครได้ที่นี่...   หรือทาง Line ID: k.sonchai

    การทำกระทู้แนะนำ หรือกระทู้น่าอ่าน ประมาณนั้น
    « ตอบกลับ #1 เมื่อ: 23 พฤษภาคม 2559, 12:49:09 »