วิธีการใช้จำนวนโพสต์จากตารางอื่นมาตัดจำนวนโพสต์ของสมาชิกที่แสดงในหน้าโพสต์ ของ phpbb

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

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

User avatar
Ittichai_chupol
PHP VIP Members
PHP VIP Members
Posts: 2957
Joined: 19/09/2018 10:33 am

วิธีการใช้จำนวนโพสต์จากตารางอื่นมาตัดจำนวนโพสต์ของสมาชิกที่แสดงในหน้าโพสต์ ของ phpbb

Postby Ittichai_chupol » 07/08/2019 12:09 pm

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

ส่วนขยาย(Extension) จะทำให้ เว็บบอร์ด phpbb มีประสิทธิภาพ การทำงานที่ดีขึ้น โดยสามารถ ปรับเพิ่มเพิ่มแก้ไข้ ในส่วนต่างๆของ เว็บบอร์ด phpbb ได้ตามอิสระ ซึ่งในขั้นตอนพัฒนา ไม่จำเป้นที่จะต้องเข้าไปยุ่งเกี่ยว Code เดิมที่มีอยู่(แต่อาจจะมีบางครั่งที่ต้องเข้าไปแก้ไข้ เพิ่มเติม) นั้นก็ช่วยเราไม่ต้องกังวลกับการผิดพลาดที่อาจจะเกิดขึ้นได้เพราะหาก Code ของ เว็บบอร์ด phpbb เกิดความผิดพลาดก้อาจจะกระทบต่อการทำงานส่วนอื่นๆ ด้วย โดยการสร้าง Extension นั้นก็มีวิธีการพัฒนาที่ไม่ซับซ่อนมาก เพียงแต่จะมีเพียงการทำงานที่จะต้องเป็นไปตามที่เราต้องการเท่านั้น ที่จะยากนิดหน่อย

- ซึ่งทั้งนี้เราสามารถที่จะพัฒนา ส่วนขยาย(Extension) ได้ง่ายมากขึ้นโดยการเรียกใช้งาน Event ที่ phpbb นั้นมีมาใช้งานมายอยู่เเล้ว ซึ่งสามารถไปหาดูได้จาก ที่นี้

- โดยผมจะมาเสนอ Event ช่วยให้ผู้ที่กำลังสนใจศึกษาการพัฒนา ส่วนขยาย(Extension) ของ phpbb สำหรับการปรับเปลี่ยนผมการแสดงในหน้าโพสต์ มาให้ดูกันนะครับ นั้นก็คือการที่จะปรับเปลี่ยนจำนวนโพสต์ทั้งหมดของสมาชิก โดยการนำข้อมูลจาก อีก หนึ่งตารางมาลบ ครับ โดยมีวิธีการ ดังนี้


1.เราต้องหา Event ที่จะดึงข้อมูลมาข้อมูลแสดงหน้าโพสต์ โดยจะต้องไมีใช้ Even ที่ไม่มีการ วน loop ซึ่งผมก็ใช้ Eventที่ชื่อว่า Event

Code: Select all

viewtopic_modify_post_data


2.จากนั้นก็นำว่าสร้างเป็น function ดังนี้

Code: Select all

public function viewtopic_modify_post_data($event) {

โตดในข้อ 3.

}


3.ก็เขียนโคดใส่เข้าไปดังนี้

Code: Select all

     
            $user_id_s = array_keys($event['user_cache']);  //สร้างตัวแปรมาเก็บค่า key ของ array หรือก็คือ user_id
                    $user_array = $event['user_cache']; //สร้างตัวแปรมาแทน $event['user_cache']
                    $sql_ray = array(
                        'SELECT' => 'count(p.user_id) as count_post ,p.user_id ',  // Query ข้อมูลตามที่ต้องการ
                        'FROM' => array(
                            $this->table_prefix . 'anonymous' => 'p', // เลือกตารางที่ต้องการ
                        ),
         
                        'WHERE' => ' p.user_id  IN  (' . implode(',', $user_id_s) . ')' . ' GROUP BY p.user_id ', //กำหนดเงือนไข
                    );
                    $sql = $this->db->sql_build_query('SELECT', $sql_ray);
                    $result = $this->db->sql_query($sql);
                    $user_post = array(); //สร้างตัวแปร array
                    while ($row = $this->db->sql_fetchrow($result)) {
                        $user_post[] = $row; //เก็บข้อมูลที่ได้จากการ Query ลงใน ตัวแปร array
                    }

                    foreach ($user_post as $data) { //วนค่า array ที่ได้มาจากการ Query
                        if ($user_array[$data['user_id']]) {  //ตรวจสอบ user_id เพื่อจะได้ที่จะไปปรับเปลี่ยนได้ถูก user
                            $user_array[$data['user_id']]['posts'] = $user_array[$data['user_id']]['posts'] - $data['count_post'];  //แทนค่า จำนวนโพสต์เดิมที่มากับ event โดยการใช้งานจำนวนเดิม ลบ ก้วยจำนวนใหม่ที่หาได้
                        }
                    }
                    $event['user_cache'] = $user_array;  //ส่งค่าที่ได้ได้ไปแทน เพือแสดงใน event
     



ก่อนจะใช้งาน Event นี้

Selection_999(1887).png


หลังใช้งาน Event นี้

Selection_999(1888).png

Return to “PHP Knowledge”

Who is online

Users browsing this forum: No registered users and 24 guests