2015-12-05 13 views
5

मैं कैसे Drupal 7 में यह करने के लिए पूरी तरह से पता कर रहा हूँ के भीतर hook_theme का उपयोग कर टहनी को तो मैं क्या मैं सामान्य रूप से ड्रुपल 7पासिंग चर एक मॉड्यूल

का उपयोग करते हैं समझा जाएगा जब मैं hook_theme एक का प्रयोग कर एक कस्टम मॉड्यूल बनाने बहुत, यह बहुत शक्तिशाली और पुन: प्रयोज्य है!

/** 
* Implements hook_theme(). 
*/ 
function MODULE_theme() { 
    $themes = array(); 

    $themes['name_of_theme'] = array(
     'path' => drupal_get_path('module', 'module') .'/templates', 
     'template' => 'NAME_OF_TEPLATE', 
     'variables' => array(
     'param1' => NULL, 
     'param2' => NULL, 
    ), 
    ); 

    return $themes; 
} 

मैं तो

theme('name_of_theme', array(
    'param1' => 'VALUEA', 
    'param2' => 'VALUEB' 
)); 

इस का उपयोग कर तो वापसी होगी एचटीएमएल इस विषय कहेंगे और मैं खुशी होगी।

तो ड्रूपल 8 को इसके साथ पकड़ने की आवश्यकता है।

/** 
* Implements hook_theme(). 
*/ 
function helloworld_theme() { 
    $theme = []; 

    $theme['helloworld'] = [ 
    'variables' => [ 
     'param_1' => [], 
     'param_2' => 'hello', 
    ] 
    ]; 

    return $theme; 
} 

और मेरे नियंत्रक के भीतर मैं

$hello_world_template = array(
    '#theme' => 'helloworld', 
    'variables' => [ 
    'param_1' => 'hello world', 
    'param_2' => 'hello from another world' 
    ], 
); 

$output = drupal_render($hello_world_template, 
    array(
    'variables' => array(
     'param_1' => $param_1, 
     'param_2' => $param_2, 
    ) 
) 
); 

return [ 
    '#type' => 'markup', 
    '#markup' => $output 
]; 

मैं अपने टेम्पलेट के पर एक निर्गम हो रही है, का उपयोग कर रहा हूँ लेकिन क्या मैं यकीन नहीं है के बारे में, जहां मेरे पैरामीटर पास करने के लिए इतना है कि वे उपलब्ध हैं मेरे टेम्पलेट में (बस यह इंगित करने के लिए कि मेरे चर उपलब्ध हैं वे हुक_थीम में परिभाषित किए गए सिर्फ शून्य हैं)

मैं इस विचार के लिए भी खुला हूं कि मैं मूल रूप से गलत कर रहा हूं और मैं एक विकल्प के लिए खुला हूं मार्ग अगर मेरी विधि सबसे अच्छा अभ्यास नहीं है।

+0

बीटीडब्ल्यू। आपको 'drupal_render()' बहिष्कृत करने के बजाय '\ Drupal :: सेवा ('renderer') -> renderRoot()' का उपयोग करना चाहिए। – kenorb

उत्तर

1

मिले मुद्दा,

इस बदलते,

$hello_world_template = array(
    '#theme' => 'helloworld', 
    'variables' => [ 
    'param_1' => 'hello world', 
    'param_2' => 'hello from another world' 
    ], 
); 

यह करने के लिए,

$hello_world_template = array(
    '#theme' => 'helloworld', 
    '#param_1' => $param_1, 
    '#param_2' => $param_2 
); 

इम अब चर मैं गुजर रहा हूँ देखने के लिए सक्षम।

मैं अभी भी बेहतर विकल्प के लिए खुला हूं?

+1

सुझाव ड्रोपल रेंडर विधि को कॉल न करें। इसे एक रेंडर सरणी के रूप में रखें जितना संभव हो उतना जोड़ दें और अधिमानतः इसे आवश्यक होने पर ड्रोपल को प्रस्तुत करें। – Eyal

+0

हाय @Eyal मॉड्यूल पेज बनाने के लिए सबसे अच्छा अभ्यास क्या है? उसके बाद एक नियंत्रक बनाएँ जो एक सरणी लौटाता है? मुझे यकीन नहीं है कि इस सरणी को फिर से प्रस्तुत किया जाएगा। मुझे नहीं पता कि मैं समझ में आया हूं लेकिन मॉड्यूल पेज बनाते समय हम थीम की सामग्री पर इसे फिर से कर रहे हैं। जब तक कि यह एक ब्लॉक न हो तब तक आपकी टिप्पणियां अधिक समझ में आती हैं। –

+1

सर्वोत्तम अभ्यास एक नियंत्रक का उपयोग करना और एक रेंडर सरणी वापस करना है। रेंडर सरणी मुख्य सामग्री ब्लॉक के अंदर रखा जाएगा। – Eyal

संबंधित मुद्दे