Accesso a campi CCK nel file tpl.php di una view (2)

11 contenuti / 0 new
Ultimo contenuto
Accesso a campi CCK nel file tpl.php di una view (2)

Problema: devo cambiare la classe del tag LI di ogni elemento risultante in una view, in base al contenuto di un campo CCK (non quello che viene visualizzato nell'elenco).
Per capirci, il risultato dev'essere questo: http://newv.reteculturalevirginia.net/elenco-istituzioni

Allora, io ho aggiunto il campo di controllo alla view, impostandolo come 'exclude': in sostanza, il campo viene caricato nella view, ma non viene visualizzato.

Fin qui, tutto bene. A questo punto, ho creato il file views-view-list......tpl.php per "temizzare" questa visualizzazione e ho cercato di modificarlo per ottenere l'effetto voluto. Ho provato a "stampare" l'oggetto $view, in cui a un certo punto, dopo una nidificazione pazzesca, appaiono effettivamente i dati sul campo CCK da utilizzare. Sinceramente non ho avuto la pazienza di scorrere tutta la nidificazione, in quanto avrei perso ore per arrivare in fondo (l'oggetto $view è pieno di recursion), e ho usato una soluzione che aggira il problema ma può avere un impatto a livello di prestazioni: per ogni $row dei risultati, ho ricavato il NID del nodo, ho caricato il nodo con node_load e ho estratto il valore da qui.
Non so bene come agisca in questi casi la cache, sia quella di Views che quella generale di Drupal, comunque è evidente che preferirei evitare di fare tutti quei node_load, se possibile.

Mi sembra però che ci debba essere un sistema migliore anche rispetto a scrivere un riferimento kilometrico a un oggetto sepolto in $view.

Che ne dite?

Alla fine ha vinto la curiosità. Andando a tentoni, ho trovato questo:
$view->field['field_nome_campo_value']->field_values
Questo array restituisce i valori risultanti nella view per quel campo. A questo punto, bisogna andare a pescare, durante il ciclo che scorre le righe del risultato della view, l'array $view->result[$id] (dove $id è l'ID del risultato, non il nid) e da qui estrarre il valore corrispondente al campo che ho utilizzato.

Alla fine, viene una cosa del genere:

<?php
// $Id: views-view-list.tpl.php,v 1.3 2008/09/30 19:47:11 merlinofchaos Exp $
/**
 * @file views-view-list.tpl.php
 * Default simple view template to display a list of rows.
 *
 * - $title : The title of this group of rows.  May be empty.
 * - $options['type'] will either be ul or ol.
 * @ingroup views_templates
 */
$nome_campo_ar = $view->field['field_nome_campo_value']->field_values;
?>

<div class="item-list">
  <?php if (!empty($title)) : ?>
    <h3><?php print $title; ?></h3>
  <?php endif; ?>
  <<?php print $options['type']; ?>>
    <?php foreach ($rows as $id => $row): ?>
      <?php
        $classe_aggiunta
= '';
       
$node_vid_out = $view->result[$id]->node_vid;
       
// in questo caso, ho semplicemente controllato che ci fosse almeno un valore
       
if ($nome_campo_ar[$node_vid_out][0]['value'] != "") { $classe_aggiunta = ' aggiunta'; }
     
?>

      <li class="<?php print $classes[$id].$classe_aggiunta; ?>"><?php print $row; ?></li>
    <?php endforeach; ?>
  </<?php print $options['type']; ?>>
</div>

Ciao Pinolo, ho letto il tuo post.
Ti spiego il mio problema:
Ho creato un nuovo tipo di contenuto chiamato OPERATORI con CCK con i campi TITOLO IMMAGINE e PRIORITA'.
Devo poter visualizzare in una pagina(...quindi o con VIEW o con un altro tuo suggerimento...) i dati del tipo di contenuto OPERATORI, ma IMMAGINE deve essere stampata solo se è presente il campo PRIORITA'.
Hai qualche suggerimento?
Grazie!!!

Un if nel template della vista, come detto in questo post che probabilmente non ti sei preso la briga di leggere.

Sarò Sguercio ma "Un IF scritto come" .?.
Grazie.

ps: caffè=zero, invito_gogo'=zero ... mmm.

if condizione then, come se no?

ah capisco,
ma nel caso specifico, scritto come?
Un esempio pratico-completo: sempre se è possibile farcelo vedere.

Grazie.

<?php
if ( $view->field['field_nome_campo_value']->field_values == "xyz") { echo = $view->field['field_nome_campo_value']->field_values }
?>

Ho preso spezzoni da sopra, sopra stava customizzando il tempalte della vista, in questo caso si parla di campi ma il ragionamento è quello, i campi che puoi recuperare gli vedi con un print_r($row), oppure fai un node_load e print_r($node).
Gli appunti non li ho qui.

Ti ringrazio per il codice utile: da solo non credo ci sarei arrivato e credo+forse anche altri...

ps: SuperEalmuno !

Ti ringrazio anche io ealmulo. Forse ho dimenticato di dirvi che uso Drupal da poco e quindi non sono così esperto.
Ritornando al problema giusto per fare le cose giuste:
Vado nel modulo view e faccio una copia del file views-view.tpl.php salvandola nella cartella del mio tema con il nome views-view-nomevista.tpl.php per tematizzare solo la vista chiamata nomevista, giusto?
Dopo inserisco il codice da te riportato:

<?php
if ( $view->field['field_nome_campo_value']->field_values == "xyz") { echo = $view->field['field_nome_campo_value']->field_values }
?>

in modo da dirgli che se il campo PRIORITA è diverso dal vuoto (!empty) stampa il campo IMMAGINE.

Giusto?

sulla views trovi tema (voce in basso a sinistra), li hai i campi e il codice base.
Quel codice è di esempio e così com'è non funzionerà mai, il campo deve essere il tuo, altrimenti devi usare un print_r($row), oppure fai un node_load e print_r($node). Su drupal.org se cerchi un attimino trovi tutto.
O in alternativa guarda questo modulo o altri di simili: http://drupal.org/project/conditional_fields