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



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

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

กุมภาพันธ์ 24, 2016, 20:03:14
อ่าน 5249 ครั้ง

CoolhostPlus

  • *****
  • Information ออฟไลน์
  • เริ่มโตขึ้น
  • เจ้าของเว็บ
  • กระทู้: 105
  • คะแนน : 10001
    • ดูรายละเอียด
    • www.coolhostplus.net
นำเอารูปภาพที่แนบเป็น 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 '<b>No Topics</b>';
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'].'</b>
</a>';

}

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

}

/**
* 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="" /></a>
      <a href="'.$scripturl.'?topic='.$topic['id'].'" title="">'.$topic['subject'].'</a>
   </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