Làm cách nào để thêm một biến cho mẫu Twig trong chức năng tiền xử lý của tôi?


10

Tôi đang sử dụng đoạn mã sau để xử lý trước các biến cho mẫu của mình:

function template_preprocess_imagegallery_format(&$vars) {
  template_preprocess_image_formatter($vars);
  $vars['image']['#theme'] = 'igimage';
  $vars['image']['#thumbnail'] = ImageStyle::load('thumbnail')->buildUrl($vars ['image']['#uri']);
  $vars['image']['#fullimage'] = file_create_url($vars ['image']['#uri']);
}

Biến #uri đã có sẵn và nếu tôi chỉ sửa đổi thì mọi thứ đều hoạt động tốt. Nhưng tôi cần thêm các biến bổ sung ở đây vì tôi cần hai kiểu khác nhau của cùng một hình ảnh. Nhưng chỉ cần thêm các biến đó vào mảng không hoạt động.

Nếu tôi kết xuất các biến có sẵn trong mẫu Twig của mình {{ dump(_context|keys) }}, tôi sẽ không thấy các biến tôi đã thêm ở đó. Nếu tôi cố gắng sử dụng chúng trong mẫu của mình, không có gì được chèn vào.

Tôi có thể thấy rằng các giá trị được thêm vào mảng, khi tôi kết xuất biến hình ảnh trong chủ đề kết xuất toàn bộ trường, tôi thấy các biến của mình trong mảng. Nhưng chúng vẫn không có sẵn trong mẫu biểu hiện chính biến hình ảnh.

Tôi cần làm gì khác để thêm một biến trong hàm tiền xử lý mà tôi có thể sử dụng trong mẫu Twig của mình?


Bạn có một khoảng trắng giữa tên mảng $varsvà các khóa của bạn (ví dụ ['image']). Tôi khá chắc chắn rằng điều đó không được phép.
othermachines 15/08/2015

Tôi đã xóa các khoảng trắng, nó không thực sự quan trọng và tôi có cùng kết quả có hoặc không có khoảng trắng. Các khoảng trắng là từ mã tôi đã sao chép từ một ví dụ.
Nhà khoa học điên

Bạn đã đổi tên chức năng? Không nên template_preprocess_imagegallery_formatthay thế 'mẫu' bằng tên chủ đề hoặc mô-đun của bạn. Bạn cũng sẽ cần xóa bộ nhớ cache.
othermachines 15/08/2015

Câu trả lời:


8

Cuối cùng tôi đã giải quyết được vấn đề, hóa ra vấn đề là tôi đã cố gắng thêm các biến trong bộ tiền xử lý sai. Chỉnh sửa #theme hoạt động ở đó, nhưng để thêm các biến tôi cần để xử lý trước chủ đề tôi đặt ở đó:

function template_preprocess_imagegallery_format(&$vars) {
  template_preprocess_image_formatter($vars);
  $vars['image']['#theme'] = 'igimage';
}

function template_preprocess_igimage(&$vars) {
    $vars['thumbnail'] = ImageStyle::load('thumbnail')->buildUrl($vars['uri']);
    $vars['fullimage'] = file_create_url($vars['uri']);
}

4

Tên chủ đề: atvdirect

  • tạo một tập tin atvdirect.theme trên thư mục gốc của bạn, ngoài atvdirect.info.yml
  • thêm mã dưới đây vào tập tin atvdirect.theme
  • sử dụng {{logopath}} trong page.html.twig

    <?php
    function atvdirect_preprocess_page(&$variables) {
      $variables['logopath'] = '/'.drupal_get_path('theme','atvdirect') .'/logo.png';
    }
    ?>
    

1
Cảm ơn bạn cuối cùng đã nói tập tin này nên được đặt vào.
Ryan H

Câu trả lời tuyệt vời, giải thích tốt.
Học sinh
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.