it-swarm.com.de

Wie übergebe ich eine Variable aus einem benutzerdefinierten Modul an die Vorlagendatei?

Ich muss die einfachste Methode kennen, um Variablen vom benutzerdefinierten Modul an die Vorlagendatei zu übergeben. Ich habe die Datei custom.module erstellt und die Datei custom.tpl.php im Modulordner abgelegt.

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);    
}

ich habe Theme-Funktion hinzugefügt, aber es funktioniert nicht. Kann mir jemand vorschlagen, was mit diesem Code nicht stimmt?

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

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

Unabhängig von der Version Drupal Version, für die Sie das Modul schreiben) enthält Ihr Code zwei Fehler:

  • Sie definieren "Bluemarine" als Themenfunktion, rufen dann aber theme('custom') auf, wodurch die "benutzerdefinierte" Themenfunktion aufgerufen wird
  • Wenn Sie "benutzerdefiniert" als Designfunktion definieren, die eine Vorlagendatei verwendet, wird theme_custom() niemals aufgerufen

Wenn Sie Code für Drupal 6) schreiben, sollte der Code dem folgenden ähnlich sein. Ich gehe davon aus, dass der Name für die Themenfunktion custom lautet.

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) {
}

Die Vorlagendatei hat Zugriff auf $output Und auf alle in template_preprocess_custom() festgelegten Variablen, sofern Ihr Modul dies implementiert.

Beispielsweise könnten Sie Code ähnlich dem folgenden implementieren:

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

Mit diesem Code hat die Vorlagendatei Zugriff auf $output Und $append.

Als Beispiel für eine Themenfunktion, die eine Vorlagendatei verwendet, können Sie sich theme_node () ansehen, das in node_theme () definiert ist und node) verwendet. tpl.php als Vorlagendatei; Die vom Node Modul für diese Theme-Funktion implementierte Vorverarbeitungsfunktion ist template_preprocess_node () .

6
kiamlaluno

Sie rufen die falsche Themenfunktion auf. Anstatt von function theme_custom es sollte sein function theme_Bluemarine. Sie müssen auch ein Array an das Variablenstück hook_theme () übergeben. Siehe ein einfaches Beispiel hier .

Verwenden Sie Ihr Beispiel (nachdem Sie die Vorlagen- und Designfunktion in custom geändert haben):

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',
     ),
  );
}

Jetzt in custom.tpl.php brauchen Sie nur <?php print $output; ?>

3
Laxman13