2015-12-05 11 views
5

Sono pienamente consapevole come fare questo in Drupal 7 in modo vi spiegherò quello che farebbe normalmente utilizzando Drupal 7.variabili Passando alla ramoscello utilizzando hook_theme all'interno di un modulo

Quando si effettua un modulo personalizzato che uso hook_theme un molto, è molto potente e riutilizzabile!

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

Vorrei poi chiamo questo tema utilizzando

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

Questo sarebbe poi tornare html e sarei felice.

Quindi Drupal 8 è fuori necessità di fare i conti con esso.

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

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

    return $theme; 
} 

e dentro il mio controller sto sto usando

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

sto ottenendo un'uscita del mio modello, tuttavia ciò che Im non sicuro circa è dove far passare i miei parametri in modo che siano disponibili nel mio modello (solo per segnalare che le mie variabili sono disponibili sono nulle come definito in hook_theme)

Sono anche aperto all'idea che potrei fare il fondamentalmente sbagliato e sono aperto a un'alternativa percorso se il mio metodo non è la migliore pratica.

+0

Btw. Dovresti usare '\ Drupal :: service ('renderer') -> renderRoot()' invece di deprecato 'drupal_render()'. – kenorb

risposta

1

Trovato il problema,

cambiare questo,

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

a questo,

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

Im ora in grado vedere le variabili che sto passando.

Sono ancora aperto per un'opzione migliore?

+1

Suggerimento non chiamare il metodo di rendering drupal. Mantengalo come un array di rendering aggiungi il più possibile e preferibilmente lascialo drupal renderlo quando è necessario. – Eyal

+0

Ciao @Eyal qual è la procedura migliore per creare una pagina modulo? Crea un controller allora all'interno che restituisce un array? Non sono sicuro di cosa restituirebbe questo array. Non so se abbia senso, ma quando creo una pagina modulo la riaccordiamo al contenuto del tema. a meno che non sia un blocco, i tuoi commenti hanno più senso. –

+1

la procedura migliore è utilizzare un controller e restituire un array di rendering. L'array di rendering verrà posizionato all'interno del blocco del contenuto principale. – Eyal

Problemi correlati