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

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


ผู้เขียน หัวข้อ: ดึงรูปจากกระทู้มาโชว์ พร้อมหัวข้อ ที่หน้าแรก หรืออื่นๆ  (อ่าน 1411 ครั้ง)

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

ออฟไลน์ Auto Man

  • Administrator
  • หัวหน้าศูนย์ซ่อมสร้าง
  • *****
  • เจ้าของกระทู้
  • Joined: ก.ย. 2558
  • กระทู้: 37146
  • สมาชิกลำดับที่ : 1
  • เพศ: ชาย
  • มือผู้ให้ย่อมสูงกว่ามือผู้รับ
    • เว็บชุมชนคนรักช่างยนต์
    • อีเมล์
   ดึงรูปจากกระทู้มาโชว์ พร้อมหัวข้อ ที่หน้าแรก หรืออื่นๆ   
นำเอารูปภาพที่แนบเป็น img มาโชว์ตามที่ ที่ต้องการ เช่นหน้าแรก หรือ ส่วนบนของหน้า เป็นต้น
ที่ไฟล์ ssi.php
เติมโค้ดนี้ไปก่อน ถึงเครื่องหมาย  ?>
โค๊ด: [Select]
/**
* SSI - ZoneITpic
* @author: Expertduck
* @since : 12/4/2012 4.44
*
* ssi_zpic($boards,$num=10,$return=false,$sort='id_topic',$asc=false)
* Param  $boards : ใส่ id_board หรือ array(id_board,id_board,id_board, .... )
* Param $num : จำนวนกระทู้สูงสุดที่ดึง
* Param $return : true หรือ false ถ้าอยากให้ return ค่ากลับมาให้ใส่ true ครับ
* Param $sort : เรียงตาม คอลั่มใด (ต้องเข้าไปดูใน DB ครับ)
* Param $asc : เรียงจาก a-z น้อยไปมาก (true)  หรือ z-a มากไปน้อย (false) ครับ
 **/
function ssi_zpic($boards,$num=10,$return=false,$sort='id_topic',$asc=false)
{
   global $scripturl, $smcFunc;
   
   //Debug? error_reporting(E_ALL);
   
   if(is_numeric($boards))
      $boards = array($boards);
   else if(!is_array($boards)){
      trigger_error('$boards ต้องเป็น Array หรือ ตัวเลข');
      return;
   }
   $regex = '\[img\]([^\[]*)\[\/img\]';
   $req = $smcFunc['db_query']('','
      SELECT msg.id_topic,msg.body,msg.subject
      FROM {db_prefix}messages as msg
         INNER JOIN {db_prefix}boards AS b ON(b.id_board = msg.id_board)
      WHERE
         {query_wanna_see_board}
         AND msg.body REGEXP "'.addslashes($regex).'" != 0
         AND b.id_board IN({array_int:boards})
      ORDER BY '.$sort.' '.(!empty($asc)?'ASC':'DESC').'
      LIMIT {int:num}',
      array(
         'boards' => $boards,
         'num' => abs(intval($num))
      )
   );

   $topics = array();
   while($row = $smcFunc['db_fetch_assoc']($req))
   {
   
      if(preg_match('!'.$regex.'!',$row['body'],$match)===false)
         continue; //skip loop ไม่น่าจะเกิดขึ้นเพราะเช็คจาก SQL แล้วครั้งนึง แต่ก็กันไว้ก่อน
      
      $topics[$row['id_topic']] = array(
         'id' => $row['id_topic'],
         'subject' => htmlentities($row['subject'],ENT_QUOTES,'UTF-8'), //ป้องกัน XSS
         'pic' => htmlentities($match[1],ENT_QUOTES,'UTF-8'),
      );
      
   }
   $smcFunc['db_free_result']($req);
   
   //สำหรับ Argument $return;
   if(!empty($return))
      return $topics;
      
   if(empty($topics))
   {
      //กรณี หากระทู้มีรูปไม่เจอ
      echo 'No Topics';
      return; //ตัดการทำงาน ฟังชั่น
   }
   
   echo '
   <div class="zpic-container">';
   while($topic = array_shift($topics))
   {
      echo '
      <a class="link-topic" href="'.$scripturl.'?topic='.$topic['id'].'" title="ดูกระทู้นี้">
         <img clas="pic" src="'.$topic['pic'].'" alt="'.$topic['subject'].'" />
         <b class="subject">'.$topic['subject'].'
      [/url]';

   }

   echo '
   </div><!-- by: Zone-it -->';
   
}


  ลองเข้าไปอ่านกันที่กระทู้นี้ http://www.forum.coolhostplus.net/index.php/topic,102.0.html
« แก้ไขครั้งสุดท้าย: 01 มกราคม 2567, 15:36:50 โดย Auto Man »
สวัสดีคุณ...ผู้เยี่ยมชม  กด ❤ ถูกใจโพสท์นี้ หรือยัง...
ต้องการสมัครสมาชิก VIP สมัครได้ที่นี่...   หรือทาง Line ID: k.sonchai

