Temaya tpl dosyaları eklemek (bu durumda media-youtube-video.tpl.php) yerine. Özel bir modülden alan şablonlarını nasıl geçersiz kılabilirim? Alanın bir Görünümde ne zaman kullanıldığı dahil.
Temaya tpl dosyaları eklemek (bu durumda media-youtube-video.tpl.php) yerine. Özel bir modülden alan şablonlarını nasıl geçersiz kılabilirim? Alanın bir Görünümde ne zaman kullanıldığı dahil.
Yanıtlar:
Bunu yapmak için daha kolay bir yol olmalı eminim ama bu tipik olarak ne:
1.
Kayıt Drupal tema kayıt ile bir ağır basan tema uygulanması. Böylece, mymod_theme()
yeni bir öğe ekleyin. variables
Anahtar eşleşmesi gerekir media_youtube_video
tema yani
/**
* Implements hook_theme().
*/
function mymod_theme() {
return array(
'my_media_youtube_video' => array(
'variables' => array('uri' => NULL, ...), // see media_youtube_theme() for this
// bundle the template file with the module itself
// i.e. theme/my-media-youtube-video.tpl.php
'template' => 'my-media-youtube-video',
'path' => drupal_get_path('module', 'mymod') . '/theme
)
);
}
2. Orijinal tema uygulaması için bir önişleme kancası ekleyin ve yeni uygulamanızı burada önerin .
/*
* Implements hook_preprocess_media_youtube_video().
*
* Or more generally, hook_preprocess_THEME().
*/
function mymod_preprocess_media_youtube_video(&$variables) {
// If your overriding implementation is not a template but
// is implemented in a different file,
// then remember to include the file explicitly at this point..
$variables['theme_hook_suggestions'][] = 'my_media_youtube_video';
}
Öneriler tema sistemi tarafından bir LIFO tarzında değerlendirilir. Bununla ilgili daha fazla bilgiyi buradan edinebilirsiniz .
Uygulamayı geçersiz kılmak için başka bir modülün de bu yaklaşımla aynı yaklaşımı izlediğini bildiğinizi varsayalım (yukarıya bakın) ve son hook_module_implements_alter()
çağırmaya zorlayabilirsiniz hook_preprocess_THEME()
. hook_module_implements_alter()
Burada okuyabilirsiniz .
Bu, Views için de geçerlidir. Özetle, sadece geçersiz kılmak istediğiniz orijinal tema uygulamasının benzersiz benzersiz adını bulmanız gerekir (genellikle kaynak modülünde tanımlanır), bir önişleme kancası ekleyin ve geçersiz kılma önerinizi buraya ekleyin.
Modülde yeni temayı da bu şekilde bildirebilirsiniz:
/**
* Implements hook_theme().
*/
function yourmodule_theme($existing, $type, $theme, $path) {
$theme = array();
$theme['field__field_nameofyourfield'] = array(
'render element' => 'content',
'base hook' => 'field',
'template' => 'field--field-nameofyourfield',
'path' => drupal_get_path('module', 'yourmodule') . '/templates',
);
return $theme;
}
Sonra böyle bir şablon (standart) içeren bir / template dizin dosyası koyun ve alana field - field-nameofyourfield.tpl.php adını verin:
<div class="<?php print $classes; ?>"<?php print $attributes; ?>>
<?php if (!$label_hidden): ?>
<div class="field-label"<?php print $title_attributes; ?>><?php print $label ?>: </div>
<?php endif; ?>
<div class="field-items"<?php print $content_attributes; ?>>
<?php foreach ($items as $delta => $item): ?>
<div class="field-item <?php print $delta % 2 ? 'odd' : 'even'; ?>"<?php print $item_attributes[$delta]; ?>><?php print render($item); ?></div>
<?php endforeach; ?>
</div>
</div>
Önbelleği temizledikten sonra temanızın kendisi tarafından geçersiz kılınmadıkça temanız bu dosyalanmış şablonu kullanır; bu, temanızdaki bu şablonu yine de geçersiz kılabileceğiniz anlamına gelir.