Personalizzazione del primo elemento in una vista


7

Come blocco sulla mia homepage sto provando a produrre:

<ul>
  <li><a><img><p>Node 1</p></a></li>
  <li><a>Node 2</a></li>
  <li><a>Node 3</a></li>
  <li><a>Node 4</a></li>
</ul>

dove ogni <li> rappresenta un nodo e l'immagine / testo forniti dai campi CCK collegati a ciascun nodo.

Attualmente sto usando una vista a blocchi per l'output dei nodi 2-4 e una vista Allegato per presentare il primo nodo come indicato qui: http://www.agileapproach.com/blog-entry/the-views2-attachment-display

Il problema è che il mio output finisce più in questo modo:

<div class="attachment attachment-before">
  <div class="view view-homepage-news ..">
    <div class="item-list">
      <ul>
        <li class="views-row ...">  
          <a><img><p>Node 1</p></a>            
        </li>
      </ul>
    </div>  
  </div> <!-- /.view -->
</div>
<div class="item-list">
  <ul>
    <li class="views-row ..."><a>Node 2</a></li>
    <li class="views-row ..."><a>Node 3</a></li>
    <li class="views-row ..."><a>Node 4</a></li>
  </ul>
</div>

Probabilmente posso piegare quell'output in base al mio scopo, ma comporterà molti modelli e configurazioni. Vorrei anche evitare di utilizzare CSS e / o JavaScript per modificare l'output, a meno che non sia la mia unica opzione.

Detto questo, qual è il modo più semplice per avvicinare l'output a ciò di cui ho bisogno?

Modifica: ecco un po 'di codice php approssimativo che sto usando nel campo del codice php del campo personalizzato (basato sul suggerimento di Jeremy French: ecco il codice che sto usando nel mio campo personalizzato del codice PHP:

<?php
  ++$static;
  if ($static == 1) {
    $nd=node_load($data->nid);
    $img_path = imagecache_create_path('news_image_thumbnail', $nd->field_image[0]['filepath']);
    print '<a><img src="' . $img_path . '"><p>Node 1</p></a>';
  } else {
    print "<a>Node $static</a>";
  }
?>

Risposte:


5

Puoi fare qualcosa con views_customfield .

Aggiungete un campo php, lo ottenete solo per visualizzare il markup desiderato (nessun elemento contenente) e restituite un valore solo per la riga numero 1.


Questo sembra fantastico! Sembra un modo pulito per farlo.
Daniel Nitsche,

8

Personalmente uso le funzioni di preelaborazione per fare questo, qualcosa del tipo seguente:

function HOOK_preprocess_views_view_fields(&$vars) {
  if ($vars['view']->name == 'VIEW_NAME' && $vars['view']->row_index == 1) {
    // Do stuff here.
  }
}

6

Non sono sicuro di capire correttamente la tua domanda, ma credo che potresti usare il modulo Semantic Views per questo. Se imposti lo stile in Impostazioni di base su Viste semantiche, avrai un'opzione nelle impostazioni di Viste semantiche per impostare un "attributo di prima classe", che ti aiuterà a scegliere come target il primo elemento dell'elenco nella vista nello stile del tema. file css.


Semantic Views ha un bell'aspetto e risolverà sicuramente l'output, ma voglio evitare di fare affidamento sul CSS per nascondere il markup extra che avrei prodotto. Altrimenti probabilmente userei solo li: il primo figlio per fare ciò di cui ho bisogno.
Daniel Nitsche,

Sono solo curioso, dal momento che sto ancora imparando me stesso, ma qual è la logica dietro non voler usare i CSS per modificare il primo elemento in una vista elenco?
Jay,

1
principalmente l'HTML aggiuntivo che produrrà. Caso in questione: il sito su cui sto lavorando verrà utilizzato da alcuni utenti con connessioni dialup - ogni byte conta in questi casi. Inoltre, l'utilizzo dei CSS sembra un hack: per quanto riguarda la manutenzione, gli amministratori non dovrebbero modificare il CSS per modificare l'output HTML. Questo dovrebbe essere fatto in Drupal.
Daniel Nitsche,

4

La soluzione più semplice è con un modello personalizzato. Non ha bisogno di molto lavoro però. Con le informazioni sul tema disponibili nell'interfaccia delle visualizzazioni, puoi vedere quale modello è necessario modificare. Tutto quello che devi fare è aggiungere del codice per stampare gli elementi extra per il primo nodo. Le viste passeranno attraverso ogni riga, quindi dovrebbe essere facile.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.