Kotchasan PHP Framework

[ตอนที่ 3] เวิร์คช้อป CMS อย่างง่าย เก็บข้อมูลลงฐานข้อมูล

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

ผมจะอธิบายกระบวนการของหน้าเพจอย่างเดียวนะครับ ในส่วนของเมนูจะมีหลักการคล้ายๆกัน
namespace Index\Pages;

use \Kotchasan\Http\Request;
use \Kotchasan\DataTable;
use \Kotchasan\Text;

class View extends \Kotchasan\View
{

  public function render(Request $request)
  {
    // action
    $actions = array('delete' => 'Remove');
    // ตารางรายการหน้าเพจ
    $table = new DataTable(array(
      /* โหลดข้อมูลมาแสดงผลด้วย Model */
      'model' => 'Index\Pages\Model',
      /* กำหนดการแสดงผลตัวแบ่งหน้า */
      'perPage' => $request->cookie('pages_perPage', 30)->toInt(),
      /* กำหนดวิธีการจัดรูปแบบข้อมูลแต่ละแถวในการแสดงผลด้วยตัวเอง */
      'onRow' => array($this, 'onRow'),
      /* คอลัมน์ที่สามารถค้นหาได้ */
      'searchColumns' => array('module', 'topic', 'detail'),
      /* ตั้งค่าการกระทำของของตัวเลือกต่างๆ ด้านล่างตาราง ซึ่งจะใช้ร่วมกับการขีดถูกเลือกแถว */
      'action' => 'index.php/index/model/pages/action',
      'actions' => array(
        array(
          'id' => 'action',
          'class' => 'ok',
          'text' => 'ทำกับที่เลือก',
          'options' => $actions
        )
      ),
      /* รายชื่อฟิลด์ที่ query (ถ้าแตกต่างจาก Model) */
      'fields' => array(
        'id',
        'module',
        'topic',
        'detail'
      ),
      /* ส่วนหัวของตาราง และการเรียงลำดับ (thead) */
      'headers' => array(
        'id' => array(
          'text' => 'ID',
          'class' => 'center'
        ),
        'module' => array(
          'text' => 'โมดูล'
        ),
        'topic' => array(
          'text' => 'หัวข้อ'
        ),
        'detail' => array(
          'text' => 'รายละเอียด'
        )
      ),
      /* รูปแบบการแสดงผลของคอลัมน์ (tbody) */
      'cols' => array(
        'id' => array(
          'class' => 'center'
        )
      ),
      /* ปุ่มแสดงในแต่ละแถว */
      'buttons' => array(
        array(
          'class' => 'icon-edit button green',
          'href' => 'index.php?module=pagewrite&id=:id',
          'text' => 'แก้ไข'
        )
      ),
      /* ปุ่มเพิ่ม */
      'addNew' => array(
        'class' => 'button green icon-plus',
        'href' => 'index.php?module=pagewrite',
        'text' => 'เพิ่มหน้าเพจ'
      )
    ));
    // save cookie
    setcookie('pages_perPage', $table->perPage, time() + 3600 * 24 * 365, '/');
    return $table->render();
  }

  public function onRow($item, $o, $prop)
  {
    $item['topic'] = '<a href="../index.php?module='.$item['module'].'" target=_blank>'.$item['topic'].'</a>';
    $item['detail'] = Text::cut(strip_tags($item['detail']), 100);
    // คืนค่าข้อมูลทั้งหมดหลังจากจัดรูปแบบแล้วกลับไปแสดงผล
    return $item;
  }
}

อธิบายเฉพาะส่วนที่เปลี่ยนแปลงไปจากเวิร์คช้อปก่อนหน้านะครับ
/* โหลดข้อมูลมาแสดงผลด้วย Model */
'model' => 'Index\Pages\Model',

คำสั่งด้านบนจะทำให้ DataTable ทำการอ่านข้อมูลโดยใช้ Model ผ่าน Recordset
/* รายชื่อฟิลด์ที่ query (ถ้าแตกต่างจาก Model) */
'fields' => array(
  'id',
  'module',
  'topic',
  'detail'
),

คำสั่งด้านบนเป็นการกำหนดรายชื่อฟิลด์ของฐานข้อมูลที่ต้องการ Query ออกมา และยังเป็นการกำหนดลำดับของข้อมูลที่จะแสดงผลในตารางด้วย