ฉันสามารถทำงานนี้ได้ - ด้วยวิธีปฏิบัติที่ดีที่สุดของ Drupal เท่าที่ฉันจะนึกออก หากวิธีนี้เป็นวิธีที่ผิด ฉันต้องการคำแนะนำเกี่ยวกับวิธีการดำเนินการอย่างถูกต้อง แต่สำหรับผู้ที่มองหาสิ่งเดียวกัน:
ฉันเพิ่มตัวประมวลผลล่วงหน้าของธีมเพื่ออัปเดตตาราง $ตัวแปร
ด้วยการเรียงลำดับ/ลำดับที่ระดับสูงสุด:
ฟังก์ชัน sc_preprocess_views_view_table(&$ตัวแปร) {
$view = $ตัวแปร['ดู'];
$handler = $view->style_plugin;
$ตัวแปร['การเรียงลำดับ'] = อาร์เรย์(
'แอคทีฟ' => $handler->แอคทีฟ,
'คำสั่ง' => $handler->คำสั่ง
);
}
ไฟล์ twig ได้รับการอัปเดตด้วย:
// views-view-table--custom-view--page.html.twig
{% if column.title == 'จัดเรียงตามอายุ/น้ำหนัก' %}
<a href="{{ sc_column_sort_url('field_hfs_age', sorting) }}" title="จัดเรียงตามอายุ">อายุ</a>
{% ถ้าเรียงลำดับ['ใช้งานอยู่'] == 'field_hfs_age' %}
{{ sc_column_sort_indicator(การเรียงลำดับ['ลำดับ']) }}
{% เอนดิฟ %} /
<a href="{{ sc_column_sort_url('field_hfs_weight', sorting) }}" title="จัดเรียงตามน้ำหนัก">น้ำหนัก</a>
{% ถ้าเรียงลำดับ['ใช้งานอยู่'] == 'field_hfs_weight' %}
{{ sc_column_sort_indicator(การเรียงลำดับ['ลำดับ']) }}
{% เอนดิฟ %}
{% อื่น %}
// รหัสเดิม
{% เอนดิฟ %}
และสร้าง Twig Functions แบบกำหนดเองสองรายการ
/**
* มีฟังก์ชันทั่วไปสำหรับการสร้าง URL การจัดเรียงคอลัมน์แบบกำหนดเองที่จำเป็น
* @param $name ชื่อของฟิลด์ปัจจุบัน
* @param $การเรียงลำดับอาร์เรย์ที่เกี่ยวข้องของการเรียงลำดับปัจจุบัน
*/
ฟังก์ชั่นสาธารณะ scTableSortUrl ($ ชื่อ, $ การเรียงลำดับ) {
$nextSort = ($sorting['active'] == $name && $sorting['order'] == 'asc' ? 'desc' : 'asc');
กลับ "?order={$name}&sort={$nextSort}";
}
/**
* แสดงตัวบ่งชี้การจัดเรียงตารางของตารางที่กำหนดเองในปัจจุบัน ฉันแน่ใจว่าสิ่งนี้มีอยู่ที่ใดที่หนึ่ง
* อื่นๆ แต่หาไม่เจอ
* @param $initial ลำดับการจัดเรียงเริ่มต้น [asc | รายละเอียด]
*/
ฟังก์ชั่นสาธารณะ scTableSortIndicator ($ เริ่มต้น) {
กลับ [
'#theme' => 'tablesort_indicator',
'#style' => $เริ่มต้น,
];
}
https://www.hashbangcode.com/article/drupal-9-creating-custom-twig-functions-and-filters สำหรับการอ้างอิง