Domanda

Ho diversi file .tpl.php per i nodi, i campi CCK, e viste tematizzazione. Questi file di modello hanno un sacco di logica in loro per spostare le cose, i collegamenti della striscia, creare nuovi collegamenti, ecc ho capito che questo è un male di sviluppo e non "The Way Drupal".

Se ho capito bene, "The Way Drupal" è quello di utilizzare le funzioni del preprocessore nel file template.php per manipolare le variabili e aggiungere nuove variabili. Alcune domande su che:

  • C'è una convenzione di denominazione per la creazione di una funzione di preprocessore per un tema specifico? Per esempio, se ho un modello di campo CCK chiamato content-field-field_transmission_make_model.tpl, come avrei un nome alla funzione di preprocessore?
  • Posso utilizzare le funzioni template preprocessore per i modelli dei nodi, modelli di campo CCK, e viste modelli? Hanno diversi metodi di modifica variabili di modello o l'aggiunta di nuovi?
È stato utile?

Soluzione

Per una panoramica generale, si dovrebbe leggere su manipolazione di variabili all'interno delle funzioni pre-elaborazione .


Per quanto riguarda la convenzione di denominazione, questo è normalmente piuttosto semplice, ma c'è un problema per il vostro esempio attuale (vedi sotto):

A esigenze di funzioni di pre-elaborazione firma da

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

in modo da attuare una per il modello di pagina all'interno del file a temi template.php comporterebbe

themeName_preprocess_page(&$variables)

La maggior parte delle volte il nome della funzione tema sarà il nome del file * .tpl.php, senza la .tpl.php fine e con caratteri di sottolineatura al posto dei trattini. Ma c'è un problema se il file di modello viene selezionato sulla base del suggerimenti template , come la funzione di pre-elaborazione può essere implementata solo per il nome di base, non per gli ulteriori suggerimenti! (I suggerimenti per i file modello alternativo vengono aggiunte funzioni di pre-elaborazione stessi.)

Il vostro esempio attuale è uno di quei casi, come content-field-field_transmission_make_model.tpl.php è tale suggerimento, con il nome di base essendo content-field.tpl.php, e la funzione corrispondente tema essendo content_field. Quindi si dovrà implementare una funzione denominata pre-elaborazione yourThemeName_preprocess_content_field(&$variables), e all'interno di tale ispezionare le voci disponibili nella matrice variabili $ per controllare se si sono effettivamente chiesto la 'field_transmission_make_model', e non per una completamente diversa campo CCK, ad esempio:

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

(Nota: codice non testato, fate attenzione di errori di battitura)

Dopo questo, ci dovrebbe essere un nuovo $new_entry variabile essendo disponibile nel file di modello e il contenuto della variabile $label dovrebbe essere cambiato (tutte le voci di livello superiore all'interno dell'array variabili $ saranno trasformati in variabili separate per il file del modello , prende il nome dal indice di array).


Per quanto riguarda la seconda domanda, l'uso di base delle funzioni di pre-elaborazione è lo stesso per tutti i file di template, ma essere consapevoli:

  • funzioni di pre-elaborazione sono disponibili solo per le chiamate a tema che uso * .tpl.php file, non per le funzioni tema
  • Il contenuto della matrice variabili $ varia pesantemente, a seconda di cosa prende a tema
  • Altri moduli potrebbero implementare le funzioni pre-elaborazione, nonché, e saranno chiamati uno dopo l'altro, quindi se si vuole cambiare qualcosa che viene aggiunto da un altro modulo, è possibile farlo solo se l'implementazione viene chiamato dopo quello (che non sarà un problema nel tuo caso, come le implementazioni all'interno di un tema sono chiamati dopo tutte le implementazioni all'interno di moduli - voleva solo parlare del fatto che ci possono essere molte implementazioni in una sola volta)

Altri suggerimenti

Al fine di capire che cosa la nostra funzione di pre-elaborazione deve essere denominato, abbiamo bisogno di sapere quali file di modello o una funzione tema qualche uscita da cui proviene, e Un ottimo modo per farlo è quello di utilizzare il tema sviluppatore modulo .

Ecco un video che spiega in dettaglio - http://buildamodule.com/video/drupal-theming-essentials-template-files-theme-function-overrides-and-preprocessing-functions- how-to-use-semplici-pre-elaborazione-funzioni

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top