วิธีการเพิ่มเงือนไข ของ Where เพื่อไม่ให้มีการแสดงโพสที่มีอยู่ในตารางที่กำหนด ใน Even search_get_posts_data

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

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

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

วิธีการเพิ่มเงือนไข ของ Where เพื่อไม่ให้มีการแสดงโพสที่มีอยู่ในตารางที่กำหนด ใน Even search_get_posts_data

Post by Ittichai_chupol » 08/08/2019 3:49 pm

- สำหรับผู้ที่กำลังงพัฒนา Extension ให้กับ เว็บบอร์ด phpbb นั้นคงจะคุ้นเคยกับ Even ต่างๆที่ ทางเว็บบอร์ด phpbb มีให้ใช้งานอย่างมากมาย ซึ่งจะแบ่งการทำงานออกไปตามหน้าแสดงผลต่างๆ โดยแต่ละหน้าแสดงผล ก็อาจจะมีการใช้งาน Event มากว่า 1 Event เป็นส่วนใหญ่ ซึ่งสามารถเข้าไปดู Event ซึ่งสามารถเข้าไปดู Event เหล่านี้ได้จาก ที่นี้

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

1.เลือกคลิกที่ชื่อสมาชิก
Selection_999(1898) (1).png
Selection_999(1898) (1).png (35.93 KiB) Viewed 210 times
2.คลิกที่ ค้นหาเจ้าของโพสต์
Selection_999(1899) (1).png
Selection_999(1899) (1).png (27.58 KiB) Viewed 210 times
3.ก็จะพบว่ามีโพสต์ที่สมาชิกคนนั้นเป็นโพสต์ไว้ทั้งหมด ซึ่งมีจำนวนโพสต์ทั้งหมด 33 โพสต์นะครับ
Selection_999(1900) (1).png
Selection_999(1900) (1).png (32.61 KiB) Viewed 210 times
โดยในการแสดงโพสต์ ในส่วนนี้ก็เป็นการให้ Event ด้วยเช่นกัน โดย Event ที่ใช้ก็คือ search_get_posts_data
ซึ่งใน Event search_get_posts_data จะมีการเก็บ SQL สำหรับการดึงข้อมูลที่เกี่ยวข้องกับโพสต์ของสมาชิก ที่กำหนด อยู่ ซึ่งเราสามารถนำมาปรับแก้ไขใหม่ได้ เพื่อให้เพื่อ การ query เป็นไปตามที่เราต้องการ ดังเช่นตัวอย่างที่จะทำดังนี้ ก็คือ การไม่ต้องการที่จะให้มีการแสดงโพสต์ ที่มีอยู่ใน อีก ตารางที่เรากำหนดไว้

โดยมีวิธีการดังนี้

1.สร้างตัวแปรขึ้นมาเพื่อรับค่า Event

Code: Select all

 $data_where = $event['sql_array'];
2.เพื่อค่าให้กับ WHERE โดยกำหนดเงือนค่า ไว้ดังนี้

Code: Select all

        $data_where['WHERE'] .= ' AND p.post_id  NOT IN (' . 'SELECT post_id FROM ' . ชื่อตารางที่ต้องการการดึงค่า ' . ')';
3.จากนั้นแทนค่ากลับคืนให้ Event

Code: Select all

        $event['sql_array'] = $data_where;

โดยถ้าหลากรวมโดดเเล้วจะได้แบบนี้

Code: Select all

   
   
        public function search_get_posts_data($event) {
        $data_where = $event['sql_array'];
        $data_where['WHERE'] .= ' AND p.post_id  NOT IN (' . 'SELECT post_id FROM ' . $this->table_prefix . 'anonymous' . ')';
        $event['sql_array'] = $data_where;
        
    }
ผลลัพธ์หลังจากการทำงาน จะสังเกตุได้ว่าจำนวนโพสต์นั้นน้อยลงจากจำนวนเดิม ที่มี 33 โพสต์ แต่อันนี้จะมีจำนวนโพสต์ที่ 25 โพสต์
Selection_999(1901) (1).png
Selection_999(1901) (1).png (30.31 KiB) Viewed 210 times
ลิ้งค์ที่เกี่ยวข้อง
Event listenner - เขียน Extension บน phpBB 3.1

การสร้าง Extension ใน phpbb

การสร้าง controller สำหรับ phpbb

Post Reply

Return to “PHP Knowledge”

Who is online

Users browsing this forum: No registered users and 22 guests