Có phải ajax được sử dụng trong các khung nhìn gọi các móc tiền xử lý không?


6

Tôi có chế độ xem với một loạt các trường và tôi đang tạo kiểu cho các trường đó trong:

views-view-fields.html.twig

Trong tệp .theme của tôi, tôi cũng đang sử dụng hàm tiền xử lý để chuyển các biến bổ sung cho mẫu ở trên.

function theme_preprocess_views_view_fields(&$vars) {
  $vars['my_var'] = 'hello';
}

Vì vậy, trong mẫu twig, tôi có thể làm một cái gì đó như:

{% for field in fields -%}
  {{my_var}}
{%- endfor %}

Điều này hoạt động giống như một cơ duyên cho các trường được tải đầu tiên, nhưng khi tôi nhấn "Tải thêm" hoặc tôi sử dụng các bộ lọc bị lộ để lọc chế độ xem, các thành phần được tải khác sẽ không có my_var.

Bây giờ, "kinting" my_var trực tiếp trong tệp mẫu. Tôi thấy rằng my_var là NULL cho tất cả các phần tử khác được tải sau với Ajax và điều này khiến tôi nghĩ rằng vấn đề là do theme_pre process_view_view_fields được gọi một lần, lần đầu tiên trang được tải và hoàn toàn bị bỏ qua khỏi lệnh gọi Ajax.

Không phải quá trình tiền xử lý này được gọi và xử lý bởi cuộc gọi Ajax mà Drupal đang thực hiện trên chính khung nhìn?

Nếu không, có cách nào để truy vấn Drupal để chạy lại hook này khi các phần tử khác được tải không?

Cảm ơn!


1
"kinting" haha ​​đã làm cho ngày của tôi.
Không có Sssweat

:) rất vui vì nó đã làm! Bạn có bất cứ đề nghị là tốt?
Drupalotto

@Drupalotto bạn đã thử tắt bộ nhớ cache của lượt xem chưa? Chỉ cần kiểm tra lý do.
Jonh

@neetu morwani ..
Jonh

Bộ nhớ đệm trong chế độ xem bị tắt. Không có vẻ như vấn đề bộ nhớ đệm. Hook_pre process_view_view không được gọi khi tập hợp các hàng tiếp theo được gọi thông qua máy nhắn tin Ajax? Có cách nào để tiền xử lý các hàng mảng biến đến từ AJAX không?
neetu morwani

Câu trả lời:


2

Trong mẫu "view-view-Field.html.twig" có ba biến được trả về: "view", "field", "row" bạn có thể thấy điều này ở đây .

Vì vậy, để thêm các biến tùy chỉnh của bạn, bạn cần đặt nó vào ba biến như dưới đây

 function dt8_preprocess_views_view_field(&$vars)
  {
    $vars['row']->my_var = 'Hey';
  }

và trong mẫu "view-view-Field.html.twig" của chúng tôi, chúng tôi in int như thế này

{{ row.my_var }}
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.