สอบถามเรื่องการใส่เงื่อนไขใน 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 มีการเปลี่ยนแปลง

รบกวนด้วยครับ
07 ธ.ค. 2563 11 1,148

ไม่ได้ครับ แนะนำให้ใช้ onCreateButton
https://github.com/...iews/report.php#L160

public function onCreateButton($btn, $attributes, $item)
$btn คือชื่อปุ่ม อิงตามคีย์ของ buttons ครับ ดูจากลิงค์ที่ส่งมา
$attributes คือ property ของปุ่ม ลอง print_r ออกมาดู สามารถแก้ไขค่าได้
$item คือ ข้อมูลในแถวของปุ่มเช่น ลอง print_r ออกมาดูได้เช่นกัน อันนี้ อ่านอย่างเดียว
#1

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] =>
)

ลองใช้ 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
}
}

กรณีแบบนี้พอมีตัวอย่างไหมครับ
#2

$btn จะส่งชื่อปุมมา ถ้าไม่ระบุจะส่งตัวเลขมา แนะนำให้ระบจะได้ง่าย (ตรงคำว่า edit)
'buttons' => array(
'edit' => array (
........
),
)

$attributes จะส่งค่า แอเรย์ของ edit มา สามารถแก้ไขได้ ลอง print_r ออกมาดู
$item จะส่งข้อมูลแถวที่กำลังดำเนินการมา
ฟังก์ชั่นนี้จะถูกเรียกทีละปุ่มครับ
#3

ครับลอง print $attributes ออกมาแล้ว
ได้ 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 ได้ครับ
#4

ไม่ค่อยเข้าใจคำถามเท่าไร
ตัวอย่าง https://github.com/...views/index.php#L186
#5

คือตอนนี้ลองเขียนแบบนี้ครับ
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}',
),
#6

$item เป็นอ่านอย่างเดียว และ มันคือข้อมูลนะ เปลี่ยนไม่ได้
$attributes สามารถเปลี่ยนได้ ตามตัวอย่างที่ส่งให้ดู
จากตัวอย่างจะมีการ return $attributes หมายถึงยังแสดงปุ่มอยู่ หรือ return false หากต้องการซ่อนปุ่ม
จนถึงตอนนี้ ยังไม่เข้าใจว่าจะทำอะไร เลยให้ได้แค่คำแนะนำเท่านั้น
เดานะ ถ้าต้องการแสดงผลในตาราง ย้ำในตาราง โดยใช้เงื่อนไข $item['urgency'] == '1' แสดง OUT ให้ทำใน onRow
$item['urgency'] = $item['urgency'] == 1 ? 'OUT' : 'IN';

onRow คือ ตอนที่กำลังแสดงผลข้อมูลในตาราง
onCreateButton คือตอนกำลังสร้างปุ่ม
#7

ต้องการให้ค่า ในปุ่มที่ถูกเก็บอยู่ใน $item['urgency'] :urgency จาก 1 หรือ 0 ให้ค่า กลายเป็น IN หรือ OUT ครับ

ย้ำครับต้องการเปลี่ยนค่าใน button
หรือถ้าไม่สามารถเปลี่ยนค่าในปุ่มได้จะมีวิธีไหนบ้างครับที่ส่งค่าไปแทน :urgency

ในส่วนของ ตารางนี้แก้ไขได้อยู่แล้วครับไม่ได้มีปัญหาอะไร
#8

งงกันต่อไป
แนะนำให้ลองทำแบบนี้ดู เผื่อจะเข้าใจมากขึ้น
ในฟังก์ชั่น onCreateButton ลองใส่
$attributes['href'] = 'https://google.com';
return $attributes

หรือใน onRow ใส่ลิงค์ลงไปเลยก็ได้ ไม่ต้องไปสนใจ button https://github.com/...views/setup.php#L172
#9

ขอบคุณครับ

ถ้ากรณีใช้ 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;
}
#10

ช่ายต้องดูจาก $btn ด้วย ว่าทำกับปุ่มไหนอยู่
#11
ความคิดเห็น
ไฟล์อัปโหลด ชนิด jpg, jpeg, png ขนาดไฟล์ไม่เกิน 2M