Заміна шаблону поля за допомогою спеціального модуля


13

Замість того, щоб до теми додавати файли tpl (у цьому випадку media-youtube-video.tpl.php). Як я можу змінити шаблони полів із спеціального модуля? У тому числі, коли поле використовується в Перегляді.

Відповіді:


12

Я впевнений, що для цього повинен бути простіший спосіб, але я зазвичай це роблю:

1. Зареєструйте переважну реалізацію теми в реєстрі тем Drupal. Отже, в mymod_theme(), додайте новий елемент. variablesКлюч повинен збігатися з media_youtube_videoтемою , тобто

/**
 * 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. Додайте гачок попередньої обробки для оригінальної реалізації теми та запропонуйте тут свою нову реалізацію.

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

Пропозиції оцінюються тематичною системою LIFO . Більше про це можна прочитати тут .

Припустимо, вам відомо, що інший модуль також дотримується того ж підходу, що і цей, щоб переосмислити реалізацію, тоді ви можете реалізувати hook_module_implements_alter()і змусити ваш hook_preprocess_THEME()(див. Вище) називатися останнім. Про це можна прочитати hook_module_implements_alter() тут .

Це також добре для переглядів. Підсумовуючи це, вам просто потрібно дізнатися правильну унікальну назву оригінальної реалізації теми, яку ви хочете змінити (як правило, визначено у вихідному модулі), додати гачок попередньої обробки та додати туди свою переважну пропозицію.


У своєму спеціальному модулі я маю список вибору для вибору шаблону, який потрібно застосувати. У мене є 3 tpl файли. Так як я можу це зробити.
Фазеела Абу-Зора

Як ми можемо перекрити поле тіла форми вузла, якщо існує багато типів вузлів?
Sukhjinder Singh

3

Ви також можете обезголовити нову тему в модулі таким чином:

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

Потім помістіть у файл каталогу / template, що містить такий шаблон поля (стандартний), і назви його поле - 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>

Після очищення кешу ваша тема буде використовувати цей поданий шаблон, якщо його не перекриє сама тема, а це означає, що ви можете все-таки замінити цей шаблон у своїй темі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.