มีความคิดว่าฉันจะใช้ไฟล์ twig ของโมดูลที่กำหนดเองเพื่อสร้างธีมตารางได้อย่างไร
ฉันใช้ drupal/examples -> content_entity_example เป็นจุดเริ่มต้น:
ใน content_entity_example.module การใช้งาน hook_theme ฉันต้องการคืนฟิลด์ทั้งหมดเช่น:
/**
* @ไฟล์
* ประกอบด้วย Drupal\content_entity_example\content_entity_example.module
*/
/**
* @defgroup content_entity_example ตัวอย่าง: เอนทิตีเนื้อหา
* @ingroup ตัวอย่าง
* @{
* ใช้เอนทิตีเนื้อหา
*
* โมดูลนี้สาธิตการใช้งานเอนทิตีเนื้อหา
*
* Entity API คือ API ที่เก็บเนื้อหาและการกำหนดค่าสำหรับ
* แกน Drupal ตัวอย่างเช่น หากคุณพบประเภทเนื้อหาของโหนด แสดงว่าคุณ
* พบเอนทิตีประเภท 'โหนด'
*
* ตัวอย่างนี้ใช้ Entity API เพื่อให้เรามีประเภทเอนทิตีที่ใช้งานได้
* โดยผู้ใช้ซึ่งคุณอาจคิดว่าเป็นโหนดพิเศษ แต่นั่นคือ
* แตกต่างจากโหนด เอนทิตีเหล่านี้เรียกว่า ผู้ติดต่อ และเป็นที่รู้จัก
* ภายในด้วยชื่อเครื่อง content_entity_example_contact
*
* ผู้ติดต่อเป็นเอนทิตีเนื้อหาฟิลด์ที่ใช้เพื่อเก็บข้อมูลที่มีโครงสร้าง
* โดยไม่มีค่าใช้จ่ายในการใช้ประเภทเนื้อหาของโหนด 'Fieldable' หมายความว่าคุณทำได้
* แนบฟิลด์ลงไป เช่นเดียวกับที่คุณทำได้กับโหนด มันถูกกำหนดไว้โดยทางโปรแกรม
* (สมบูรณ์ในรหัส). เราจะแสดงเทคนิคหลักในการจัดการและเปิดเผย
* เนื้อหาของเอนทิตีประเภทนี้
*
* เอนทิตีผู้ติดต่อจะสาธิตงานหลักสำหรับเอนทิตี:
* - กำหนด
* - บันทึก
* - โหลด
* - ดู
* - แก้ไข
* - ลบ
* - ควบคุมการเข้าถึง
*
* หากเป็นไปได้ เราจะใช้เครื่องมืออันน่าทึ่งที่มีอยู่ใน D8 โดยกำเนิด
*
* @ดู Drupal\content_entity_example\Entity\Contact
* @ดู config_entity_example
* }
*/
/**
* ใช้ hook_theme() ลงทะเบียนการใช้งานธีมของโมดูลหรือธีม
*/
ฟังก์ชัน content_entity_example_theme() {
กลับ [
'content_entity_example_table' => [
'ตัวแปร' => [
'ส่วนหัว' => NULL,
'แถว' => NULL,
'footer' => NULL,
'คุณสมบัติ' => [],
'คำบรรยายภาพ' => NULL
'กลุ่มสี' => [],
'ติดหนึบ' => FALSE
'ตอบสนอง' => จริง,
'ว่าง' => ''
]
]
];
}
และใน src/Entity/Controller/ContactListBuilder.php ฉันต้องการรับเทมเพลตของฉัน ( '# template' ...)
ดังนั้นฉันอยากจะบอกการเรนเดอร์ () ให้กับผู้ใช้เทมเพลตของฉัน
/**
* {@inheritdoc}
*
* เราเขียนทับ ::render() เพื่อให้เราเพิ่มเนื้อหาของเราเองเหนือตารางได้
* parent::render() เป็นที่ที่ EntityListBuilder สร้างตารางโดยใช้
* การใช้งาน buildHeader() และ buildRow()
*/
ฟังก์ชันสาธารณะแสดงผล () {
$build['รายละเอียด'] = [
'#markup' => $this->t('ตัวอย่างเอนทิตีของเนื้อหาใช้โมเดลผู้ติดต่อ ผู้ติดต่อเหล่านี้เป็นเอนทิตีที่กรอกข้อมูลได้ คุณสามารถจัดการฟิลด์ได้ใน <a href="@adminlink">หน้าผู้ดูแลระบบผู้ติดต่อ</a> .', [
'@adminlink' => $this->urlGenerator->generateFromRoute('content_entity_example.contact_settings'),
]),
];
$build['table'] = parent::render();
// TODO เพิ่มการอ้างอิงแม่แบบ
ส่งคืน $build;
}
และใช้ไฟล์เทมเพลตของฉันใน /templates/content-entity-example.html.twig
ที่กำลังจะมีการเปลี่ยนแปลงในระยะต่อไป (เพียงแค่ต้องการโหลด)
{#
/**
* @ไฟล์
* แทนที่ธีมเพื่อแสดงตาราง
*
* ตัวแปรที่มีอยู่:
* - แอตทริบิวต์: แอตทริบิวต์ HTML ที่จะใช้กับแท็ก <table>
* - คำบรรยาย: สตริงที่แปลเป็นภาษาท้องถิ่นสำหรับแท็ก <caption>
* - colgroups: กลุ่มคอลัมน์ แต่ละกลุ่มมีคุณสมบัติดังต่อไปนี้:
* - แอตทริบิวต์: แอตทริบิวต์ HTML ที่จะใช้กับแท็ก <col>
* หมายเหตุ: ปัจจุบัน Drupal สนับสนุนแถวส่วนหัวของตารางเพียงแถวเดียว โปรดดู
* https://www.drupal.org/node/893530 และ
* http://api.drupal.org/api/drupal/includes!theme.inc/function/theme_table/7#comment-5109
* - ส่วนหัว: เซลล์ส่วนหัวของตาราง แต่ละเซลล์มีคุณสมบัติดังต่อไปนี้:
* - แท็ก: ชื่อแท็ก HTML ที่จะใช้; 'th' หรือ 'td'
* - แอตทริบิวต์: แอตทริบิวต์ HTML ที่จะใช้กับแท็ก
* - เนื้อหา: สตริงที่แปลแล้วสำหรับชื่อเรื่องของคอลัมน์
* - ฟิลด์: ชื่อฟิลด์ (จำเป็นสำหรับการเรียงลำดับคอลัมน์)
* - sort: ลำดับการจัดเรียงเริ่มต้นสำหรับคอลัมน์นี้ ("asc" หรือ "desc")
* - ติดหนึบ: แฟล็กที่ระบุว่าจะใช้ส่วนหัวตาราง "ติดหนึบ" หรือไม่
* - แถว: แถวของตาราง แต่ละแถวมีคุณสมบัติดังต่อไปนี้:
* - แอตทริบิวต์: แอตทริบิวต์ HTML ที่จะใช้กับแท็ก <tr>
* - ข้อมูล: เซลล์ตาราง
* - no_striping: แฟล็กที่ระบุว่าแถวควรได้รับหมายเลข
* สไตล์ 'คู่ / คี่' ค่าเริ่มต้นเป็น FALSE
* - เซลล์: เซลล์ตารางของแถว แต่ละเซลล์ประกอบด้วยคีย์ต่อไปนี้:
* - แท็ก: ชื่อแท็ก HTML ที่จะใช้; 'th' หรือ 'td'
* - แอตทริบิวต์: แอตทริบิวต์ HTML ใดๆ เช่น "colspan" เพื่อใช้กับ
* เซลล์ตาราง
* - เนื้อหา: สตริงที่จะแสดงในเซลล์ตาราง
* - active_table_sort: บูลีนที่ระบุว่าเซลล์นั้นเป็นเซลล์ที่ใช้งานอยู่หรือไม่
จัดเรียงตาราง
* - ส่วนท้าย: แถวส่วนท้ายของตารางในรูปแบบเดียวกับตัวแปรแถว
* - ว่าง: ข้อความที่จะแสดงในแถวพิเศษหากไม่มีตาราง
* แถวใดก็ได้
* - no_striping: บูลีนที่ระบุว่าแถวไม่ควรมีการสตริป
* - header_columns: จำนวนคอลัมน์ในส่วนหัว
*
* @ดู template_preprocess_table()
*/
#}
<ตาราง{{แอตทริบิวต์ }}>
{% ถ้าคำบรรยาย %}
<คำบรรยายภาพ>{{ คำบรรยายภาพ }}</คำบรรยายภาพ>
{% เอนดิฟ %}
{% สำหรับ colgroup ใน colgroups %}
{% ถ้า colgroup.cols %}
<colgroup{{ colgroup.attributes }}>
{% สำหรับ col ใน colgroup.cols %}
<col{{ col.attributes }} />
{% สิ้นสุดสำหรับ %}
</colgroup>
{% อื่น %}
<colgroup{{ colgroup.attributes }} />
{% เอนดิฟ %}
{% สิ้นสุดสำหรับ %}
{% ถ้าส่วนหัว %}
<ส่วนหัว>
<tr>
{% สำหรับเซลล์ในส่วนหัว %}
{%
ตั้งค่า cell_classes = [
เซลล์.active_table_sort ? 'ใช้งานอยู่'
]
%}
<{{ cell.tag }}{{ cell.attributes.addClass(cell_classes) }}>
{{- เซลล์เนื้อหา -}}
</{{ cell.tag }}>
{% สิ้นสุดสำหรับ %}
</tr>
</thead>
{% เอนดิฟ %}
{% ถ้าแถว %}
<tbody>
{% สำหรับแถวต่อแถว %}
{%
ตั้งค่า row_classes = [
ไม่ no_striping ? รอบ (['คี่', 'คู่'], loop.index0),
]
%}
<tr{{ row.attributes.addClass(row_classes) }}>
{% สำหรับเซลล์ในแถว.เซลล์ %}
<{{ cell.tag }}{{ cell.attributes }}>
{{- เซลล์เนื้อหา -}}
</{{ cell.tag }}>
{% สิ้นสุดสำหรับ %}
</tr>
{% สิ้นสุดสำหรับ %}
</tbody>
{% อื่นถ้าว่างเปล่า %}
<tbody>
<tr class="คี่">
<td colspan="{{ header_columns }}" class="empty message">{{ ว่าง }}</td>
</tr>
</tbody>
{% เอนดิฟ %}
{% ถ้าส่วนท้าย %}
<เท้า>
{% สำหรับแถวในส่วนท้าย %}
<tr{{ row.attributes }}>
{% สำหรับเซลล์ในแถว.เซลล์ %}
<{{ cell.tag }}{{ cell.attributes }}>
{{- เซลล์เนื้อหา -}}
</{{ cell.tag }}>
{% สิ้นสุดสำหรับ %}
</tr>
{% สิ้นสุดสำหรับ %}
</tfoot>
{% เอนดิฟ %}
</ตาราง>
content_entity_example ใช้งานได้ดี แต่ฉันไม่สามารถโหลดเทมเพลตของตัวเองได้