ส่วนขยาย(Extension) มาใช้งานแทน ซึ่งจะเป็นวิธีการที่ดี ที่สุด เพื่อเราสามารถที่เขียนแยกส่วนการทำงานออกมาจากการการทำงานหลักได้ ทำให้ไม่เกิดความเสียหายมากหนักกับส่วนการทำงานหนก หากมีปัญหา
- ในการพัฒนา ส่วนขยาย(Extension) สำหรับใช้ใน เว็บบอร์ด phpbb มีวิธีการสร้างอยู่ 2 ส่วนรูปแบบ ก็คือ สร้าง แบบ event กับ controller ซึ่งทั้ง 2 แบบนี้จะมีความต่างกันที่ส่วนการแสงผล กับ ส่วนการทำงาน
- โดยในส่วนของ event จะเป็นการทำงานโดยแทรกส่วนแสดงผลไว้ตาม event template ที่มีอยู่แล้ว เป็นพื้นฐานตอนติดตั้ง เว็บบอร์ด phpbb แต่ controller จะเป้นการแสดงผลโดยการสร้างหน้าแสดงผลมาใช้แสดงผลเฉพาะส่วนที่ต้องการโดยเฉพาะ
- ในการทำงานของ ส่วนขยาย(Extension) นั้น จะใช้ภาษาคอมพิวเตอร์หลักเลยก็คือ phpbb sql เป้นหลัก แต่ก็ยังเพียงพอต่อการทำงาน เพราะการที่จะให้ประสิทธิของการทำงาน เว็บบอร์ด phpbb มีดีขึ้น โดยภาษาคอมพิวเตอร์อื่นๆที่มาช่วยให้ เว็บบอร์ด phpbb ก็คือ javascript ajex และอื่นๆ อีกมากมาย โดยเหล่าภาษาคอมพิวเตอร์เหล่าบางครั้งจำเป็นต้องเอาใช้งานร่วมกันเพื่อให้การทำงาน สมบูรณ์ ขึ้น เช่นการที่จะแบ่งข้อมูลออกเป็น ชุดๆ นั้นเอง
การเเบ่งข้อมูลออกเป็นชุดนั้น คือการที่ทำการแดสงข้อมูลออกมาตามจำนวนที่เราต้องการ เพทชื่อไม่ไให้ มีการแดสงข้อมูลออกมาทั้ง เพราะในบางครั่งข้อมูลก้มีมากเกินไป นั้นจะทำให้เกินความลำบากต่อการใช้งาน และการตรวจสอบข้อมุล แต่หากเราสามารถแบ่งข้อมุลออกมา เป้นชุดๆ ช่วงๆ ได้ก็จะทำให้ สะดวกต่อการตรวจสอบข้อฒุลมากขึ้น
โดยวันนี้ ผมจะมาแนะนำ การแบ่งข้อมุลออกเป็นชุด เพื่อใช้ใน เว็บบอร์ด phpbb
**ขั้นตอนการพัฒนา**
1.สร้าง ไฟล์ html ขึ้นมา 2 ไฟล์
- สำหรับแสดงปุ่มกดเพื่อแบ่งส่วนการแสดง
โค้ด: เลือกทั้งหมด
<!DOCTYPE html>
<html>
<style>
table,th,td {
border : 1px solid black;
border-collapse: collapse;
}
th,td {
padding: 5px;
}
</style>
<body>
<div align="center" class="show-sub-comment-btn"> <!-- IF postrow.SUM != 0 -->
<div class="navbar" role="navigation">
<div class="inner">
<button type="button" value="ALFKI" name="customers" data-url="{postrow.SUB_SHOW}" data-post-id="{postrow.POST_ID}" data-sum="{postrow.SUM}" data-start="0" class="show-sub-somment" >แสดงความคิดเห็นย่อย({postrow.SUM})</button>
<br>
</div>
</div> <!-- ENDIF -->
</div>
<div id="txtHint{postrow.POST_ID}"></div>
<br>
</body>
</html>
โค้ด: เลือกทั้งหมด
<!-- BEGIN block -->
{block.SUB_COM_TEXT}
{block.POST_TIME}
{block.USER_NAME}
<!-- END block -->
โค้ด: เลือกทั้งหมด
<?php
namespace mindphp\m_sub_comment\controller;
use Symfony\Component\DependencyInjection\Container;
class main {
public function __construct(\phpbb\config\config $config, \phpbb\db\driver\driver_interface $db, \phpbb\template\template $template, \phpbb\user $user, \phpbb\controller\helper $helper, Container $phpbb_container, \phpbb\request\request $request, \phpbb\auth\auth $auth, \phpbb\pagination $pagination, $table_prefix, $phpbb_root_path, $php_ext, \mindphp\m_sub_comment\controller\notifyhelper $notifyhelper) {
$this->config = $config;
$this->db = $db;
$this->template = $template;
$this->user = $user;
$this->helper = $helper;
$this->phpbb_container = $phpbb_container;
$this->request = $request;
$this->auth = $auth;
$this->pagination = $pagination;
$this->table_prefix = $table_prefix;
$this->phpbb_root_path = $phpbb_root_path;
$this->php_ext = $php_ext;
$this->notifyhelper = $notifyhelper;
}
function base($action = '', $post = 0 ,$start = 0) {
$sta = $start * 5 ; // กำหนดค่าให้กับจุดเริ่มต้นข้อมูล
$sql_array = array(
'SELECT' => '*',
'FROM' => array(
$this->table_prefix . 'sub_comment' => 's',
),
'LEFT_JOIN' => array(
array(
'FROM' => array(TOPICS_TABLE => 't'),
'ON' => 's.topic_id = t.topic_id',
),
array(
'FROM' => array(POSTS_TABLE => 'p'),
'ON' => 's.post_id = p.post_id',
),
array(
'FROM' => array(USERS_TABLE => 'u'),
'ON' => 's.user_id = u.user_id',
)
),
'WHERE' => 's.post_id = ' . $post,
'ORDER_BY' => 's.post_id ASC',
);
$sql = $this->db->sql_build_query('SELECT', $sql_array);
$result = $this->db->sql_query_limit($sql, 5, $sta); //กำหนดจำนวนข้อมูลที่จะแสดง และจุดเริ่มต้นข้อมุล
while ($data = $this->db->sql_fetchrow($result)) {
// print_r($data);exit();
$this->template->assign_block_vars('block', array(
'SUB_COM_TEXT' => $data['sub_comment_text'],
'POST_TIME' => $this->user->format_date($data['sub_time']),
'USER_NAME' => $data['username'],
)),
));
}
return $this->helper->render('show_sub_comment.html'); //ส่งค่าไป html
}
}
โค้ด: เลือกทั้งหมด
jQuery(function ($) {
$('.show-sub-somment').click(function () {
var post_id = $(this).attr('data-post-id'); //รับค่า id
var url = $(this).attr('data-url'); //รับค่า url
var start = $(this).attr('data-start');
var arr = url.split('/');
arr[arr.length - 1] = start; //ตัดค่า url
var sum = $(this).attr('data-sum');
var sub = new XMLHttpRequest();
var t = this;
console.log(arr.join('/'));
$(this).attr('data-start', Number(start) + 1); //กำหนดตำแน่งที่จะเป็นจุดเริ่ม
var res = sum - 5; //นำข้อมูลทั้งหมดมาลบกับ จำนวนที่จะแสดง เพื่อตรวจสอบว่ายังมีข้อฒุลอีกหรือไม
$(this).attr('data-sum', res);
sub.onreadystatechange = function () {
document.getElementById("txtHint" + post_id).innerHTML = this.responseText;
$('.show-sub-somment').html('แสดงความคิดเห็นย่อย(' + res + ')'); //แสดงปุ่มพร้อมูลข้อมูลที่เหลือ
if (sum < 5) {
$(t).closest('.show-sub-comment-btn').hide(); //ปุ่มจะหายไปหากไม่ข้อมุลเหลือ
}
};
sub.open("GET", arr.join('/'), true); //ส่งค่าไปยัง php เพื่อเรียกข้อมุล
sub.send();
});
});
1. จะมีปุ่มที่บ่งบอกถึงจำนวนข้อมูลทั่งหมด
2.เมื่อกดปุ่มแล้ว จะมีการแสดงข้อมูลออกมา พร้อมปุ่มที่ระบุ จำนวนข้อมูลคงเหลือ
3.เหมือแสดงข้อมูลคงเหลือจนหมด ปุ่มก็ก็จะหายไป