it-swarm-vi.com

Biến tiền xử lý chỉ cho một số khối nhất định

Có thể các biến tiền xử lý chỉ cho các khối nhất định? Tôi đã tạo chức năng như vậy: mytheme_preprocess_block__aggregator(&$vars) nhưng nó không hoạt động.

-- BIÊN TẬP --

Nó dường như được sửa trong Drupal 8 https://drupal.org/node/1751194

10
ya.teck

Thật không may, không có cách nào để làm điều đó như thế (tương tự như hook_form_alter ()).

Cách tốt nhất để làm điều này là sử dụng $ biến ['block'] -> giá thầu để chỉ áp dụng sửa đổi cho các khối bạn muốn:

function mytheme_preprocess_block(&$variables) {
  if ($variables['block']->bid === 'target_block_id') {
    // do something for this block
  } else if ($variables['block']->bid === 'other_target_block_id') {
    // do something else for this other block
  }
}
20
Alex Weber

Chỉ cần xác nhận, trong Drupal 8 bạn có thể viết các hàm tiền xử lý cho các khối cụ thể. Ví dụ:

Drupal 8

mytheme_preprocess_block__system_branding_block(&$vars) {
  // Make changes to the the system branding block
}

Nhưng bạn cũng có thể sử dụng hook_pre process_block và ID plugin:

function mytheme_preprocess_block(&$vars) {
  if ($vars['plugin_id'] == 'system_branding_block') {
    // Make changes to the the system branding block
  }
}

Như Alex đã đề cập, trong Drupal 7 bạn sẽ phải gắn bó với HOOK_pre process_block và kiểm tra id:

Drupal 7

mytheme_preprocess_block(&$vars) {
  if ($vars['block']->bid === 'target_block_id') {
    // make changes to this block
  }
}
2
bryanbraun