2015-12-05 13 views
5

ich voll und ganz bewusst bin, wie diese 7 in Drupal zu tun, so werde ich erklären, was ich normalerweise Drupal tun mit 7.Passing Variablen innerhalb eines Moduls mit hook_theme Zweig

Wenn ein benutzerdefiniertes Modul macht ich hook_theme verwenden, um eine viel, es ist sehr mächtig und wiederverwendbar!

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

dann würde ich dieses Thema nennen

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

glücklich Dies würde dann wieder html und ich wäre mit.

Also Drupal 8 ist out müssen sich damit beschäftigen.

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

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

    return $theme; 
} 

und in meinem Controller Ich bin mit

$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 
]; 

ich eine Ausgabe auf meiner Vorlage bin immer, aber was Im nicht sicher ist, wo meine Parameter zu übergeben, damit sie verfügbar sind in meiner Vorlage (nur um darauf hinzuweisen, dass meine Variablen verfügbar sind, sind sie nur null, wie in hook_theme definiert)

Ich bin auch offen für die Idee, dass ich das grundlegend falsch machen könnte und ich bin offen für eine Alternative Route, wenn meine Methode nicht Best Practice ist.

+0

BTW. Sie sollten '\ Drupal :: service ('renderer') -> renderRoot()' anstelle von veraltetem 'drupal_render()' verwenden. – kenorb

Antwort

1

das Problem gefunden,

diese Änderung

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

dazu

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

Im fähig, jetzt die Variablen sehe ich vorbei bin.

Ich bin noch offen für eine bessere Option?

+1

Vorschlag rufen Sie nicht die Drupal Rendermethode auf. Halten Sie es als Render-Array so viel wie möglich und vorzugsweise drupal rendern es, wenn es nötig ist. – Eyal

+0

Hi @Eyal, was ist eine Best Practice für die Erstellung einer Modulseite? Erstellen Sie einen Controller und geben Sie ein Array zurück? Ich bin mir nicht sicher, was dieses Array dann rendern würde. Ich weiß nicht, ob es Sinn macht, aber wenn wir eine Modulseite erstellen, stimmen wir sie auf den Inhalt des Themas um. es sei denn, es ist ein Block, dann machen Ihre Kommentare mehr Sinn. –

+1

Die beste Vorgehensweise besteht darin, einen Controller zu verwenden und ein Render-Array zurückzugeben. Das Render-Array wird innerhalb des Hauptinhaltsblocks platziert. – Eyal

Verwandte Themen