Belirli görünüm modu için şablon nasıl sağlanır?


46

Arama sonucu görüntüleme modunu bir şablonla temalamak istiyorum.

Kafamda bir şablon dosya düğümünü isimlendirmeyi düşündüm - makale - search-result.tpl.php hile yapardı, ama açıkça bu konuda yanıldım.

Article.tpl.php düğümü ve $ check_mode bu kontrolün içinde yapabileceğimin farkındayım, ancak şablon yapmak istemediğim diğer tüm görünüm modlarında garip.

Fikirler?

Yanıtlar:


45

Bir düğüm ön işleme fonksiyonunda tema kancası önerileri eklemek, hileyi yapmalıdır:

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

Önbellekleri temizledikten sonra, şablon dosya adınız için node - article - search-result.tpl.php kullanabilmelisiniz.

NB. Bunu, MYTHEME_preprocess_node()bunun yerine fonksiyonu çağırarak temanızın template.php dosyasında da yapabilirsiniz .


2
Parlak! Teşekkür ederim. : Sadece burada aynı tavsiye bir bağlantı eklemek üzereyken mearra.com/blogs/juha-niemi/drupal-7-custom-node-view-modes
artfulrobot

1
Bilginize, Sorun :) search_resultuygulamak gerekmez böylece zaten bir görünüm modu olarak bildirilmiş hook_entity_info_alter()sizin durumunuzda
Clive

3

Varlık görünüm modları modülü otomatik olarak bu şablon önerileri ekler

Drupal 7 halefi, yöneticilerin varlıklar için özel görünüm modları tanımlamasına olanak tanıyacak Derleme modları . Özel varlıklar varlık kayıt defterine hook_entity_info_alter () aracılığıyla eklenir, böylece varlık için görünüm modlarının bir listesini sağlamak üzere entity_get_info () kullanan herhangi bir kod kullanılabilir. Bu, düğüm ve kullanıcı başvuru alanlarını, Görünümleri vb. İçerir.


2

İşte dinamik olarak yenilerini eklemenizi sağlayan bir fonksiyon. Ayrıca, bir ilanınız varsa ilgili ön işleme fonksiyonunu çağırır.

O drush cache-clear theme-registryzaman işe almak için arayın .

Kullanmak için THEME'yi tema adınızla değiştirin ve themes template.php dosyasına yerleştirin.

Mesela Droid isimli bir tema için buna ad verin 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);
  }
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.