แทนการเพิ่มไฟล์ tpl (ในกรณีนี้ media-youtube-video.tpl.php) ให้กับธีม ฉันจะลบล้างเทมเพลตฟิลด์จากโมดูลที่กำหนดเองได้อย่างไร รวมถึงเมื่อใช้ฟิลด์ในมุมมอง
แทนการเพิ่มไฟล์ tpl (ในกรณีนี้ media-youtube-video.tpl.php) ให้กับธีม ฉันจะลบล้างเทมเพลตฟิลด์จากโมดูลที่กำหนดเองได้อย่างไร รวมถึงเมื่อใช้ฟิลด์ในมุมมอง
คำตอบ:
ฉันแน่ใจว่าต้องมีวิธีที่ง่ายกว่าในการทำเช่นนี้ แต่นี่คือสิ่งที่ฉันมักจะทำ:
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 และเพิ่มข้อเสนอแนะของคุณแทนที่มี
คุณสามารถรูปลอกชุดรูปแบบใหม่ในโมดูลด้วยวิธีนี้:
/**
* 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 ?>: </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>
หลังจากล้างแคชธีมของคุณจะใช้เทมเพลตที่จัดเก็บนี้ยกเว้นว่ามันจะไม่ถูกแทนที่ด้วยธีมซึ่งหมายความว่าคุณยังสามารถแทนที่เทมเพลตนี้ในธีมของคุณได้