Personnalisation du premier élément d'une vue

7

En bloc sur ma page d'accueil, j'essaie de produire:

<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>

où chaque <li> représente un nœud, et l'image / le texte fourni par les champs CCK attachés à chaque nœud.

Actuellement, j'utilise une vue de bloc pour générer les nœuds 2-4 et une vue de pièce jointe pour présenter le premier nœud comme indiqué ici: http://www.agileapproach.com/blog-entry/the-views2-attachment-display

Le problème est que ma sortie se termine plus comme ceci:

<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>

Je peux probablement plier cette sortie en fonction de mon objectif, mais cela impliquera beaucoup de modèles et de configuration. Je voudrais également éviter d'utiliser CSS et / ou JavaScript pour modifier la sortie, sauf si c'est ma seule option.

Compte tenu de cela, quelle est la façon la plus simple de rapprocher la sortie de ce dont j'ai besoin?

Edit: voici un code php approximatif que j'utilise dans le champ de code php customfield (basé sur la suggestion de Jeremy French: Voici le code que j'utilise dans mon champ personnalisé PHP Code:

<?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>";
  }
?>
Daniel Nitsche
la source

Réponses:

5

Vous pourriez faire quelque chose avec views_customfield .

Vous ajoutez un champ php, obtenez-le uniquement pour afficher le balisage souhaité (aucun élément ne contenant) et affichez une valeur uniquement pour la ligne numéro 1.

Jeremy French
la source
Ça a l'air super! Cela semble être une façon propre de le faire.
Daniel Nitsche
8

J'utilise personnellement des fonctions de prétraitement pour ce faire, quelque chose comme ceci:

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

Je ne sais pas si je comprends bien votre question, mais je pense que vous pouvez utiliser le module Vues sémantiques pour cela. Si vous définissez le Style sous Paramètres de base sur Vues sémantiques, vous aurez alors une option sous les paramètres Vues sémantiques pour définir un "attribut de première classe", qui vous aidera à cibler le premier élément de la liste de votre vue dans le style de votre thème. fichier css.

Geai
la source
Les vues sémantiques sont superbes et nettoieront certainement la sortie, mais je veux éviter de compter sur CSS pour masquer le balisage supplémentaire que je produirais. Sinon, j'utiliserais probablement li: premier enfant pour faire ce dont j'ai besoin.
Daniel Nitsche
Je suis juste curieux, car j'apprends encore moi-même, mais quelle est la raison derrière ne pas vouloir utiliser CSS pour modifier le premier élément dans une vue de liste?
Jay
1
principalement le HTML supplémentaire qu'il produira. Exemple: le site sur lequel je travaille sera utilisé par certains utilisateurs avec des connexions par ligne commutée - chaque octet compte dans ces cas. En outre, l'utilisation de CSS ressemble à un hack: en termes de maintenance, les administrateurs ne devraient pas avoir à modifier le CSS pour modifier la sortie HTML. Cela devrait être fait dans Drupal.
Daniel Nitsche
4

La solution la plus simple consiste à utiliser un modèle personnalisé. Cependant, cela ne nécessite pas beaucoup de travail. Avec les informations de thème disponibles dans l'interface des vues, vous pouvez voir quel modèle vous devez modifier. Tout ce que vous devez faire est d'ajouter du code pour imprimer les éléments supplémentaires pour le premier nœud. Les vues parcourront chaque ligne, donc cela devrait être facile.

googletorp
la source