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

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

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

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

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

โพสต์โดย Ittichai_chupol » 12/07/2019 10:27 am

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

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

1.เลือกคลิกที่ชื่อสมาชิก

Selection_999(1718).png


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

Selection_999(1719).png


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

Selection_999(1720).png


โดยในการแสดงโพสต์ ในส่วนนี้ก็เป็นการให้ 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;
       
    }

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

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

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