วิธีการปรับเปลี่ยนค่า โฑสต์ เมื่อมีการ Quote ใน phpbb

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

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

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

วิธีการปรับเปลี่ยนค่า โฑสต์ เมื่อมีการ Quote ใน phpbb

โพสต์โดย Ittichai_chupol » 20/08/2019 5:17 pm

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

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


โดยส่วนใหญ่การพัฒนา Extension จะต้องพึงการใช้งาน Event ต่างๆ ที่ phpbb นั้นมีอยู่ก่อนน่าเป็นพื้นฐานอยู่แล้ว เพื่อลดขั้นตอนการพัฒนา Coding ลงได้ เป็นอย่างมากโดนจะทำให้ผู้พัฒนาไม่ต้องไปเขียนโคดหลายๆบันทัดพึงที่จะดึงข้อมูลนั้นๆออกมาใช้ เพราะหากใช้งาน Event ของ phpbb ก็จะเขียนโคดแค่บรรทัดเดียวแต่ดึงข้อมูลได้มากมาย รวมทั้งยังอยากจจะช่วยลดการ Query ข้อลงได้อีก และง่ายต่อการนำไปใช้งานงานในขั้นตอนต่อไปได้ด้วย

ดังเช่นตัวอย่างต่อไปนี้ ที่จะทำ คือ การใช้งาน Event ของ phpbb เพื่อดักการโพสต์ที่เป็น การ Quote โพสต์ แล้วต้องการที่จะเป็น เข้าของโพสต์ที่ Quote มาเป็นนามแฝงที่เก็บไว้ในฐานข้อมูลนามแฝง ซึ่งจะมีขั้นตอนดังนี้

1.Event ของ phpbb ที่จะใช้มีชื่อว่า

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

posting_modify_template_vars


2.ภายใน Event posting_modify_template_vars จะมี Event ย่อยๆอีกมากที่ช่วยในการดึงข้อมูลส่วนต่างๆที่เกี่ยวข้องมาใช้งาน โดยที่จะใช้งานก็คือ

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

$event['mode']



3.จะนั้นก็ประกาศ ฟังชั่นดังนี้

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

  public function posting_modify_template_vars($event) {


}


4.กำหนดเงือนไขว่า เมื่อมีการโพสต์แบบ Quote จะเข้ามาทำงานในส่วนนี้

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

  $mode = $event['mode'];
            if ($mode == 'quote') {
}


5.สร้างตะวแปรเพื่อเก็บค่าจาก Event ย่อยๆของ posting_modify_template_vars โดยผมจะใช้ดังนี้

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

    $poster_id = $post_data['poster_id'];
                    $post_id = $post_data['post_id'];


6.จากนั้นนำตัวแปรเที่ได้ พื่อไป Quote ในฐานข้อมูลที่เก็บข้อมูลนามแฝงไว้

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

   $sql_ary = array(
                        'SELECT' => '*',
                        'FROM' => array(
                            $this->table_prefix . 'm_anonymous' => 'a',
                        ),
                        'WHERE' => '  post_id   = ' . $post_id. ' AND a.user_id = '.$poster_id,
                    );
                    $sql = $this->db->sql_build_query('SELECT', $sql_ary);
                    $res = $this->db->sql_query($sql);
                }
                $row = $this->db->sql_fetchrow($res);
                $this->db->sql_freeresult($res);


7.จากนั้นนำค่าที่ได้ไปแทนค่าเพื่อแสดงผลในน่าแสดงผลลัพธ์ ดังนี้

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

  if ($row) {
                    $text = preg_replace("/\r\n|\r|\n/", '', $post_data['post_text']); #ตัด
                    $a = preg_match('/\[quote=(.*?)](.*?)\[\/quote]/', $text, $output_array);
                    $post_text_new = $output_array[2];
                    $message = $message_parser->message = $bbcode_utils->generate_quote(
                            censor_text($post_text_new), array(
                        'author' => $row['anonymous_code'],
                        'post_id' => $post_id,
                        'time' => $post_data['post_time'],
                        'user_id' => '0',
                            )
                    );
                    $message_parser->message .= "\n\n";
                    $page_data['MESSAGE'] = $message;
                    $event['page_data'] = $page_data;
                }


8.ผลลัพธ์ที่ได้

Selection_999(1932).png

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

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

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