Kotchasan PHP Framework

การจัดการแสดงผลในหน้า Dashboard

มีคำถามจากบอร์ดบ่อยๆ ถึงวิธีการดัดแปลงการแสดงผลในหน้า Dashboard ผมสรุปเอาไว้ที่นี่เลยละกัน

หน้า Dashboard ของโปรแกรมต่างๆที่สร้างจาก Adminframework มีรูปแบบการทำงานเหมือนๆ กัน ดังนั้นเรียนรู้จากโปรเจ็ค Adminframework ให้เข้าใจอันเดียว ก็สามารถดัดแปลงโปรเจ็คอื่นๆได้

ปกติแล้ว ถ้าไม่มีการกำหนดเป็นอย่างอื่น หน้าเริ่มต้นของโปรแกรมคือหน้า Home หรือ \Index\Home\Controller แต่เนื่องจากหน้านี้ทั่วๆไปมันไม่ได้มีการทำงานใดๆ ผมเลยกำหนดให้มันเป็นหน้า Dashboard แทน แล้วออกแบบให้มันไปเรียกใช้โมดูลต่างๆ เพื่อจัดการแสดงผลในหน้านี้แทน

การจัดการแสดงผลในหน้า Dashboard สำหรับโปรเจ็คทั้งหมด อยู่ในไฟล์ /modules/index/controllers/home.php ซึ่งคำสั่งต่างๆในหน้านี้จะทำงานร่วมกับโมดูลต่างๆ ที่ติดตั้ง โดยโปรแกรมจะทำการอ่านข้อมูลจากโมดูล แล้วนำมาแสดงผลในหน้า Dashboard

  • addCard เมธอดสำหรับการเพิ่ม card ซึ่งในการทำงานจะเป็นการเรียก เมธอด renderCard เพื่อทำการเพิ่ม card ที่ต้องการแสดงผลในหน้า Dashboard
  • addMenu เมธอดสำหรับการเพิ่ม Link ซึ่งในการทำงานจะเป็นการเรียก เมธอด renderQuickMenu เพื่อทำการเพิ่ม ลิงค์ ที่ต้องการแสดงผลในหน้า Dashboard
  • addBlock เมธอดสำหรับการเพิ่มบล๊อคที่กำหนดเอง เช่น ปฏิทิน หรือ กราฟ ที่ต้องการแสดงในหน้า Dashboard
หลักการก็คือที่หน้า Dashboard โปรแกรมจะทำการอ่านไปยังโมดูลต่างๆ ว่าพบเมธอดต่างๆทั้ง 3 เมธอดในคลาส \Module\Home\Controller (Module คือชื่อโมดูลต่างๆที่ติดตั้งไว้) หรือไม่ ซึ่งถ้าพบเมธอดต่างๆในคลาสข้างต้น โปรแกรมจะทำการส่งพารามิเตอร์ต่างๆ เข้าไปประมวลผลในคลาสนั้นๆที่พบ ซึ่งเราสามารถเขียนคำสั่งเพื่อควบคุมการแสดงผลได้ เช่น ถ้าพบเมธอด \Repair\Home\Controller::addCard (modules/repair/controllers/home.php) ก็จะทำการเรียกไปยังเมธอด addCard ใน  \Repair\Home\Controller และที่เมธอดจะทำการเตรียมการแสดงผล และเรียกใช้ Method renderCard เพื่อทำการสร้าง card ขึ้นมาแสดงผลในหน้า Dashboard อีกที ตัวอย่างเช่น
/**
 * ฟังก์ชั่นสร้าง card.
 *
 * @param Request         $request
 * @param \Kotchasan\Html $card
 * @param array           $login
 */

public static function addCard(Request $request, $card, $login)
{
    \Index\Home\Controller::renderCard($card, 'icon-tools', 'Repair list', number_format(\Repair\Home\Model::getNew($login)), 'Job today', 'index.php?module=repair-setup'.(isset(self::$cfg->repair_first_status) ? '&status='.self::$cfg->repair_first_status : ''));
}

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