[ตอนที่ 6] เวิร์คช้อป 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(
/* โหลดข้อมูลมาแสดงผลรูปแบบแอเรย์ */
'datas' => \Index\Pages\Model::get(-1),
/* กำหนดการแสดงผลตัวแบ่งหน้า */
'perPage' => $request->cookie('pages_perPage', 30)->toInt(),
/* กำหนดวิธีการจัดรูปแบบข้อมูลแต่ละแถวในการแสดงผลด้วยตัวเอง */
'onRow' => array($this, 'onRow'),
/* คอลัมน์ที่ไม่ต้องแสดงผล */
'hideColumns' => array('id'),
/* คอลัมน์ที่สามารถค้นหาได้ */
'searchColumns' => array('module', 'topic', 'detail'),
/* ตั้งค่าการกระทำของของตัวเลือกต่างๆ ด้านล่างตาราง ซึ่งจะใช้ร่วมกับการขีดถูกเลือกแถว */
'action' => 'index.php/index/model/pages/action',
'actions' => array(
array(
'id' => 'action',
'class' => 'ok',
'text' => 'ทำกับที่เลือก',
'options' => $actions
)
),
/* ส่วนหัวของตาราง และการเรียงลำดับ (thead) */
'headers' => array(
'module' => array(
'text' => 'โมดูล'
),
'topic' => array(
'text' => 'หัวข้อ'
),
'detail' => array(
'text' => 'รายละเอียด'
)
),
/* ปุ่มแสดงในแต่ละแถว */
'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;
}
}
มาดูกันที่คลาส Index\Pages\View คลาสนี้จะถูกเรียกเมื่อมีการเรียกหน้า pages เพื่อแสดงรายการหน้าเว็บที่ติดตั้งแล้ว ซึ่งในหน้านี้จะมีการใช้งานคลาส DataTable เพื่อแสดงข้อมูลในรูปแบบตาราง
ผมจะไม่อธิบายละเอียดนักนะครับ เพราะจะไปอธิบายอีกทีในหัวข้อ DataTable
ในหน้านี้เราจะทำการระบุข้อมูลที่เป็น Array ให้กับ DataTable ที่ property datas โดยข้อมูลต่างๆจะถูกโหลดมาโดย \Index\Pages\Model::get(-1)
namespace Index\Pages;
use \Kotchasan\Http\Request;
use \Kotchasan\Login;
use \Kotchasan\File;
class Model
{
public static function get($id)
{
if ($id === 0) {
// ใหม่
return array(
'id' => 0
);
} else {
$datas = array();
foreach (glob(ROOT_PATH.DATA_FOLDER.'index/*.php') as $item) {
$page = include($item);
if ($id === -1) {
// คืนค่าทุกรายการ
$datas[] = $page;
} elseif ($page['id'] == $id) {
// คืนค่ารายการที่ต้องการ (แก้ไข)
return $page;
}
}
return $datas;
}
}
}
method get ของ Index\Page\Model ตามด้านบนจะรับค่าพารามิเตอร์ $id มา
- $id = -1 เมธอดจะคืนค่ารายการหน้าเพจทั้งหมดกลับไปเพื่อใช้ส่งค่าให้กับ DataTable โดยก่อนส่งกลับจะมีการจัดรูปแบบของข้อมูลให้เหมาะสมสำหรับการใช้งานร่วมกับ DataTable ก่อน (รายละเอียดจะอธิบายเพิ่มเติมที่ DataTable) ซึ่งพารามิเตอร์ -1 นี้จะใช้ร่วมกับหน้านี้นี่เอง
- $id = 0 เมธอดจะคืนค่าเริ่มต้นสำหรับการสร้างรายการหน้าเพจใหม่ ซึ่งจะใช้ร่วมกับการสร้างหน้าเพจนั่นเอง
- $id > 0 เมธอดจะคืนค่าหน้าเพจที่มีข้อมูล id ตรงกับรายการที่เลือก ใช้ในการแก้ไขหน้าเพจ