it-swarm.asia

كيفية توفير قالب لوضع عرض معين؟

أريد أن أضع نمط عرض نتيجة البحث مع قالب.

لقد كان في رأسي أن تسمية عقدة ملف قالب - مقالة - search-result.tpl.php ستفعل الحيلة ، لكن من الواضح أنني مخطئ في ذلك.

أدرك أنه يمكنني عمل عقدة - article.tpl.php وضمن هذا الاختيار $ view_mode ، ولكن هذا أمر محرج مع جميع أوضاع العرض الأخرى التي لا أرغب في تشكيلها.

أفكار؟

47
artfulrobot

يجب أن تؤدي إضافة اقتراحات ربط السمة في وظيفة معالجة العقدة إلى الحيلة:

function MYMODULE_preprocess_node(&$vars) {
  if ($vars['node']->type == 'article' && $vars['view_mode'] == 'search_result') {
    $vars['theme_hook_suggestions'][] = 'node__article__search_result';
  }
}

بعد محو ذاكرة التخزين المؤقت ، يجب أن تكون قادرًا على استخدام العقدة - المقالة - search-result.tpl.php لاسم ملف القالب الخاص بك.

ملحوظة يمكنك أيضًا القيام بذلك في ملف template.php الخاص بالسمة عن طريق استدعاء الوظيفة MYTHEME_preprocess_node() بدلاً من ذلك.

46
Clive

أوضاع عرض الكيان تضيف الوحدة النمطية اقتراحات القالب هذه تلقائيًا

Drupal 7 خلف لـ أوضاع البناء والتي ستسمح للمشرفين بتحديد أوضاع العرض المخصصة للكيانات. تتم إضافة الكيانات المخصصة إلى سجل الكيان عبر hook_entity_info_alter () بحيث تكون كذلك متاحة لأي كود يستخدم لكيانget_info () لتقديم قائمة بأوضاع العرض للكيان. وهذا يشمل العقدة وحقول مرجع المستخدم ، وطرق العرض ، وما إلى ذلك.

3
Bas

إليك وظيفة تسمح لك بإضافة وظائف جديدة ديناميكيًا. كما تستدعي وظيفة المعالجة المسبقة المقابلة إذا كان لديك وظيفة معلن عنها.

ثم اتصل بـ drush cache-clear theme-registry لبدء العمل.

لاستخدامه ، استبدل THEME باسم السمة ، وضعه في ملف theme.php الخاص بالسمات.

على سبيل المثال بالنسبة لموضوع يسمى Droid ، يمكنك تسميته droid_preprocess_node(&$variables, $hook) {...

function THEME_preprocess_node(&$variables, $hook) {
  $view_mode = $variables['view_mode'];
  $content_type = $variables['type'];
  $variables['theme_hook_suggestions'][] = 'node__' . $view_mode;
  $variables['theme_hook_suggestions'][] = 'node__' . $view_mode . '_' . $content_type;

  $view_mode_preprocess = 'THEME_preprocess_node_' . $view_mode . '_' . $content_type;
  if (function_exists($view_mode_preprocess)) {
    $view_mode_preprocess($variables, $hook);
  }

  $view_mode_preprocess = 'THEME_preprocess_node_' . $view_mode;
  if (function_exists($view_mode_preprocess)) {
    $view_mode_preprocess($variables, $hook);
  }
}
2
Elijah Lynn