วิธีการสร้าง การแบ่งชุดข้อมูล ใน phpbb

PHP Knowledge เป็น บอร์ดรวามความรู้ php เน้นบทความ แนวทางการเขียนโปรแกรม บันทึกกันลืม เพื่อให้สมาชิกได้เขียนความรู้ที่ตัวเองมีให้สมาชิกท่านอื่นๆ ได้ เข้ามาอ่าน และ ไว้อ่านเองกันลืมด้วย

Moderator: mindphp, ผู้ดูแลกระดาน

ภาพประจำตัวสมาชิก
Ittichai_chupol
PHP VIP Members
PHP VIP Members
โพสต์: 5410
ลงทะเบียนเมื่อ: 19/09/2018 10:33 am

วิธีการสร้าง การแบ่งชุดข้อมูล ใน phpbb

โพสต์ที่ยังไม่ได้อ่าน โดย Ittichai_chupol »

- เว็บบอร์ด phpbbเป็น เว็บบอร์ด ที่มีการติดตั้งฟังชั่นพื้นฐานที่อำนวยความสะดวกต่อ การทำงานของเว็บบอร์ดมาพร้อมการใช้งาน ตั้งแต่แรกที่ติดตั้ง อยู่โดย สามารถนำไปใช้งานได้จริงเลย โดยไม่จำเป็นที่จะต้องแก้ไข เพิ่มเติมลงไปเลย แต่ถ้าหากผู้ที่ใช้งาน ต้องที่จะทำให้เว็บบอร์ด มีความสามารถที่มากขึ้นนั้นก็สามารถปรับปรุง เพิมเติมเข้าไปได้ โดยวิธีการหลักๆ คือ การเข้าไปแก้ไข้ในโคดที่ เว็บบอร์ด phpbb ให้มาตั้งแต่เเรกเลย แต่ก็ไม่ใช้วิธีกรที่ดี สักเท่าไร ส่วนอีกวิธีกหนึ่งนั้นก็คือการ พัฒนา
ส่วนขยาย(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 -->

2.ไฟล์ php + sql เพื่อเป้นส่วนการเรียกข้อมูล จากฐานข้อมูล

โค้ด: เลือกทั้งหมด

<?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 
            }
}

3.ไฟล์ javascript เพื่อ เป็นส่วนการทำงานสำหรับจัดการการทำงาน

โค้ด: เลือกทั้งหมด


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. จะมีปุ่มที่บ่งบอกถึงจำนวนข้อมูลทั่งหมด
01-26.png
01-26.png (51.66 KiB) Viewed 1260 times
2.เมื่อกดปุ่มแล้ว จะมีการแสดงข้อมูลออกมา พร้อมปุ่มที่ระบุ จำนวนข้อมูลคงเหลือ
02-26.png
02-26.png (28.28 KiB) Viewed 1260 times
3.เหมือแสดงข้อมูลคงเหลือจนหมด ปุ่มก็ก็จะหายไป
03-26.png
03-26.png (49.5 KiB) Viewed 1260 times
แก้ไขล่าสุดโดย Ittichai_chupol เมื่อ 26/01/2019 1:26 pm, แก้ไขไปแล้ว 1 ครั้ง.
ขอให้วันนี้เป็นวันที่ดี
ภาพประจำตัวสมาชิก
mindphp
ผู้ดูแลระบบ MindPHP
ผู้ดูแลระบบ MindPHP
โพสต์: 41232
ลงทะเบียนเมื่อ: 22/09/2008 6:18 pm
ติดต่อ:

Re: วิธีการสร้าง การแบ่งชุดข้อมูล ใน phpbb

โพสต์ที่ยังไม่ได้อ่าน โดย mindphp »

ผลที่ได้เป็นแบบไหน
ติดตาม VDO: http://www.youtube.com/c/MindphpVideoman
ติดตาม FB: https://www.facebook.com/pages/MindphpC ... 9517401606
หมวดแชร์ความรู้: https://www.mindphp.com/forums/viewforum.php?f=29
รับอบรม และพัฒนาระบบ: https://www.mindphp.com/forums/viewtopic.php?f=6&t=2042
ตอบกลับโพส
  • Similar Topics
    ตอบกลับ
    แสดง
    โพสต์ล่าสุด

ผู้ใช้งานขณะนี้

สมาชิกกำลังดูบอร์ดนี้: ไม่มีสมาชิกใหม่ และบุคลทั่วไป 76