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

ตอบกระทู้

รูปแสดงอารมณ์
: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] เปิด

กระทู้แนะนำ
   

มุมมองที่ขยายได้ กระทู้แนะนำ: วิธีการส่งค่า จาก Event หนึ่งไปยัง Event หนึ่ง ใน phpbb

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

โดย Ittichai_chupol » 20/12/2019 6:59 pm

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

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

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


    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

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

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

บทความที่เกี่ยวข้อง
การสร้าง Extension ใน phpbb
การสร้าง controller สำหรับ phpbb
Event listenner - เขียน Extension บน phpBB 3.1

ข้างบน