โดย 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
Event ในเว็บบอร์ด phpbb จะเป็นการเก็บค่าต่างๆไว้เพื่อจะนำกลับมาแสดงผลลัพธ์ หรือ เพื่อการกระทำอย่างได้อย่างหนึ่งตามบทบาทของแต่ละ Event โดย Event ของฝั่ง [url=https://www.mindphp.com/%E0%B8%9A%E0%B8%97%E0%B8%84%E0%B8%A7%E0%B8%B2%E0%B8%A1/24-cms-php/157-phpbb-%E0%B8%84%E0%B8%B7%E0%B8%AD%E0%B8%AD%E0%B8%B0%E0%B9%84%E0%B8%A3.html]phpbb[/url] จะเป็นการเก็บค่าเพื่อใช้งานสำหรับแสดงผล ซึงจะมีการทำหลายรอบตามจำนวนของข้อมูล แต่บาง Event ก็จะทำหน้าที่ในการเรียกข้อมูลซึ่งทำงานเพียงรอบเดียว โดยถ้าหากผู้ที่พัฒนา ส่วนขยายโดยใช้ Event ของเว็บบอร์ด phpbb เข้ามาเพื่อปรับแก้ไขข้อมูลแล้ว ก็จำเป็นที่จะต้องคำนึกถึงผลกระทบต่อ ส่วนนี้ด้วย อย่างเช่นว่า ถ้าหากต้องการปรับแก้ไขข้อมูลของโพสต์ ที่มีจำนวนมาก แล้วมาปรับในส่วนของ Event เป้นส่วนแสดง ก็จำทำเกิดการทำงานในหลายๆรอบ โดยเฉาพะกรณีที่มีการ [url=https://www.mindphp.com/forums/viewtopic.php?f=74&t=18516]Query[/url] ด้วยจะทำให้เว็บไซต์ทำงานช้างลง แต่ถ้าหากนำไปปรับแก้ไข กับ Event ที่เป็นส่วนของการเก็บข้อมูล ก็จะทำให้ลดขั้นตอนจำนวนรอบลงไปได้อย่างมาก โดยวิธีการทำแบบนี้ได้ ก็คือการใช้งาน ฟังชั่น define() เข้ามาช่วยนั้นเอง
1.ตัวอย่างส่วนโคดที่จะทำการสร้างค่าให้กับ define()
[code]
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 ไปใช้งาน
}
[/code]
2.ฝั้งรับค่าเพื่อนำ่าไปใช้ นั้นจะต้องเป็น Event ที่มีส่วนร่วมกับกับ Event ข้างต้นต้น ในตัวอย่างก็คือ memberlist_prepare_profile_data
[code]
public function memberlist_prepare_profile_data($event) {
$user_data = @unserialize(constant('USER_DATA')); //ส่วนนี้จะทำการสร้างตัวแปรที่ได้จาก Event มาใช้งาน
}
[/code]
บทความที่เกี่ยวข้อง
[url=https://www.mindphp.com/forums/viewtopic.php?f=6&t=51112&p=134162#p134162]การสร้าง Extension ใน phpbb[/url]
[url=https://www.mindphp.com/forums/viewtopic.php?f=6&t=51115&p=134168#p134168]การสร้าง controller สำหรับ phpbb[/url]
[url=https://www.mindphp.com/forums/viewtopic.php?f=243&t=23816&p=51085#p51085]Event listenner - เขียน Extension บน phpBB 3.1[/url]