Frage

Ich habe mehrere .tpl.php Dateien für Knoten, CCK Felder und Ansichten Thematisierung. Diese Vorlagendateien haben eine Menge Logik in ihnen Dinge zu bewegen, Leiste Links, neue Links, etc. Ich verstehe, dass dies schlechte Entwicklung und nicht „Die Drupal Way“.

Wenn ich richtig versteht, „Die Drupal Way“ ist Präprozessor Funktionen in Ihrer template.php Datei zu verwenden, um Variablen zu manipulieren und neue Variablen hinzufügen. Ein paar Fragen darüber:

  • Gibt es eine Namenskonvention eine Prä-Prozessor-Funktion für ein bestimmtes Thema für die Erstellung? Zum Beispiel, wenn ich eine CCK Feldvorlage genannt content-field-field_transmission_make_model.tpl habe, wie ich die Prä-Prozessor-Funktion nennen würde?
  • Kann ich Vorlage Präprozessor Funktionen für Knoten vorlagen, CCK Feldvorlagen und Ansichten Vorlagen? Haben sie verschiedene Methoden zur Modifizierung Template-Variablen oder neue hinzufügen haben?
War es hilfreich?

Lösung

Für einen allgemeinen Überblick, sollten Sie lesen Sie auf Stellgrößen innerhalb Vorprozess Funktionen .


In Bezug auf die Namenskonvention, dies in der Regel recht einfach, aber es gibt einen Haken für das aktuelle Beispiel (siehe unten):

A Vorprozess Funktionen Unterschrift Bedürfnisse

sein

[yourModuleName|yourThemeName]_preprocess_[themeFunctionName](&$variables)

so eine Implementierung für die Seitenvorlage innerhalb einer Datei template.php Themen würde dazu führen,

themeName_preprocess_page(&$variables)

Die meiste Zeit der Name des Themas Funktion wird der Name der Datei .tpl.php * sein, ohne die .tpl.php endet und mit Unterstrichen anstelle der Bindestriche. Aber es gibt einen Haken , wenn die Template-Datei auf der Basis des Vorlage Vorschläge , da die Vorprozess Funktion kann nur für die Basisnamen umgesetzt wird, nicht für die zusätzlichen Vorschläge! (Die Vorschläge für alternative Template-Dateien werden sich in Vorprozess Funktionen hinzugefügt.)

Ihr aktuelles Beispiel ist einer jener Fälle, wie content-field-field_transmission_make_model.tpl.php ein solcher Vorschlag ist, mit der Basisname ist content-field.tpl.php und das entsprechende Thema Funktion ist content_field. So würden Sie ein Vorprozess Funktion namens yourThemeName_preprocess_content_field(&$variables) implementieren müssen, und in welcher die verfügbaren Einträge in dem $ Variablen Array untersuchen, um zu überprüfen, ob Sie tatsächlich für den ‚field_transmission_make_model‘ genannt werden, und nicht für ein völlig anderes CCK Feld, zum Beispiel:

function yourThemeName_preprocess_content_field(&$variables) {
  // Are we called for the right field?
  if ('field_transmission_make_model' == $variables['field_name']) {
    // Yes, add/manipulate entries within the variables array
    $variables['new_entry'] = 'A useless new variable';
    $variables['label'] = 'A useless change of the existing label variable';
  }
}

(Hinweis: Ungeprüfte Code, passen sie von Tippfehlern)

Danach sollte es in der Vorlage-Datei eine neue Variable $new_entry verfügbar sein wird, und der Inhalt der $label Variable sollte (alle Top-Level-Einträge innerhalb der $ Variablen Array geändert haben, werden in separate Variablen für die Template-Datei umgewandelt werden nach dem Array-Index genannt).


Was Ihre zweite Frage, die grundlegende Verwendung von Vorprozess Funktionen ist das gleiche für alle Template-Dateien, aber beachten Sie:

  • sind Preprocess Funktionen nur für Themen Anrufe zur Verfügung, die Nutzung * .tpl.php Dateien, nicht für Themen Funktionen
  • Der Inhalt des $ Variablen Array variiert stark, je nachdem, was bekommt Themen
  • Andere Module könnten die Vorprozess Funktionen als auch implementieren, und sie werden nacheinander aufgerufen werden, so dass, wenn Sie etwas ändern wollen, das von einem anderen Modul hinzugefügt wird, können Sie dies nur tun, wenn Ihre Implementierung danach aufgerufen wird (die wird kein Problem in Ihrem Fall sein, innerhalb eines Themas als Implementierungen nach allen Implementierungen innerhalb von Modulen genannt werden - zu erwähnen wollten nur, dass es viele Implementierungen auf einmal)
  • sein

Andere Tipps

Um herauszufinden, was unsere Vorverarbeitung Funktion benannt werden sollten, müssen wir einige Ausgangs was Template-Datei oder Thema Funktion wissen herkommt, und eine gute Möglichkeit, dies zu tun, ist mit der Thema Entwickler Modul .

Hier ist ein Video, das es im Detail erklärt - http://buildamodule.com/video/drupal-theming-essentials-template-files-theme-function-overrides-and-preprocessing-functions- how-to-use-simple-Vorverarbeitung-Funktionen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top