นำเอารูปภาพที่แนบเป็น img มาโชว์ตามที่ ที่ต้องการ เช่นหน้าแรก หรือ ส่วนบนของหน้า เป็นต้น
ที่ไฟล์ ssi.php
เติมโค้ดนี้ไปก่อน ถึงเครื่องหมาย ?>
/**
* 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