วิธีการส่งค่า จาก Event หนึ่งไปยัง Event หนึ่ง ใน phpbb

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

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

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

วิธีการส่งค่า จาก Event หนึ่งไปยัง Event หนึ่ง ใน phpbb

Post by Ittichai_chupol » 20/12/2019 6:59 pm

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

1.ตัวอย่างส่วนโคดที่จะทำการสร้างค่าให้กับ define()

Code: Select all


    public function memberlist_memberrow_before($event) {
                    $sql_ray = array(
                        'SELECT' => 'DISTINCT count(p.post_id) as count_post ,p.user_id,username ',
                        'FROM' => array(
                            $this->table_prefix . 'm_anonymous' => 'p',
                        ),
                        'LEFT_JOIN' => array(
                            array(
                                'FROM' => array(USERS_TABLE => 'u'),
                                'ON' => 'p.user_id = u.user_id',
                            )),
                        '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();
                    while ($row = $this->db->sql_fetchrow($result)) {
                        $user_post[] = $row;
                    }
                    $this->db->sql_freeresult($result);
                    define('USER_DATA', serialize($user_post));//ส่วนนี้จะทำการส่งตัวแปรที่ได้จาก Event ไปใช้งาน
}
2.ฝั้งรับค่าเพื่อนำ่าไปใช้ นั้นจะต้องเป็น Event ที่มีส่วนร่วมกับกับ Event ข้างต้นต้น ในตัวอย่างก็คือ memberlist_prepare_profile_data

Code: Select all

 
    public function memberlist_prepare_profile_data($event) {
   $user_data = @unserialize(constant('USER_DATA'));   //ส่วนนี้จะทำการสร้างตัวแปรที่ได้จาก Event มาใช้งาน
   }
   

บทความที่เกี่ยวข้อง
การสร้าง Extension ใน phpbb
การสร้าง controller สำหรับ phpbb
Event listenner - เขียน Extension บน phpBB 3.1
私を傷つけるすべてが終了します。

Return to “PHP Knowledge”

Who is online

Users browsing this forum: No registered users and 16 guests