Kiểm tra xem đó có phải là trang đầu trong mẫu không


14

Tôi đang cố gắng hiển thị nội dung khi tôi ở trang đầu của trang web thử nghiệm Drupal 8 của mình, nhưng nội dung hiển thị trên mỗi trang:

{% if front_page %}
  <header role="banner">
    {% if logo %}
      <a href="{{ front_page }}" title="{{ 'Home'|t }}" rel="home">
        <img src="{{ logo }}" alt="{{ 'Home'|t }}"/>
      </a>
    {% endif %}
    <h1 style="color:black">TESTTESTTESTESTAET</h1>
<h1>test</h1

    {{ page.header }}
  </header>
{% endif %}

Tại sao điều này không hoạt động và làm thế nào tôi có thể làm cho công việc này?

Câu trả lời:


23

Biến bạn đang tìm kiếm được gọi là is_front:

{% if is_front %}

Các biến có sẵn cho một mẫu được ghi lại ở đầu tệp .html.twig, tuy nhiên, cũng có một bộ các biến mặc định có sẵn cho tất cả các mẫu (không được ghi lại trong mỗi mẫu đơn). Bạn có thể tìm thấy chúng trong _template_pre process_default_variables () .


Cảm ơn cái này đã làm việc! Có cách nào để thêm {{otherif}} sau câu lệnh if này không?
Stefan

Có, tài liệu Twig có chi tiết về điều đó: twig.sensiolabs.org/doc/tags/if.html
Cottser

21

Lưu ý rằng nếu bạn muốn cung cấp $variables['is_front']cho các mẫu không có, bạn có thể thêm phần này vào chức năng tiền xử lý có liên quan.

function themename_preprocess_menu(&$variables) {
  try {
    $variables['is_front'] = \Drupal::service('path.matcher')->isFrontPage();
  }
  catch (Exception $e) {
    $variables['is_front'] = FALSE;
  }
}

Nó được thực hiện theo cách tương tự trong template_pre process_page cho page.html.twig.

Câu trả lời tương tự ở đây


1
Điều này hữu ích cho tôi trong template_pre process_html, vì "is_front" không có sẵn theo mặc định trong html.html.twig
ben.hamelin

Tôi nghĩ bạn nên thêm url.path.is_frontvào như một bối cảnh bộ đệm. Xem bình luận này .
Andy

4

Giả sử rằng mẫu bạn đang sử dụng là page.html.twig, thì biến bạn đang tìm là is_front; front_pagechứa URL của trang trước, được khởi tạo template_preprocess_page()bằng mã sau.

$variables['front_page'] = \Drupal::url('<front>');

Đối với các tệp mẫu khác, Drupal không cung cấp bất kỳ biến nào cho bạn biết nếu người dùng đang truy cập trang trước. Sử dụng mã tương tự như mã được sử dụng từ template_preprocess_page(), bạn có thể đặt biến đó trong hàm tiền xử lý cho mẫu bạn đang sử dụng.

function mymodule_preprocess_HOOK(&$variables) {
  // An exception might be thrown.
  try {
    $variables['is_front'] = \Drupal::service('path.matcher')->isFrontPage();
  }
  catch (Exception $e) {
    // If the database is not yet available, set the default value.
    $variables['is_front'] = FALSE;
  }  
}

Thay thế HOOKbằng loại mẫu (ví dụ: trường cho mẫu field.hmtl.twig).


4

Bạn có thể lấy nó trực tiếp trong html.html.twig bằng root_path. Nó đã được xuất trên dòng 31 để đặt lớp cơ thể:

{% nếu không root_path%}

{% endif%}

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.