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

ตอบกระทู้

รูปแสดงอารมณ์
:icon_plusone: :like: :plusone: :gfb: :-D :) :( :-o 8O :? 8) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: :angry: :baa: :biggrin:
รูปแสดงอารมณ์อื่นๆ

BBCode เปิด
[img] เปิด
[url] เปิด
[Smile icon] เปิด

กระทู้แนะนำ
   

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

วิธีการเพิ่มเงือนไข ของ 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) Viewed 436 times
2.คลิกที่ ค้นหาเจ้าของโพสต์
Selection_999(1899) (1).png
Selection_999(1899) (1).png (27.58 KiB) Viewed 436 times
3.ก็จะพบว่ามีโพสต์ที่สมาชิกคนนั้นเป็นโพสต์ไว้ทั้งหมด ซึ่งมีจำนวนโพสต์ทั้งหมด 33 โพสต์นะครับ
Selection_999(1900) (1).png
Selection_999(1900) (1).png (32.61 KiB) Viewed 436 times
โดยในการแสดงโพสต์ ในส่วนนี้ก็เป็นการให้ 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) Viewed 436 times
ลิ้งค์ที่เกี่ยวข้อง
Event listenner - เขียน Extension บน phpBB 3.1

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

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

ข้างบน