ฉันต้องการใช้เทมเพลตรายการสินค้าแบบกำหนดเองในโมดูลที่เปลี่ยนแปลง <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 ออกจากกันให้มากที่สุด
คุณมีความคิดใด ๆ ?