ออฟไลน์ Auto Man

  • Administrator
  • หัวหน้าศูนย์ซ่อมสร้าง
  • *****
  • เจ้าของกระทู้
  • Joined: ก.ย. 2558
  • กระทู้: 37146
  • สมาชิกลำดับที่ : 1
  • เพศ: ชาย
  • มือผู้ให้ย่อมสูงกว่ามือผู้รับ
    • เว็บชุมชนคนรักช่างยนต์
    • อีเมล์
/**
* SSI - ZoneITpic
* @author: Expertduck
* @since : 12/4/2012 4.44
*
* ssi_zpic($boards,$num=10,$return=false,$sort='id_topic',$asc=false)
* Param  $boards : ใส่ id_board หรือ array(id_board,id_board,id_board, .... )
* Param $num : จำนวนกระทู้สูงสุดที่ดึง
* Param $return : true หรือ false ถ้าอยากให้ return ค่ากลับมาให้ใส่ true ครับ
* Param $sort : เรียงตาม คอลั่มใด (ต้องเข้าไปดูใน DB ครับ)
* Param $asc : เรียงจาก a-z น้อยไปมาก (true)  หรือ z-a มากไปน้อย (false) ครับ
 **/

ตัวอย่าง
<? ssi_zpic(1); ?>  ดึงกระทู้ที่มีรูปจาก board_id = 1 มาจำนวน 10 กระทู้ครับ (Default = 10 กระทู้)
<? ssi_zpic(array(1,2,9),20,false); ?>  ดึงกระทู้ที่มีรูปจาก board 1,2,9 มาจำนวน 20 กระทู้ครับ (แต่ละบอร์ดรวมกันนะครับ เรียงตาม id กระทู้น้อยไปมาก)
แบบ return values; ครับ
<?

$topics = ssi_zpic(array(1,2),20,true);
print_r($topics);
?>

สำหรับ css ที่ต้องกำกับ มี (เขียนเอาเองนะครับ ผมขี้เกียจล่ะ)
.zpic-container{ /** สำหรับ กล่องครอบ ครับ **/}
.zpic-container .link{  /** link **/ }
.zpic-container .subject{ /* subject **/}
.zpic-container .pic{ /** รูป **/ }

ตรง $topics = ssi_zpic(array(1,2),20,true);  คือ id ของบอร์ด


สร้างไฟล์ใหม่ ที่เดียวกับ ssi.php แล้วใส่โค้ดต่อไปนี้

อ้างถึง
<?
require_once('SSI.php');

$ratio = 3/4;
$width = 150;
$height = $width * $ratio;

echo '
<style type="text/css">
#zone-pic a{
   color:#000;
   text-decoration:none;
   text-align:center;
   font-size:12px;
   line-height:14px;
   display:block;
}
#zone-pic .item{
   width:150px;
   float:left;
   margin:15px;
}
#zone-pic .item .thumb{ /** css crop image **/
   width: 150px;
   height:125px;
   padding:2px;
   overflow:hidden;
   background:#fff;
   border:1px dashed #ccc;
   
}
#zone-pic .item img{ /** css trick full width aspect ratio **/
   
   width:100%;
   height:auto;
   min-height:100%;
   display:block;
}
#zone-pic .row{
   display:block;
   clear:both;
}
</style>';

$num = 10;
$links = array();
foreach(ssi_zpic(array(1,2),$num,true) as $topic)
{
   $links[] =    '
   <div class="item">
      <a class="thumb" href="'.$topic['pic'].'" title="คลิ๊กดูรูปใหญ่"><img src="'.$topic['pic'].'" alt="" />[/url]
      <a href="'.$scripturl.'?topic='.$topic['id'].'" title="">'.$topic['subject'].'[/url]
   </div>';
}

$nRow = 2;

echo '<div id="zone-pic">';
for($i=0;$i<$nRow;$i++)
{
   $row = array_splice($links,0,floor($num/$nRow));
   echo '
      <div class="row">'.implode(' ',$row).'</div>';
}
echo '</div>';

ตรง  nrow = 2 คือจำนวนแถวของรูป
ตรง  num = 10 คือจำนวนกระทู้ที่ต้องการเอามาใช้
จากนั้นก็เอาไปใส่ใน board index  เพื่อใช้งาน

ขอบคุณที่มา http://computech.co.th/webboard/index.php?topic=321.0
https://www.forum.coolhostplus.net/index.php/topic,102.0.html
« แก้ไขครั้งสุดท้าย: 01 มกราคม 2567, 15:42:35 โดย Auto Man »
สวัสดีคุณ...ผู้เยี่ยมชม  กด ❤ ถูกใจโพสท์นี้ หรือยัง...
ต้องการสมัครสมาชิก VIP สมัครได้ที่นี่...   หรือทาง Line ID: k.sonchai