Score:0

ฉันจะแสดงลิงก์ในรายการแบบกำหนดเองอย่างถูกต้องได้อย่างไรเมื่อใช้อาร์เรย์แสดงผลที่ซับซ้อน

ธง ar

ฉันต้องการใช้เทมเพลตรายการสินค้าแบบกำหนดเองในโมดูลที่เปลี่ยนแปลง <h3> แท็ก รายการที่ฉันกำลังเรนเดอร์คืออาร์เรย์เรนเดอร์ลิงก์

เมื่อฉันใช้เทมเพลตเริ่มต้น อาร์เรย์แสดงลิงก์ทำงานอย่างถูกต้องและแสดงผลลิงก์ เมื่อฉันใช้เทมเพลตแบบกำหนดเอง ลิงก์จะไม่ปรากฏอีกต่อไป ฉันพลาดขั้นตอนหรือไม่?

นี่คือรหัสที่ฉันใช้ในโมดูล

ฟังก์ชัน mymodule_theme($existing, $type, $theme, $path) {
  กลับ [
    'mymodule__item_list' => [
      'ตัวแปร' => [
        'รายการ' => [
          'คุณสมบัติ' => [],
          'ค่า' => [],
        ]
        'ชื่อเรื่อง' => '',
        'list_type' => 'ul',
        'wrapper_attributes' => [],
        'คุณสมบัติ' => [],
        'ว่าง' => โมฆะ
        'บริบท' => [],
      ]
      'เทมเพลต' => 'mymodule--item-list',
    ]
  ];
}

ไฟล์เทมเพลต /templates/mymodule--item-list.html.twig มีโค้ดต่อไปนี้

{#
/**
 * @ไฟล์
 * การใช้งานธีมที่กำหนดเองสำหรับรายการสินค้า
 *
 * ตัวแปรที่มีอยู่:
 * - รายการ: รายการของรายการแต่ละรายการประกอบด้วย:
 * - แอตทริบิวต์: แอตทริบิวต์ HTML ที่จะใช้กับแต่ละรายการ
 * - ค่า: เนื้อหาขององค์ประกอบรายการ
 * - ชื่อเรื่อง: ชื่อเรื่องของรายการ
 * - list_type: แท็กสำหรับองค์ประกอบรายการ ("ul" หรือ "ol")
 * - wrapper_attributes: แอตทริบิวต์ HTML ที่จะใช้กับรายการ wrapper
 * - แอตทริบิวต์: แอตทริบิวต์ HTML ที่จะใช้กับรายการ
 * - ว่าง: ข้อความที่จะแสดงเมื่อไม่มีรายการ ค่าที่อนุญาตคือ a
 * สตริงหรือเรนเดอร์อาร์เรย์
 * - บริบท: รายการข้อมูลบริบทที่เกี่ยวข้องกับรายการ อาจมี:
 * - list_style: สไตล์รายการที่กำหนดเอง
 *
 * @ดู template_preprocess_item_list()
 *
 * @ingroup ธีมได้
 */
#}
{% ถ้าบริบท.list_style %}
  {%- กำหนดแอตทริบิวต์ = attributes.addClass('item-list__' ~context.list_style) %}
{% เอนดิฟ %}
{% ถ้ารายการหรือว่างเปล่า %}
  {%- ถ้าชื่อเรื่องไม่ว่างเปล่า -%}
    <p><strong>{{ ชื่อเรื่อง }}</strong></p>
  {%- เอนดิฟ -%}

  {%- ถ้ารายการ -%}
    <{{ list_type }}{{ คุณลักษณะ }}>
    {%- สำหรับรายการในรายการ -%}
      <li{{ item.attributes }}>{{ item.value }}</li>
    {%- สิ้นสุดสำหรับ -%}
    </{{ list_type }}>
  {%- อื่น -%}
    {{- ว่างเปล่า -}}
  {%- เอนดิฟ -%}
{%- เอนดิฟ %}

ในโมดูล ฉันรวบรวมรายการลิงก์เป็นรายการที่ไม่เรียงลำดับโดยใช้รหัสต่อไปนี้

// $foo และ $bar ถูกกำหนดจากโค้ดก่อนหน้านี้
$commonlyUsedForItems = [];

foreach ($commonlyUsedfor เป็นชื่อ $) {
  $url = Url::fromRoute('mymodule.page', [], [
    'แบบสอบถาม' => [
      'foo' => $ฟู,
      'บาร์' => $บาร์,
      'ชื่อ' => $ชื่อ,
    ]
  ]);

  // สร้างอาร์เรย์ของอาร์เรย์เรนเดอร์ลิงก์
  $commonlyUsedForItems[] = [
    '#type' => 'ลิงค์',
    '#title' => $this->t($ชื่อ),
    '#url' => $url,
  ];
}

$commonlyUsedForRenderArray = [
  '#theme' => 'mymodule__item_list',
  '#type' => 'ul',
  '#title' => 'ใช้สำหรับ:',
  '#items' => $commonlyUsedForItems,
  '#attributes' => ['class' => 'commonlyUsedFor'],
  '#wrapper_attributes' => ['คลาส' => 'คอนเทนเนอร์'],
];

รหัสด้านบนทำงานได้อย่างถูกต้องในการเปลี่ยนแปลง '#theme' => 'mymodule__item_list', ถึง '#theme' => 'item_list',.

รหัสเป็นแบบใช้งานได้ แต่จะพิมพ์สัญลักษณ์แสดงหัวข้อย่อยที่ว่างเปล่าออกมา

ฉันรู้ว่าฉันสามารถคืนค่า $commonlyUsedForItems อาร์เรย์เพื่อมาร์กอัปและฮาร์ดโค้ด HTML แต่ฉันพยายามแยก HTML และ PHP ออกจากกันให้มากที่สุด

คุณมีความคิดใด ๆ ?

Kevin avatar
in flag
https://drupal.stackexchange.com/a/136772/57
Protomancer avatar
ar flag
@Kevin น่ารู้ แต่ไม่ได้ช่วยแก้ไขสัญลักษณ์แสดงหัวข้อย่อยที่ว่างเปล่า ยังคงทำหน้าที่เหมือนเดิม
4uk4 avatar
cn flag
หากต้องการใช้เทมเพลตหลักเป็น hook พื้นฐาน คุณต้องมีชื่อเช่น `item_list__mymodule`
cn flag
ซึ่งเรียกใช้ [` template_preprocess_item_list`](https://api.drupal.org/api/drupal/core%21includes%21theme.inc/function/template_preprocess_item_list/9.2.x) และตั้งค่า "รายการ" แต่ละรายการอย่างถูกต้อง (a โครงสร้างด้วยคีย์ `value` และ `attributes` ตามที่ใช้ในเทมเพลตของคุณ) ซึ่งเป็นส่วนที่คุณขาดหายไปในปัจจุบัน

โพสต์คำตอบ

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