कस्टम मॉड्यूल के साथ फ़ील्ड टेम्पलेट ओवरराइड करें


13

इसके बजाय tpl फ़ाइलें जोड़ने के लिए (इस मामले में, मीडिया- 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. जोड़े मूल विषय कार्यान्वयन के लिए एक 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() यहां पढ़ सकते हैं ।

यह व्यूज के लिए भी अच्छा है। सारांश में, आपको केवल मूल विषय कार्यान्वयन के सही अनूठे नाम का पता लगाना होगा जिसे आप ओवरराइड करना चाहते हैं (आमतौर पर स्रोत मॉड्यूल में परिभाषित किया गया है), एक प्रीप्रो हुक जोड़ें और वहां अपना ओवरराइडिंग सुझाव जोड़ें।


मेरे कस्टम मॉड्यूल में, मैं आवेदन करने के लिए टेम्पलेट का चयन करने के लिए एक चयन सूची हूं। मेरे पास 3 tpl फाइलें हैं। तो मैं यह कैसे कर सकता हूँ।
फ़ाज़िला अबू ज़ोहरा

यदि कई नोड प्रकार हैं, तो हम नोड फॉर्म के शरीर क्षेत्र को कैसे ओवरराइड कर सकते हैं?
सुखजिंदर सिंह

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

फिर / टेम्पलेट निर्देशिका फ़ाइल में रखें जिसमें फ़ील्ड टेम्पलेट इस तरह है (मानक) और इसे फ़ील्ड का नाम दें - फ़ील्ड- 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 Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.