การใส่ปุ่มให้กับแถวของตาราง DataTable

ในตารางที่สร้างจาก DataTable มีคำสั่งสำหรับสร้างปุ่ม ในแต่ละแถว ที่ property buttons ซึ่งเป็นแอเรย์เก็บรายการของปุ่ม ดังโค้ดตัวอย่างด้านล่าง
// ตาราง
$table = new DataTable(array(
    .................
    /* ตั้งค่าการกระทำของของตัวเลือกต่างๆ ด้านล่างตาราง ซึ่งจะใช้ร่วมกับการขีดถูกเลือกแถว */
    'action' => 'index.php/demo/model/table/action',
    'actionCallback' => 'dataTableActionCallback',
    /* ปุ่มแสดงในแต่ละแถว */
    'buttons' => array(
        'delete' => array(
            'class' => 'icon-delete button delete',
            'id' => ':id',
            'title' => 'Delete',
        ),
        array(
            'class' => 'icon-edit button green',
            'href' => $uri->createBackUri(array('module' => 'demo', 'page' => 'form', 'id' => ':id')),
            'text' => 'Edit',
        ),
    ),
));

ปุ่มที่มี href จะเป็นลิงค์สำหรับเรียกไปยัง URL ที่ต้องการ โดยที่ในลิงค์สามารถใส่ข้อมูลที่มาจากข้อมูลของแต่ละแถวได้โดยใช้ : ตามด้วยชื่อคอลัมน์ เช่น :id หมายถึงจะเอาข้อมูลจากคอลัมน์ id มาใส่ตรงนี้ ปุ่มที่เป็นลิงค์ไม่จำเป็นต้องมี key ของแอเรย์
array(
    'class' => 'icon-edit button green',
    'href' => $uri->createBackUri(array('module' => 'demo', 'page' => 'form', 'id' => ':id')),
    'text' => 'Edit',
),

ส่วนปุ่มที่ไม่มี href จะถูกส่งไปยัง URL ที่กำหนดโดย property action ของ DataTable โดยพารามิเตอร์ที่ส่งไป จะมี key ของแอเรย์ และ id ของปุ่ม (ต้องกำหนดค่าทั้งสองรายการนี้เสมอ)
'delete' => array(
    'class' => 'icon-delete button delete',
    'id' => ':id',
    'title' => 'Delete',
),

ส่วนการรับค่าจากตารางเมื่อกดปุ่ม จะถูกส่งไปตาม property action ของ DataTable คือ index.php/demo/model/table/action หรือไฟล์ modules/demo/models/table.php หรือคลาส \Demo\Table\Model::action() ที่ method action
/**
* รับค่าจากตาราง (table.php).
*
* @param Request $request
*/

public function action(Request $request)
{
    $ret = array();
    // session, referer
    if ($request->initSession() && $request->isReferer()) {
        // รับค่าจากการ POST
        $action = $request->post('action')->toString();
        $id = $request->post('id')->toInt();
        print_r($_POST);
    }
    if (!empty($ret)) {
        // คืนค่า JSON
        echo json_encode($ret);
    }
}

สามารถดูตัวอย่างคำสั่งได้ที่โปรเจ็ค adminframework นะครับ หรือโปรเจ็คอื่นๆก็ได้ มีแทบทุกโปรเจ็ค
0SHAREFacebookLINE it!

Related

^