इकाई प्रीप्रोसेस फ़ंक्शन को कैसे परिभाषित करें


10

मेरा कस्टम मॉड्यूल एक कस्टम इकाई को परिभाषित करता है, जो EntityAPIController क्लास का विस्तार करता है। मैं इसे अपने मूल tpl.php फ़ाइल के माध्यम से मूल रूप से काम कर रहा हूँ, अर्थात् खेतों आदि को प्रदर्शित करने में कामयाब रहा। लेकिन मैं tpl.php फ़ाइल में कस्टम चर जोड़ने के लिए एक mymodule_preprocess_entityफ़ंक्शन (जैसा कि यहां बताया गया है ) बनाना चाहूंगा। लेकिन ऐसा फ़ंक्शन नहीं चल रहा है (कहा नहीं जाता है)।

इसके अलावा, जब मैं इस इकाई को प्रदर्शित करता हूं, तो मैंने देखा कि template_preprocess_entity(&$variables)Unit.module से फ़ंक्शन या तो नहीं चल रहा है।

कस्टम इकाई के लिए प्रीप्रोसेस फ़ंक्शन बनाने के लिए और क्या परिभाषित करने की आवश्यकता है?


mymodule का उपयोग करते हुए - सुझाव mytheme
rémy

जवाबों:


9

मैंने एक सामान्य mymodule_preprocess(&$variables, $hook)फ़ंक्शन बनाया और यह दिखाया कि विशिष्ट फ़ंक्शन नाम होना चाहिए mymodule_preprocess_myentitymyentityइकाई का उचित नाम कहां है।

इसलिए, यह कोड मेरे लिए काम कर रहा है:

function mymodule_preprocess(&$variables, $hook) {
  if (isset($variables['elements']['#entity_type'])) { // or maybe check for $hook name
    $function = __FUNCTION__ . '_' . $variables['elements']['#entity_type'];
    if (function_exists($function)) {
      $function($variables, $hook);
    }
  }
}

function mymodule_preprocess_myentity(&$vars) {
  ...
}

2

एक अधिक सामान्य दृष्टिकोण:

/**
 * Implements hook_preprocess().
 */
function mymodule_preprocess(&$variables, $hook) {
  if (isset($variables['elements']['#entity_type'])) {
    $myhook = "preprocess_{$variables['elements']['#entity_type']}_{$variables['elements']['#bundle']}_{$variables['elements']['#view_mode']}";
    $modules = module_implements($myhook);

    foreach ($modules as $module) {
      $function = "{$module}_{$myhook}";
      $function($variables);
    }
  }
}

दुर्भाग्य से module_implements()जाँच नहीं करता है कि सक्रिय विषय प्रीप्रोसेस हुक को लागू करता है या नहीं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.