Điểm:0

Làm cách nào để kết xuất chính xác các liên kết trong danh sách mục tùy chỉnh khi sử dụng mảng kết xuất phức tạp?

lá cờ ar

Tôi muốn sử dụng mẫu danh sách mục tùy chỉnh trong mô-đun thay đổi <h3> nhãn. Các mục tôi đang kết xuất là mảng kết xuất liên kết.

Khi tôi sử dụng mẫu mặc định, mảng kết xuất liên kết hoạt động chính xác và xuất ra các liên kết. Khi tôi sử dụng mẫu tùy chỉnh, các liên kết không còn xuất hiện nữa. Tôi có thiếu một bước không?

Đây là mã tôi đang sử dụng trong mô-đun.

function mymodule_theme($current, $type, $theme, $path) {
  trở lại [
    'mymodule__item_list' => [
      'biến' => [
        'mặt hàng' => [
          'thuộc tính' => [],
          'giá trị' => [],
        ],
        'tiêu đề' => '',
        'list_type' => 'ul',
        'trình bao bọc_thuộc tính' => [],
        'thuộc tính' => [],
        'trống' => NULL,
        'bối cảnh' => [],
      ],
      'mẫu' => 'mymodule--item-list',
    ],
  ];
}

Tệp mẫu /templates/mymodule--item-list.html.twig chứa mã sau đây.

{#
/**
 * @tập tin
 * Triển khai chủ đề tùy chỉnh cho danh sách mục.
 *
 * Các biến có sẵn:
 * - mục: Danh sách các mục.Mỗi mục chứa:
 * - thuộc tính: Thuộc tính HTML được áp dụng cho từng mục danh sách.
 * - giá trị: Nội dung của phần tử danh sách.
 * - tiêu đề: Tiêu đề của danh sách.
 * - list_type: Thẻ cho phần tử danh sách ("ul" hoặc "ol").
 * - wrapper_attributes: Thuộc tính HTML được áp dụng cho trình bao bọc danh sách.
 * - thuộc tính: Thuộc tính HTML sẽ được áp dụng cho danh sách.
 * - trống: Thông báo hiển thị khi không có mục nào. Giá trị được phép là một
 * chuỗi hoặc kết xuất mảng.
 * - bối cảnh: Danh sách dữ liệu theo ngữ cảnh được liên kết với danh sách. Có thể chứa:
 * - list_style: Kiểu danh sách tùy chỉnh.
 *
 * @xem template_pre process_item_list()
 *
 * @ingroup theo chủ đề
 */
#}
{% nếu context.list_style %}
  {%- đặt thuộc tính = attribute.addClass('item-list__' ~ context.list_style) %}
{% endif %}
{% nếu mục hoặc trống %}
  {%- nếu tiêu đề không trống -%}
    <p><strong>{{ title }}</strong></p>
  {%- endif -%}

  {%- nếu mục -%}
    <{{ list_type }}{{ thuộc tính }}>
    {%- cho mục trong mục -%}
      <li{{ item.attributes }}>{{ item.value }}</li>
    {%- endfor -%}
    </{{ list_type }}>
  {%- khác -%}
    {{- trống rỗng -}}
  {%- endif -%}
{%- endif %}

Trong mô-đun, tôi tập hợp các mục liên kết vào danh sách không có thứ tự bằng mã sau.

// $foo và $bar được đặt từ mã trước đó.
$commonUsedForItems = [];

foreach ($commonUsedfor as $name) {
  $url = Url::fromRoute('mymodule.page', [], [
    'truy vấn' => [
      'foo' => $foo,
      'thanh' => $thanh,
      'tên' => $tên,
    ],
  ]);

  // Tạo một mảng các mảng kết xuất liên kết.
  $commonUsedForItems[] = [
    '#type' => 'liên kết',
    '#title' => $this->t($name),
    '#url' => $url,
  ];
}

$commonUsedForRenderArray = [
  '#theme' => 'mymodule__item_list',
  '#type' => 'ul',
  '#title' => 'Thường dùng cho:',
  '#items' => $commonUsedForItems,
  '#attributes' => ['class' => 'commonUsedFor'],
  '#wrapper_attributes' => ['lớp' => 'vùng chứa'],
];

Đoạn mã trên hoạt động chính xác thay đổi '#theme' => 'mymodule__item_list', đến '#theme' => 'item_list',.

Mã vì nó là loại hoạt động, nhưng nó in ra các dấu đầu dòng trống.

Tôi biết tôi có thể hoàn nguyên $commonUsedForItems mảng để đánh dấu và mã hóa cứng HTML, nhưng tôi đang cố gắng tách biệt HTML và PHP nhiều nhất có thể.

Bạn còn ý kiến ​​nào không?

Kevin avatar
lá cờ in
https://drupal.stackexchange.com/a/136772/57
Protomancer avatar
lá cờ ar
@Kevin rất tốt để biết nhưng không giúp giải quyết các gạch đầu dòng trống. Tiếp tục hoạt động như cũ.
4uk4 avatar
lá cờ cn
Để sử dụng mẫu lõi làm móc cơ sở, bạn cần có tên như `item_list__mymodule`.
lá cờ cn
Gọi [`template_pre process_item_list`](https://api.drupal.org/api/drupal/core%21includes%21theme.inc/function/template_pre process_item_list/9.2.x) và thiết lập chính xác từng `items` (a cấu trúc với các khóa `giá trị` và `thuộc tính` như được sử dụng trong mẫu của bạn), đây là phần bạn hiện đang thiếu

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.