สอบถามเรื่องการใส่เงื่อนไขใน Datatable
จากข้อมูลในแต่ละแถวที่ถูกเก็บใน Datatable
โดยที่ข้อมูลจะถูกเก็บใน คอลัมน์ id ( :id, :urgency เป็นต้น )
array(
'class' => 'icon-edit button green',
'href' => $uri->createBackUri(array('module' => ':urgency', 'id' => ':id')),
'text' => 'แก้ไข',
),
เราสามารถนำ data ที่อยู่ใน คอลัม มาเขียนเงื่อนไขได้หรือไม่ครับ
เช่น เมื่อต้องการให้ข้อมูลที่อยู่ใน urgency เมื่อเป็น 1 ให้แสดงผลเป็น IN เมื่อ urgency = 2 ให้แสดงผลเป็น OUT
'href' => $uri->createBackUri(array('module' => ':urgency===1 ? "IN":"OUT"', 'id' => ':id')),
ลองเขียนแบบนี้แล้วข้อมูลที่ออกมา แสดงผลไม่ตรงกับค่าที่ถูกเก็บไว้ใน urgency ครับ ออกเป็น OUT ตลอด
ทั้งๆ ที่ค่าใน urgency มีการเปลี่ยนแปลง
รบกวนด้วยครับ
โดยที่ข้อมูลจะถูกเก็บใน คอลัมน์ id ( :id, :urgency เป็นต้น )
array(
'class' => 'icon-edit button green',
'href' => $uri->createBackUri(array('module' => ':urgency', 'id' => ':id')),
'text' => 'แก้ไข',
),
เราสามารถนำ data ที่อยู่ใน คอลัม มาเขียนเงื่อนไขได้หรือไม่ครับ
เช่น เมื่อต้องการให้ข้อมูลที่อยู่ใน urgency เมื่อเป็น 1 ให้แสดงผลเป็น IN เมื่อ urgency = 2 ให้แสดงผลเป็น OUT
'href' => $uri->createBackUri(array('module' => ':urgency===1 ? "IN":"OUT"', 'id' => ':id')),
ลองเขียนแบบนี้แล้วข้อมูลที่ออกมา แสดงผลไม่ตรงกับค่าที่ถูกเก็บไว้ใน urgency ครับ ออกเป็น OUT ตลอด
ทั้งๆ ที่ค่าใน urgency มีการเปลี่ยนแปลง
รบกวนด้วยครับ
https://github.com/...iews/report.php#L160
public function onCreateButton($btn, $attributes, $item)
$btn คือชื่อปุ่ม อิงตามคีย์ของ buttons ครับ ดูจากลิงค์ที่ส่งมา
$attributes คือ property ของปุ่ม ลอง print_r ออกมาดู สามารถแก้ไขค่าได้
$item คือ ข้อมูลในแถวของปุ่มเช่น ลอง print_r ออกมาดูได้เช่นกัน อันนี้ อ่านอย่างเดียว
(
[class] => icon-edit button green notext
[href] => Kotchasan\Http\Uri Object
(
[fragment:protected] =>
[host:protected] => 10.100.171.50
[path:protected] => /edocument-master/index.php
[port:protected] =>
[query:protected] => _module=edocument-sent&module=$urgency&id=:id
[scheme:protected] => http
[userInfo:protected] =>
)
ลองใช้ onCreateButton แล้วจะสามารถแก้ไข return data จาก
onCreateButton Loop ได้ยังไงครับ
public function onCreateButton($btn, $attributes, $item)
{
if($item['urgency] == '1'){
ต้องการให้ data [query:protected] => _module=edocument-sent&module=$urgency&id=:id
module = $urgency = IN
}
else{
ต้องการให้ data [query:protected] => _module=edocument-sent&module=$urgency&id=:id
module = $urgency = out
}
}
กรณีแบบนี้พอมีตัวอย่างไหมครับ
'edit' => array (
........
),
)
$attributes จะส่งค่า แอเรย์ของ edit มา สามารถแก้ไขได้ ลอง print_r ออกมาดู
$item จะส่งข้อมูลแถวที่กำลังดำเนินการมา
ฟังก์ชั่นนี้จะถูกเรียกทีละปุ่มครับ
ได้ data
Array
(
[class] => icon-edit button green notext
[href] => Kotchasan\Http\Uri Object
(
[fragment:protected] =>
[host:protected] => 10.100.171.50
[path:protected] => /edocument-master/index.php
[port:protected] =>
[query:protected] => _module=edocument-sent&module=$urgency&id=:id
[scheme:protected] => http
[userInfo:protected] =>
)
แต่อยากเปลี่ยนข้อมูล ในบรรทัด [query:protected] => _module=edocument-sent&module=$urgency&id=:id แต่ไม่สามารถเปลี่ยน
ตัว module -> $urgency ได้ครับ
ตัวอย่าง https://github.com/...views/index.php#L186
public function onCreateButton($btn, $attributes, $item)
{
if($item['urgency'] == '1'){
$item['urgency'] = 'IN';
return $item;
}
if($item['urgency'] == '0'){
$item['urgency'] = 'OUT';
return $item;
}
else{
return $item;
}
}
แต่ $item ที่เปลี่ยนค่า ใน onCreateButton ( $item['urgency'] ) มันไม่ถูกเปลี่ยนแปลงตามครับ
'onCreateButton' => array($this, 'onCreateButton'),
'edit' => array(
'class' => 'icon-edit button green notext',
'id' => ':id',
'href' => $uri->createBackUri(array('module' => ':urgency', 'id' => ':id')),
'title' => '{LNG_Edit}',
),
$attributes สามารถเปลี่ยนได้ ตามตัวอย่างที่ส่งให้ดู
จากตัวอย่างจะมีการ return $attributes หมายถึงยังแสดงปุ่มอยู่ หรือ return false หากต้องการซ่อนปุ่ม
จนถึงตอนนี้ ยังไม่เข้าใจว่าจะทำอะไร เลยให้ได้แค่คำแนะนำเท่านั้น
เดานะ ถ้าต้องการแสดงผลในตาราง ย้ำในตาราง โดยใช้เงื่อนไข $item['urgency'] == '1' แสดง OUT ให้ทำใน onRow
onRow คือ ตอนที่กำลังแสดงผลข้อมูลในตาราง
onCreateButton คือตอนกำลังสร้างปุ่ม
ย้ำครับต้องการเปลี่ยนค่าใน button
หรือถ้าไม่สามารถเปลี่ยนค่าในปุ่มได้จะมีวิธีไหนบ้างครับที่ส่งค่าไปแทน :urgency
ในส่วนของ ตารางนี้แก้ไขได้อยู่แล้วครับไม่ได้มีปัญหาอะไร
แนะนำให้ลองทำแบบนี้ดู เผื่อจะเข้าใจมากขึ้น
ในฟังก์ชั่น onCreateButton ลองใส่
return $attributes
หรือใน onRow ใส่ลิงค์ลงไปเลยก็ได้ ไม่ต้องไปสนใจ button https://github.com/...views/setup.php#L172
ถ้ากรณีใช้ onCreateButton เราสามารถแก้ไข
href ตาม button array ของเราได้ไหมครับ กรณีมีหลายตัว
เช่น
buttons => array(
'download' =array( href => 'xxxx' )
'edit' =array( href => 'yyyy' )
ถ้า
$attributes['href'] = 'xxxxx'
กลายเป็นว่า href ใน button ทุกอันถูกแก้ไขไปทั้งหมด
-------------------------------------------------------------------------------
อ๋อได้แล้วครับ
if($item['urgency'] == '1' && $btn == 'edit'){
$attributes['href'] = 'edocument-in';
return $attributes;
}