जवाबों:
मुझे यकीन है कि ऐसा करने का एक आसान तरीका होना चाहिए, लेकिन यह वही है जो मैं आमतौर पर करता हूं:
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. जोड़े मूल विषय कार्यान्वयन के लिए एक preprocess हुक और सुझाव है कि यहां अपना नया कार्यान्वयन।
/*
* 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()
यहां पढ़ सकते हैं ।
यह व्यूज के लिए भी अच्छा है। सारांश में, आपको केवल मूल विषय कार्यान्वयन के सही अनूठे नाम का पता लगाना होगा जिसे आप ओवरराइड करना चाहते हैं (आमतौर पर स्रोत मॉड्यूल में परिभाषित किया गया है), एक प्रीप्रो हुक जोड़ें और वहां अपना ओवरराइडिंग सुझाव जोड़ें।
आप इस तरह से मॉड्यूल में नई थीम भी घोषित कर सकते हैं:
/**
* 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;
}
फिर / टेम्पलेट निर्देशिका फ़ाइल में रखें जिसमें फ़ील्ड टेम्पलेट इस तरह है (मानक) और इसे फ़ील्ड का नाम दें - फ़ील्ड- 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>
कैश को साफ़ करने के बाद आपका विषय इस दायर टेम्पलेट का उपयोग करेगा जब तक कि यह विषय द्वारा स्वयं से अधिक नहीं हो, जिसका अर्थ है कि आप अभी भी अपने विषय में इस टेम्पलेट को ओवरराइड कर सकते हैं।