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

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

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

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

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

โพสต์โดย 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) เปิดดู 117 ครั้ง


2.คลิกที่ ค้นหาเจ้าของโพสต์

Selection_999(1899) (1).png
Selection_999(1899) (1).png (27.58 KiB) เปิดดู 117 ครั้ง


3.ก็จะพบว่ามีโพสต์ที่สมาชิกคนนั้นเป็นโพสต์ไว้ทั้งหมด ซึ่งมีจำนวนโพสต์ทั้งหมด 33 โพสต์นะครับ

Selection_999(1900) (1).png
Selection_999(1900) (1).png (32.61 KiB) เปิดดู 117 ครั้ง


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

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

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

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

 $data_where = $event['sql_array'];


2.เพื่อค่าให้กับ WHERE โดยกำหนดเงือนค่า ไว้ดังนี้

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

        $data_where['WHERE'] .= ' AND p.post_id  NOT IN (' . 'SELECT post_id FROM ' . ชื่อตารางที่ต้องการการดึงค่า ' . ')';


3.จากนั้นแทนค่ากลับคืนให้ Event

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

        $event['sql_array'] = $data_where;



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

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

   
   
        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) เปิดดู 117 ครั้ง


ลิ้งค์ที่เกี่ยวข้อง
Event listenner - เขียน Extension บน phpBB 3.1

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

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

ย้อนกลับไปยัง

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

กำลังดูบอร์ดนี้: 16 และ บุคคลทั่วไป 0 ท่าน