it-swarm.asia

متغيرات المعالجة المسبقة فقط لبعض الكتل

هل من الممكن متغيرات المعالجة المسبقة فقط لبعض الكتل؟ لقد أنشأت مثل هذه الوظيفة: mytheme_preprocess_block__aggregator(&$vars) لكنها لا تعمل.

-- تعديل --

يبدو أنه تم إصلاحه في Drupal 8 https://drupal.org/node/1751194

10
ya.teck

لسوء الحظ ، لا توجد طريقة للقيام بذلك على هذا النحو (على غرار hook_form_alter ()).

أفضل طريقة للقيام بذلك هي استخدام المتغيرات $ ['block'] -> لتطبيق التعديلات فقط على الكتل التي تريدها:

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

للتأكيد فقط ، في Drupal 8 يمكنك كتابة وظائف ما قبل المعالجة لكتل ​​معينة. على سبيل المثال:

دروبال 8

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

ولكن يمكنك أيضًا استخدام hook_preprocess_block ومعرف المكون الإضافي:

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

كما ذكر أليكس ، في Drupal 7 يجب عليك الالتزام بـ HOOK_preprocess_block ، والتحقق من الهوية:

دروبال 7

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