Tematizzare campi di una vista
Ciao a tutti. Vi espongo subito il mio problema dicendovi che non sono un grosso esperto di DRUPAL. Uso la versione 6.22.
Ho creato un nuovo tipo di contenuto con i campi TITOLO IMMAGINE PRIORITA'.
Ho creato una vista con view per estrarre tutti i dati di quel tipo di contenuto.
I miei dati vengono ordinati in base al campo PRIORITA', ma voglio che il campo IMMAGINE sia stampato solo se è presente il campo PRIORITA'.
Come posso fare?
Grazie mille
Risposte
Ciao, se nella pagina di
Ciao, se nella pagina di modifica della vista e guardi in "Impostazioni di base" > "Tema: Informazioni" troverai i suggerimenti per creare un file per il theming di ogni singolo campo.
Un esempio banale: ho una vista con due campi l'ID del nodo e il titolo e voglio mostrare il titolo solo se l'ID del nodo è maggiore di 6. Consultando la sezione sopra citata della vista vedo "Campo Nodo: Titolo (ID: title)" e una serie di possibili nomi per il template separati da virgola (i primi sono i più generici, gli ultimi più specifici): prendo l'ultimo (il più specifico, voglio che il modello sia utilizzato solo in questa vista e per questi specifico campo) che nel mio caso è "views-view-field--miavista--page-1--title.tpl.php". Creo un file con questo nome all'interno del mio tema (nel mio caso in sites/default/themes/framework) e al suo interno copio il contenuto che mi si presenta cliccando proprio sul link "Campo Nodo: Titolo (ID: title)". In questo caso:
<?php
/**
* This template is used to print a single field in a view. It is not
* actually used in default Views, as this is registered as a theme
* function which has better performance. For single overrides, the
* template is perfectly okay.
*
* Variables available:
* - $view: The view object
* - $field: The field handler object that can process the input
* - $row: The raw SQL result that can be used
* - $output: The processed output that will normally be used.
*
* When fetching output from the $row, this construct should be used:
* $data = $row->{$field->field_alias}
*
* The above will guarantee that you'll always get the correct data,
* regardless of any changes in the aliasing that might happen if
* the view is modified.
*/
?>
<?php print $output; ?>
ora basta una piccola modifica per adattarlo al mio caso (titolo solo se nid>6):
...
<?php if ($row->nid>6): ?>
<?php print $output; ?>
<?php endif; ?>
salvo tutto e dalla pagina di modifica della vista "Impostazioni di base" > "Tema: Informazioni" clicco su "Rianalizza i file modello" così il sistema riconoscerà il nuovo template.
Spero ti sia utile, dovrai però adattarlo al tuo caso.
Sei un GRANDE!!! Stavo
Sei un GRANDE!!!
Stavo impazzendo da due giorni, quando bastava scrivere a te. Da oggi butto nella spazzatura tutti gli altri siti che dicono di darti aiuto ma ti creano solo più casini.
Tornando a noi ti spiego cosa ho fatto:
Ho eseguito alla lettera tutto quello che hai detto e al primo colpo mi stampava solo i contenuti con "nid > 6". Poi però per il mio campo specifico(..PRIORITA') ho dovuto inserire questa riga di codice, trovata ovviamente,
<?php
drupal_set_message('<pre>' . var_export($row, true) . '</pre>');
?>
per vedere cosa sputava fuori l'sql nella riga che mi interessava. alla fine il mio codice è stato il seguente:
<?php
if ($row->node_data_field_priorita_field_priorita_value > 0):
?>
<?php
print $output;
?>
<?php
endif;
?>
e adesso le immagine vengono stampate solo se il campo PRIORITA' è maggiore di 0.
La mia ultima domanda è la seguente: devo per forza indicare tutta la sequenza(..node_data_field_priorita_field_priorita_value) nella condizione, oppure c'è l'istruzione per andare ad identificare direttamente il campo?
Ho provato con
<?php
if ($fields['field_priorita_value']->content > 0):
?>
Comunque ti ringrazio veramente tanto. Ho risolto il mio problema
GRAZIE GRAZIE GRAZIE!!!
Mi fa piacere! Nel contesto
Mi fa piacere!
Nel contesto di questo template le variabili a tua disposizione sono quelle "suggerite" dal generatore di codice, cioè:
...
* - $view: The view object
* - $field: The field handler object that can process the input
* - $row: The raw SQL result that can be used
* - $output: The processed output that will normally be used.
...
non penso quindi esistano altri modi per accedere al valore di altri campi (diversi da quello per cui hai costruito il template) dello stesso record, se non quello di accedere a $row come visto sopra.
A presto.