ryuozero Site Admin
เข้าร่วม: 13 Jul 2005 ตอบ: 1145
|
ตอบเมื่อ: Mon Dec 10, 2007 7:36 am เรื่อง: โชวหน้าบอร์ด |
|
|
พอเขียนโค้ด php ได้ไหมล่ะ
อันนี้ที่ทำคือเขียน query เองนะ ดูจากโครงสร้างตารางของ phpbb
โดยหลักๆ ก็คือ
- ตาราง phpbb_topics จะรายละเอียดของ topic แบบ id , บอร์ดไหน, ชื่อหัวข้อ, โพสต์วันที, มีคนอ่านกี่คน, มีคนโพสต์ (ตอบ) กี่คน (แต่ไม่มีรายละเอียด content ในกระทู้นั้นนะ)
- ตาราง phpbb_posts จะเก็บรายละเอียดของการโพสต์แต่ละครั้ง รวมทั้งการโพสต์เปิดกระทู้ครั้งแรกด้วย มันจะมีข้อมูลที่ต้องการดึงคือ กระทู้นี้โพสต์ด้วย user ท่านไหน ถ้าเป็นสมาชิกบอร์ดก็จะขึ้นเป็น poster_id ต้องไปดึงรายละเอียดจากตาราง phpbb_users อีกที แต่ถ้าไม่ใช่สมาชิกจะขึ้นเป็นชื่อที่ post_username
- ตาราง phpbb_users อันนี้เก็บรายชื่อสมาชิกบอร์ด
พอเห็นโครงสร้างโดยคร่าวๆ ก็ทำ query โดยเชื่อมต่อข้อมูลของแต่ละตารางเข้าด้วยกัน
ก็จะได้เป็น query ตัวนี้
โดยให้มันเรียงตาม id ของการโพสต์ล่าสุด >> order by T.topic_last_post_id desc
และให้แสดงแค่ 10 record >> limit 10
Code:
$qboard='select T.topic_id, T.topic_title, U.username, T.topic_time, T.topic_replies, T.topic_poster, P.post_username, T.topic_views, T.topic_replies
from phpbb_topics as T
left join phpbb_posts as P on T.topic_first_post_id=P.post_id
left join phpbb_users as U on U.user_id=T.topic_poster
order by T.topic_last_post_id desc limit 10';
อันนี้เราจะได้ข้อมูลสำหรับ column Topic, Post, Read/Reply
--------------------------------------------------------------------------------
ทีนี้เราจะยังขาดข้อมูลอีกสองส่วนคือ วันที่โพสต์ตอบล่าสุดและคนที่โพสต์ตอบคนท้ายสุด
ส่วนนี้เราก็ต้องดึงจากตาราง phpbb_post โดยให้ดึงเฉพาะอันล่าสุดของแต่ละ topic ก็จะใส่ query อันนี้ไว้ใน loop ของตัวแรก
Code:
$qboard2='select U.username, P.post_time, P.poster_id, P.post_username
from phpbb_posts as P
left join phpbb_users as U on U.user_id=P.poster_id
where P.topic_id='.$rowb[0].' order by P.post_time desc limit 1';
------------------------------------------------------------------------------
อันนี้คือโค้ดเต็มๆ
ก็เอาไปแก้ไขตามสมควรละกัน
Code:
<?
$qboard='select T.topic_id, T.topic_title, U.username, T.topic_time, T.topic_replies, T.topic_poster, P.post_username, T.topic_views, T.topic_replies
from phpbb_topics as T
left join phpbb_posts as P on T.topic_first_post_id=P.post_id
left join phpbb_users as U on U.user_id=T.topic_poster
order by T.topic_last_post_id desc limit 10';
$rboard=mysql_query($qboard, $db) or die("Error".mysql_error());
?>
<table width="470" align="center">
<tr>
<td align="center">Topic</td>
<td align="center">Post</td>
<td align="center">Rd/Rply</td>
<td align="center">Reply</td>
<td align="center">Date</td>
</tr>
<?
while ($rowb=mysql_fetch_array($rboard)) {
echo '<tr>';
//echo '<td>'.$rowb[0].'</td>';
echo '<td><a href="board/viewtopic.php?t='.$rowb[0].'" target="_blank">'.substr($rowb[1], 0, 100).'</a></td>';
if($rowb[5]==-1) echo '<td><strong>'.$rowb[6].'</strong></td>';
else echo '<td><strong>'.$rowb[2].'</strong></td>';
echo '<td>'.$rowb[7].'/'.$rowb[8].'</td>';
if ($rowb[4]!=0) {
$qboard2='select U.username, P.post_time, P.poster_id, P.post_username
from phpbb_posts as P
left join phpbb_users as U on U.user_id=P.poster_id
where P.topic_id='.$rowb[0].' order by P.post_time desc limit 1';
$rboard2=mysql_query($qboard2, $db);
$rowb2=mysql_fetch_array($rboard2);
if($rowb2[2]==-1) echo '<td><strong>'.$rowb2[3].'</strong></td>';
else echo '<td><strong>'.$rowb2[0].'</strong></td>';
echo '<td>'.date("d.m.y", $rowb2[1]).' </td>';
}
else {
echo '<td>N/A</td>';
echo '<td>'.date("d.m.y", $rowb[3]).'</td>';
}
echo '</tr>';
}
?>
</table>
------------------------------------------------------------------------------------
1. error ตรง $db หรือเปล่า
$db มันมาจาก
Code:
$host="localhost";
$user="root";
$pass="";
$db=mysql_connect ($host,$user,$pass) or die ("Error!");
mysql_select_db("mydb");
2. มันขึ้นอยู่กับว่าตั้ง prefix ให้ตารางขึ้นต้นด้วย phpbb_ หรือเปล่าด้วย
เพราะว่าที่ใช้อยู่ก็ปล่อยให้ใช้ phpbb_ ตามค่า default ของมัน
มันเป็นคำสั่งติดต่อฐานข้อมูลแหละ
ก็แก้ไข
- ชื่อฐานข้อมูลที่ต้องการติดต่อ
- ชื่อ username
- password ของ username นั้น
ให้ตรงกับฐานข้อมูลที่ใช้อยู่เท่านั้นเอง
Code: |
$dbhost = 'localhost'; // บรรทัดนี้ึึคือเรียกฐานข้อมูลจากเครื่องไหน
$dbname = 'database'; //บรรทัดนี้ใส่ชื่อฐานข้อมูลที่ลง phpbb
$dbuser = 'root'; // บรรทัดนี้ใส่ username
$dbpasswd = ''; // บรรทัดนี้ใส่ password
$db=mysql_connect ($dbhost,$dbuser,$dbpasswd) or die ("Error!");
mysql_select_db("$dbname"); |
--------------------------------------------------------------------------------------------------------------------------
เอาแบบนี้ก็ได้ เรียกตัวแปรกจาก config.php ของ phpbb
ใส่ path ที่ include ให้ถูกละกัน
Code:
<?
include("phpbb/config.php"); // ใส่ path ตรงนี้ให้ถูก
$db=mysql_connect ($dbhost,$dbuser,$dbpasswd) or die ("Error!");
mysql_select_db("$dbname");
$qboard='select T.topic_id, T.topic_title, U.username, T.topic_time, T.topic_replies, T.topic_poster, P.post_username, T.topic_views, T.topic_replies
from '.$table_prefix.'topics as T
left join '.$table_prefix.'posts as P on T.topic_first_post_id=P.post_id
left join '.$table_prefix.'users as U on U.user_id=T.topic_poster
order by T.topic_last_post_id desc limit 10';
$rboard=mysql_query($qboard, $db) or die("Error".mysql_error());
?>
<table width="470" align="center">
<tr>
<td align="center">Topic</td>
<td align="center">Post</td>
<td align="center">Rd/Rply</td>
<td align="center">Reply</td>
<td align="center">Date</td>
</tr>
<?
while ($rowb=mysql_fetch_array($rboard)) {
echo '<tr>';
//echo '<td>'.$rowb[0].'</td>';
echo '<td><a href="board/viewtopic.php?t='.$rowb[0].'" target="_blank">'.substr($rowb[1], 0, 100).'</a></td>';
if($rowb[5]==-1) echo '<td><strong>'.$rowb[6].'</strong></td>';
else echo '<td><strong>'.$rowb[2].'</strong></td>';
echo '<td>'.$rowb[7].'/'.$rowb[8].'</td>';
if ($rowb[4]!=0) {
$qboard2='select U.username, P.post_time, P.poster_id, P.post_username
from '.$table_prefix.'posts as P
left join '.$table_prefix.'users as U on U.user_id=P.poster_id
where P.topic_id='.$rowb[0].' order by P.post_time desc limit 1';
$rboard2=mysql_query($qboard2, $db);
$rowb2=mysql_fetch_array($rboard2);
if($rowb2[2]==-1) echo '<td><strong>'.$rowb2[3].'</strong></td>';
else echo '<td><strong>'.$rowb2[0].'</strong></td>';
echo '<td>'.date("d.m.y", $rowb2[1]).' </td>';
}
else {
echo '<td>N/A</td>';
echo '<td>'.date("d.m.y", $rowb[3]).'</td>';
}
echo '</tr>';
}
?>
</table> |
|
ryuozero Site Admin
เข้าร่วม: 13 Jul 2005 ตอบ: 1145
|
ตอบเมื่อ: Mon Dec 10, 2007 8:02 am เรื่อง: |
|
|
Topics Anywhere
http://www.phpbb.com/phpBB/viewtopic.php?t=72782
http://www.afsvlaanderen.be/topics_anywhere/download.php
ตอนนี้ ที่แก้ไว้ มี
- Mod Attath อัพโหลดไฟล์
- Super Quick Reply ตอบกลับแบบด่วนจี๋
- Member Online, Offline & Hidden แสดงสถานะสมาชิก
- Gallery Album Mod แกลเลอรรี่รูป
- Topic AnyWhere แสดงกระทู้ล่าสุด
- Today at/ Yesterday at อย่างข้างบน
โหลดได้ที่ http://www.traincenter-kk.com/mc/phpBB.rar
วิธีติดตั้งค่อนข้างจะยาก ต้องรันคำสั่ง SQL ด้วย ถ้าใครใช้ phpMyAdmin เป็น คงไม่มีปัญหา
ติดตั้งบอร์ด จากนั้นรัน Attath Mod ต่อเลยนะคับ
Attath Mod. ::
เรียกรันโดย http://www.yourdomain.com/phpBB/install/mod_table_inst.php
เมื่อรันเสร็จแล้วให้ลบโฟลเดอร์ install กับ Contrib เลยนะครับ
ตัวที่ 2 คือ Super Quick Reply :: คำสั่ง SQL รันใน phpMyAdmin จะง่ายที่สุด
อ้างอิงจาก:
ALTER TABLE phpbb_users ADD user_show_quickreply TINYINT(1) DEFAULT '1' NOT NULL;
ALTER TABLE phpbb_users ADD user_quickreply_mode TINYINT(1) DEFAULT '1' NOT NULL;
ALTER TABLE phpbb_users ADD user_open_quickreply TINYINT(1) DEFAULT '1' NOT NULL;
UPDATE phpbb_users SET user_show_quickreply=0 WHERE user_id=-1;
UPDATE phpbb_users SET user_quickreply_mode=0 WHERE user_id=-1;
UPDATE phpbb_users SET user_open_quickreply=0 WHERE user_id=-1;
INSERT INTO phpbb_config (config_name, config_value) VALUES ('allow_quickreply', '1');
INSERT INTO phpbb_config (config_name, config_value) VALUES ('anonymous_show_sqr', '0');
INSERT INTO phpbb_config (config_name, config_value) VALUES ('anonymous_sqr_mode', '0');
INSERT INTO phpbb_config (config_name, config_value) VALUES ('anonymous_open_sqr', '0');
ตัวที่ 3 คือ Gallery Album ตัวนี้ต้องเรียกรันโดย
http://www.yourdomain.com/phpBB/album_db_install.php
จากนั้นให้ลบไฟล์ album_db_install.php และ album_mysql.sql ทิ้ง
ส่วน Topics_Anywhere เรียกใช้งานโดย
http://www.yourdomain.com/phpBB/topics_anywhere.php
จากนั้นก็ก๊อปปี้โค้ดที่โปรแกรมสร้างให้ ไปแปะหน้าที่ต้องการได้เลยคับ
ถ้ามีข้อสงสัยก็โพสต์ไว้ได้คับ ดี ไม่ดียังไง บอกด้วยนะครับ |
|
ryuozero Site Admin
เข้าร่วม: 13 Jul 2005 ตอบ: 1145
|
ตอบเมื่อ: Tue Jul 15, 2008 2:19 am เรื่อง: |
|
|
เอาโค๊ดนี้ไปดู Save ชื่อ show.php
...................
<?
include("config.php"); // ใส่ path ตรงนี้ให้ถูก
$db=mysql_connect ($dbhost,$dbuser,$dbpasswd) or die ("Error!");
mysql_select_db("$dbname");
$qboard='select T.topic_id, T.topic_title, U.username, T.topic_time, T.topic_replies, T.topic_poster, P.post_username, T.topic_views, T.topic_replies
from '.$table_prefix.'topics as T
left join '.$table_prefix.'posts as P on T.topic_first_post_id=P.post_id
left join '.$table_prefix.'users as U on U.user_id=T.topic_poster
order by T.topic_last_post_id desc limit 12';
$rboard=mysql_query($qboard, $db) or die("Error".mysql_error());
?>
<table width="100%" align="center">
<tr>
<td class="header">หัวข้อ</td>
<td class="header">ผู้โพส</td>
<td class="header">ดู/ตอบ</td>
<td class="header">ผู้ตอบ</td>
<td class="header">วันที่</td>
</tr>
<?
while ($rowb=mysql_fetch_array($rboard)) {
echo '<tr>';
//echo '<td>'.$rowb[0].'</td>';
echo '<td><a href="ryuozero-ftopic.html'.$rowb[0].'" target="_blank">'.substr($rowb[1], 0, 100).'</a></td>';
if($rowb[5]==-1) echo '<td><strong>'.$rowb[6].'</strong></td>';
else echo '<td><strong>'.$rowb[2].'</strong></td>';
echo '<td>'.$rowb[7].'/'.$rowb[8].'</td>';
if ($rowb[4]!=0) {
$qboard2='select U.username, P.post_time, P.poster_id, P.post_username
from '.$table_prefix.'posts as P
left join '.$table_prefix.'users as U on U.user_id=P.poster_id
where P.topic_id='.$rowb[0].' order by P.post_time desc limit 1';
$rboard2=mysql_query($qboard2, $db);
$rowb2=mysql_fetch_array($rboard2);
if($rowb2[2]==-1) echo '<td><strong>'.$rowb2[3].'</strong></td>';
else echo '<td><strong>'.$rowb2[0].'</strong></td>';
echo '<td>'.date("d.m.y", $rowb2[1]).' </td>';
}
else {
echo '<td>N/A</td>';
echo '<td>'.date("d.m.y", $rowb[3]).'</td>';
}
echo '</tr>';
}
?>
ลองดูนะว่าใช้ได้ไหม แต่ใช้กับ phpbb รุ่นเก่าได้
soce |
|
ryuozero Site Admin
เข้าร่วม: 13 Jul 2005 ตอบ: 1145
|
ตอบเมื่อ: Tue Jul 15, 2008 2:28 am เรื่อง: อีกแบบ |
|
|
Code: |
<?
// ################################################
// โปรแกรมโชว์กระทู้ตามจำนวนที่ต้องการ (พัฒนาต่อจาก BallkunG)
//
// ไฟล์นี้ผมเอาโค๊ดที่ BallkunG เคยโพสไว้มาปรับปรุงใหม่ให้ใช้งานง่ายขึ้น
// และให้มีความใกล้เคียงกับ ตัวเวปบอร์ด มากที่สุด และให้สอดคล้องกับ Show10.php
// ของพี่แสนด้วยครับ..
//
// งานนี้ต้องขอขอบคุณทั้ง พี่แสน และน้อง BallkunG ด้วย โฮะ โฮะ โฮะ
// ################################################
// การนำไปใช้ครับ ก็เอาโค้ดตรงนี้ไปแปะไว้หน้าที่ต้องการเลยครับ สังเกตบรรทัด include ดี ๆ ก่อนนะครับ ใส่ path ที่อยู่ของสคริปต์ให้ถูกด้วยล่ะ
// include("./webboard/show10.php");
// showTop(10);
//
// อ่านวิธีการติดตั้งโปรแกรมโชว์กระทู้หน้าแรกที่ไฟล์ โชว์กระทู้หน้าแรก.txt
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-874">
<style type=text/css>
body {font-family : MS Sans Serif; font-size : 10pt; color : #000000;}
td {font-size : 10pt; font-family : MS Sans Serif; color : #000000;}
.size3 {font-size : 12pt; font-family : MS Sans Serif;}
A:link {text-decoration: none; color: blue }
A:visited {text-decoration: none; color: #6495ED }
A:active {text-decoration: none; color: blue }
A:hover {text-decoration: none; color: red }
</style>
</head>
<?
function showTop($NumShow) {
// พาธของเว็บบอร์ด (แก้ไขให้ตรงกับพาธเวปบอร์ดที่คุณใช้ แต่ถ้าตั้งเป็น webboard อยู่แล้วก็ไม่ต้องแก้อะไรเลย)
$Path = "./webboard"; // แก้ไขจุดนี้เพียงจุดเดียว ก็เกินพอ
include("$Path/config.inc.php");
// อ่านข้อมูลจาก "ไฟล์หัวข้อคำถาม"
if(file_exists("$Path/$fileQuestion")) { //ตรวจสอบว่ามีไฟล์นี้อยู่หรือไม่
$datawb = file("$Path/$fileQuestion") ; // $fileQuestion อยู่ในไฟล์ Config.inc.php
// ถ้าจำนวนที่ต้องการแสดง มากกว่า จำนวนคำถามที่มี ให้มีค่าเท่ากับ จำนวนคำถามที่มี
if($NumShow > sizeof($datawb)) $NumShow=sizeof($datawb);
// วนรอบขอข้อมูล
for ( $i=0 ; $i<$NumShow ; $i++ ){
// แกะออกมาทีละเรคคอร์ด (แยกข้อมูลในแต่ละบรรทัด ออกเป็นฟิลด์ย่อย)
list ( $numQuestion , $Question , $Name , $Date ) = explode ( "|X|" , $datawb[$i] ) ;
// เพิ่มเลข ศูนย์ หน้าหมายเลขคำถาม 4 ตัว
$No = sprintf("%04d",$numQuestion);
// ถ้าคำถามยาวกว่า 45 ตัวอักษร ให้ตัดเหลือแค่ 45 ตัว
if(strlen($Question)>45) {
// จำกัดความยาวของกระทู้ที่ 45 ตัวอักษร
$Question = substr($Question,0,45)."...";
}
// ถ้าชื่อผู้ตั้งคำถามยาวกว่า 10 ตัวอักษร ให้ตัดเหลือแค่ 10 ตัว
if(strlen($Name)>10) {
// จำกัดความยาวของชื่อที่ 10 ตัวอักษร
$Name = substr($Name,0,10)."..";
}
// วนลูปอ่านข้อมูลในไฟล์คำตอบ แล้วหาจำนวนคำตอบ ** (ที่แท้จริง) ** ทั้งหมด
$fileReply = "$Path/$dataDir/R$numQuestion.txt";
$countR=0; // เป็นตัวบอกว่ามีจำนวนคนตอบกี่คน กำหนดเป็นศูนย์ก่อน
if(file_exists($fileReply)) {
$Reply = file($fileReply);
for ($j=0 ; $j<sizeof($Reply) ; $j++) {
// แยกข้อมูลในแต่ละบรรทัด ออกเป็นฟิลด์ย่อย
$chk = explode("||",$Reply[$j]);
// ถ้าฟิลด์ที่ 0 ของข้อมูลที่แบ่งออกมา เท่ากับ "IS_reply" (ตัวแบ่งหมายเลขคำถาม) ให้เพิ่มค่า $countR
if(substr($chk[0],0,8) == "IS_reply"){ $countR++; }
}// จบลูป for j
}//จบ if
// วนลูปอ่านข้อมูลหาจำนวนผู้เข้าชม และวันที่ล่าสุดที่ตอบคำถาม
$fileVisitor = "$Path/$dataDir/$numQuestion.dat";
if(file_exists($fileVisitor)) {
$lineVisitor = file($fileVisitor);
$chkVisitor = explode("||",$lineVisitor[0]); // แยกข้อมูลในแต่ละบรรทัด ออกเป็นฟิลด์ย่อย
$ReplyDate = $chkVisitor[2]; //วันที่ตอบคำถามล่าสุด
}//จบ if
// กำหนดภาพ icon หน้าหมายเลขกระทู้
// ถ้าต้องการให้ icon ของคำถามฮอต แสดงที่จำนวนคนตอบ ที่เท่าไหร่ก็เปลี่ยนตัวเลขเองนะครับ (ในที่นี้คือตอบตั้งแต่ 10 คนขึ้นไป)
if($ReplyDate!="-") {
$icon = ($countR>=10) ? "<img src='$Path/pic/hotfd.gif'>" : "<img src='$Path/pic/openfd.gif'>";
}
else {
$icon = ($Date==$mdate) ? "<img src='$Path/pic/newfd.gif'>" : "<img src='$Path/pic/closefd.gif'>";
}
// พร้อมแล้ว ลุยโลด (แสดงคำถาม)
echo "$icon <font color=#666666>$No</font> <a href='$Path/view.php?No=$numQuestion' target=\"_blank\">$Question</a> <font color='#666666'>$Name [$Date]</font> :: (<font color=red>$countR</font>)<br>";
}// จบ for ครับ
}else { // ถ้าไม่มีไฟล์หัวข้อคำถาม
echo "<br><br><font color=red class=size3><b>\n";
echo "<p align=center>ยังไม่มีใครตั้งคำถามเลยครับ<br></p></b>\n";
echo "</font> <br><br>\n\n";
}
}// จบส่วนของฟังก์ชั่น
?>
</html> |
http://smf.rcweb.net/index.php?topic=982.0 |
|