Ganti template bidang dengan modul khusus


13

Alih-alih menambahkan file tpl (dalam hal ini, media-youtube-video.tpl.php) ke tema. Bagaimana saya bisa mengganti templat bidang dari modul khusus? Termasuk saat bidang digunakan dalam Tampilan.

Jawaban:


12

Saya yakin pasti ada cara yang lebih mudah untuk melakukan ini, tetapi inilah yang biasanya saya lakukan:

1. Daftarkan implementasi tema utama dengan registri tema Drupal. Jadi, di mymod_theme(), tambahkan item baru. The variableskey harus sesuai bahwa dari media_youtube_videoyaitu tema

/**
 * 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. Tambahkan kait praproses untuk implementasi tema asli dan sarankan implementasi baru Anda di sini.

/*
 * 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';
}

Saran dievaluasi oleh sistem tema dengan cara LIFO . Anda dapat membaca lebih lanjut tentang ini di sini .

Misalkan Anda menyadari bahwa modul lain juga mengikuti pendekatan yang sama dengan yang ini untuk mengesampingkan implementasi, maka Anda dapat mengimplementasikan hook_module_implements_alter()dan memaksa hook_preprocess_THEME()(lihat di atas) Anda untuk dipanggil yang terakhir. Anda bisa baca di hook_module_implements_alter() sini .

Ini berlaku untuk Tampilan juga. Singkatnya, Anda hanya perlu mengetahui nama unik yang benar dari implementasi tema asli yang ingin Anda timpa (biasanya didefinisikan dalam modul sumber), tambahkan kait praproses dan tambahkan saran utama Anda di sana.


Dalam modul khusus saya, saya punya daftar pilih untuk memilih template untuk diterapkan. Saya punya 3 file tpl. Jadi, bagaimana saya bisa melakukan ini.
Fazeela Abu Zohra

Bagaimana kita bisa menimpa bidang tubuh dari bentuk simpul jika ada banyak jenis simpul?
Sukhjinder Singh

3

Anda juga dapat decalare tema baru dalam modul dengan cara ini:

/**
* 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;
}

Kemudian masukkan file direktori / template yang berisi template field seperti ini (standar) dan beri nama field - field-nameofyourfield.tpl.php:

<div class="<?php print $classes; ?>"<?php print $attributes; ?>>
  <?php if (!$label_hidden): ?>
    <div class="field-label"<?php print $title_attributes; ?>><?php print $label ?>:&nbsp;</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>

Setelah mengosongkan cache, tema Anda akan menggunakan templat yang diarsipkan ini kecuali itu tidak ditimpa oleh tema itu sendiri, yang berarti Anda masih bisa menimpa templat ini di tema Anda.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.