Score:1

ธีมตาราง EntityListBuilder.php โดยใช้ drupal/examples/content_entity_example เป็นฐาน

ธง nr

มีความคิดว่าฉันจะใช้ไฟล์ 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 ใช้งานได้ดี แต่ฉันไม่สามารถโหลดเทมเพลตของตัวเองได้

apaderno avatar
us flag
จากโค้ดไม่ชัดเจนว่าเมธอดใดคือการเรียก `parent::render()` เนื่องจากเราไม่รู้ว่าคลาสพาเรนต์คืออะไร
Score:0
ธง cn

มันควรจะง่ายเหมือนการตั้งค่า #ธีม บนโต๊ะนั่นแหละ ผู้ปกครอง :: แสดงผล () ผลตอบแทน:

$build = parent::render();
$build['table']['#theme'] = 'content_entity_example_table';
user14409370 avatar
nr flag
ขอบคุณ ไฟล์ twig ของฉันถูกเรียก แต่ถ้าฉันทำ {{ kint(header) }} ใน twig ที่กำหนดเอง มันจะว่างเปล่า ถ้าฉันปิดใช้งานฟังก์ชันธีม () ของฉัน ธีม drupal เริ่มต้นจะถูกเรียกซึ่งมีส่วนหัว ดังนั้นฉันคิดว่าฟังก์ชันธีมที่กำหนดเอง () ของฉันไม่ได้รับการกำหนดค่าอย่างถูกต้อง ฉันไม่พบเอกสารสำหรับการตั้งค่าที่ถูกต้อง
4uk4 avatar
cn flag
`$build['table']['#theme'] = 'table__content_entity_example';` ซึ่งกำหนดไว้ในธีม () เป็น `'base hook' => 'table'`

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา