แทนที่เทมเพลตฟิลด์ด้วยโมดูลที่กำหนดเอง


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()

สิ่งนี้ถือเป็นสิ่งที่ดีสำหรับ Views เช่นกัน โดยสรุปคุณเพียงแค่ต้องค้นหาชื่อที่ไม่ซ้ำกันที่ถูกต้องของการใช้ชุดรูปแบบเดิมที่คุณต้องการแทนที่ (โดยทั่วไปกำหนดไว้ในโมดูลแหล่งที่มา) เพิ่มเบ็ด preprocess และเพิ่มข้อเสนอแนะของคุณแทนที่มี


ในโมดูลที่กำหนดเองของฉันฉันมีรายการให้เลือกสำหรับการเลือกเทมเพลตที่จะใช้ ฉันมี 3 ไฟล์ tpl ดังนั้นฉันจะทำสิ่งนี้ได้อย่างไร
Fazeela Abu Zohra

เราจะแทนที่ฟิลด์เนื้อความของแบบฟอร์มโหนดได้อย่างไรหากมีหลายประเภทโหนด
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;
}

จากนั้นใส่ไฟล์ไดเรกทอรี / แม่แบบที่มีแม่แบบฟิลด์เช่นนี้ (มาตรฐาน) และตั้งชื่อฟิลด์ - 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>

หลังจากล้างแคชธีมของคุณจะใช้เทมเพลตที่จัดเก็บนี้ยกเว้นว่ามันจะไม่ถูกแทนที่ด้วยธีมซึ่งหมายความว่าคุณยังสามารถแทนที่เทมเพลตนี้ในธีมของคุณได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.