it-swarm-vi.com

Nhận đường dẫn đến tài sản chủ đề trong Twig mẫu

Tôi có một câu hỏi về việc nhận đường dẫn đến hình ảnh trong mẫu Twig. Hình ảnh không được gán cho một trường hoặc một cái gì đó. Chỉ là một hình ảnh tĩnh được lưu trữ trong "MYTHEME/image/icon /my-icon.png ".

Trong Drupal 7 Tôi nhận được đường dẫn trong node.template của mình với đoạn mã sau:

<img src="<?php print base_path() . path_to_theme(); ?>/image/icons">/my-icon.png

Làm thế nào nó hoạt động với in Drupal 8? Tôi đã cố gắng truyền một biến trong template_preprocess_node().

MYTHEME.theme:

$variables['images_path'] = \Drupal::theme()->getActiveTheme()->getPath() . '/image/';

Mẫu Twig:

<img src="{{ images_path  ~ 'icons/' ~ 'my-icon.png' }}">

Nó không hoạt động. Không có lỗi PHP, nhưng đường dẫn bị nói sai là http: //localhost/node/theme/template/image/icons/my-icon.png =.

24
Stephan Hofmann

bạn có thể sử dụng {{ base_path ~ directory }} sẽ khắc phục vấn đề tuyệt đối, không cần thực hiện bất kỳ quá trình tiền xử lý nào, cả hai biến này đều được bao gồm bởi lõi.

Ví dụ

<img src="{{ base_path ~ directory }}/images/logo.png" alt="My Logo" />

PS. Người trợ giúp ~ Trong twig là nối.

Chỉnh sửa: ít nhất là trong trang * .html.twig mẫu bao gồm biến base_path, có thể bạn sẽ cần phải xử lý trước cho các mẫu khác, bạn có thể dễ dàng kiểm tra với {{ dump() }} nếu có các biến

// File: THEMENAME.theme in your theme's root directory
function THEMENAME_preprocess(&$variables, $hook)
{
    $variables['base_path'] = base_path();
}
54
pjcarly

Theo mặc định, có một biến {{ directory }} Mà bạn có thể sử dụng các điểm đó vào thư mục chủ đề của mình. Vấn đề là, nó không tuyệt đối, giống như bạn đã thêm. Tôi nghĩ đó là một lỗi trong lõi bởi vì nó nên bao gồm đường dẫn cơ sở, nhưng việc thay đổi đó tất nhiên sẽ phá vỡ các trang web hiện có sử dụng nó.

Vì vậy, bạn cần thêm một/ở phía trước của nó; điều này sẽ phá vỡ nếu Drupal được cài đặt trong thư mục con. Bạn có thể mã hóa cứng trong mẫu của mình hoặc tiếp tục sử dụng base_path() như bạn đã làm trong 7.x trong một biến tùy chỉnh.

10
Berdir
<img src="/{{ directory }}/images/logo.png"/> 

làm việc cho tôi khi

<img src="{{ base_path ~ directory }}/images/logo.png" alt="My Logo" />

đã không

đối với mẫu nội dung, tôi đã phải sử dụng trong .module

   function hook_preprocess(&$variables, $hook) {

  $module_handler = Drupal::service('module_handler');
  $path = $module_handler->getModule('myModuleName')->getPath();

  if(isset($variables['region']) && $variables['region'] == 'content'){
    $variables['module_path'] = $path;
    $variables['http_Host'] = $_SERVER['HTTP_Host'];

  <img src="{{ module_path }}/images/error404.png" />
  <img src="//{{ http_Host }}/{{ module_path }}/images/error403.png" />
8
Matoeil