Come faccio a passare una variabile da un modulo personalizzato al suo file modello?


8

Devo conoscere il metodo più semplice per passare la variabile dal modulo personalizzato al suo file modello. Ho creato custom.module e inserito custom.tpl.php nella cartella del modulo.

function custom_menu(){
  $items = array();

  $items['custom'] = array(
    'title' => t('custom!'),
    'page callback' => 'custom_page',
    'access arguments' => array('access content'),
    'type' => MENU_CALLBACK,
  );

  return $items;
}

function custom_page() {

    $setVar = 'this is custom module';
    return theme('custom', $setVar);    
}

ho aggiunto la funzione tema ma non funziona, nessuno può suggerirmi cosa c'è di sbagliato in questo codice

function theme_custom($arg) {
  return $arg['output'];
}

function custom_theme() {
  return array(
    'Bluemarine' => array(
        'variables' => 'output',
        'template' => 'Bluemarine',
     ),
  );
}

Risposte:


6

Indipendentemente dalla versione di Drupal per cui stai scrivendo il modulo, ci sono due errori nel tuo codice:

  • Definisci "Bluemarine" come funzione tema, ma poi chiami theme('custom'), che chiamerebbe la funzione tema "personalizzata"
  • Se si definisce "personalizzato" come una funzione tema che utilizza un file modello, theme_custom()non viene mai chiamato

Se stai scrivendo un codice per Drupal 6, il codice dovrebbe essere simile al seguente. Prendo il presupposto che il nome per la funzione tema sia custom.

function custom_menu(){
  $items = array();

  $items['custom'] = array(
    'title' => t('custom!'),
    'page callback' => 'custom_page',
    'access arguments' => array('access content'),
    'type' => MENU_CALLBACK,
  );

  return $items;
}

function custom_theme() {
  return array(
    'custom' => array(
      'arguments' => array('output' => NULL),
      'template' => 'custom',
     ),
  );
}

function custom_page() {
    $output = 'This is a custom module';
    return theme('custom', $output);    
}

function theme_custom($output) {
}

Il file modello avrà accesso ae $outputa tutte le variabili impostate template_preprocess_custom(), se il modulo lo implementa.

Ad esempio, è possibile implementare un codice simile al seguente:

function template_preprocess_custom(&$variables) {
  if ($variables['output'] == 'This is a custom module') {
    $variables['append'] = ' and I wrote it myself.";
  }
}

Con questo codice, il file modello ha accesso a $outpute $append.

Come esempio della funzione tema che utilizza un file modello, puoi guardare theme_node () , che è definito in node_theme () , e che usa node.tpl.php come file modello; la funzione di preelaborazione implementata dal modulo Nodo per quella funzione tema è template_preprocess_node () .


Grazie Kiam, ovviamente è mancato il primo commento di OP sull'uso di D6. +1
Laxman13

Grazie Kiam, template_preprocess_custom (& $ variabili) ha fatto il trucco
Kamran Akhter,

Ora voglio spostare tpl nella cartella dei temi, come posso farlo?
Kamran Akhter,

@KamranAkhter Questa è una domanda diversa. :-)
kiamlaluno

3

Stai chiamando la funzione tema errata. Invece function theme_customdovrebbe essere function theme_Bluemarine. È inoltre necessario passare un array alla variabile piece di hook_theme () . Vedi un semplice esempio qui .

Usando il tuo esempio (dopo aver cambiato la funzione template e theme in custom):

function custom_menu(){
  $items = array();

  $items['custom'] = array(
    'title' => t('custom!'),
    'page callback' => 'custom_page',
    'access arguments' => array('access content'),
    'type' => MENU_CALLBACK,
  );

  return $items;
}

function custom_page() {
  $setVar = 'this is custom module';
  return theme('custom', array('output' => $setVar));
}

function custom_theme() {
  $path = drupal_get_path('module', 'custom');
  return array(
    'custom' => array(
        'variables' => array('output' => null),
        'template' => 'custom',
     ),
  );
}

Ora in custom.tpl.php basta <?php print $output; ?>


Grazie per la risposta, l'esempio che hai dato è il modulo nodo e ho un modulo non nodo. Ho solo bisogno di un modo per passare la variabile al file tpl, sto usando drupal 6.plz help
Kamran Akhter

Grazie per la risposta, mi sta dando l'errore Nessun file o directory in realtà si aspetta il file custom.tpl.php nella cartella del modulo che ho già così nel codice bluemarine verrà sostituito dall'abitudine. Bluemarine è il tema drupal che sto usando.
Kamran Akhter,

cambiato il codice sopra e dandomi lo schermo bianco bianco cosa devo fare per favore aiuto
Kamran Akhter

Ho cambiato il codice e lo faccio funzionare sul mio sito.
Laxman13

Copia semplicemente il codice sopra riportato ma non funziona
Kamran Akhter,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.