Personalizar el primer elemento en una vista

7

Como bloque en mi página de inicio, estoy tratando de generar:

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

donde cada <li> representa un nodo y la imagen / texto suministrado por los campos CCK adjuntos a cada nodo.

Actualmente, estoy usando una vista de bloque para generar los nodos 2-4, y una vista de Adjunto para presentar el primer nodo como se describe aquí: http://www.agileapproach.com/blog-entry/the-views2-attachment-display

El problema es que mi salida termina más así:

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

Probablemente pueda doblar esa salida según mi propósito, pero implicará muchas plantillas y configuraciones. También me gustaría evitar usar CSS y / o JavaScript para modificar la salida, a menos que esa sea mi única opción.

Dado esto, ¿cuál es la forma más fácil de acercar la salida a lo que necesito que sea?

Editar: aquí hay un código php aproximado que estoy usando en el campo de código php personalizado (basado en la sugerencia de Jeremy French: Aquí está el código que estoy usando en mi campo personalizado Código 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>";
  }
?>
Daniel Nitsche
fuente

Respuestas:

5

Podrías hacer algo con views_customfield .

Agrega un campo php, lo obtiene solo para mostrar el marcado que desea (sin elementos que contengan) y genera un valor solo para la fila número 1.

Jeremy French
fuente
¡Esto se ve genial! Parece una forma limpia de hacerlo.
Daniel Nitsche
8

Personalmente uso funciones de preproceso para hacer esto, algo como lo siguiente:

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

No estoy seguro si entiendo su pregunta correctamente, pero creo que podría usar el módulo Vistas semánticas para esto. Si establece el Estilo en Configuración básica en Vistas semánticas, tendrá una opción en la configuración de Vistas semánticas para establecer un "atributo de primera clase", que lo ayudará a orientar el primer elemento de la lista en su vista en el estilo de su tema. archivo css.

Arrendajo
fuente
Las Vistas semánticas se ven muy bien y definitivamente limpiarán la salida, pero quiero evitar confiar en CSS para ocultar el marcado adicional que estaría generando. De lo contrario, probablemente usaría li: first-child para hacer lo que necesito.
Daniel Nitsche
Tengo curiosidad, ya que todavía estoy aprendiendo, pero ¿cuál es la razón detrás de no querer usar CSS para modificar el primer elemento en una vista de lista?
Jay
1
principalmente el HTML extra que producirá. Caso en cuestión: el sitio en el que estoy trabajando será utilizado por algunos usuarios con conexiones de acceso telefónico, cada byte cuenta en estos casos. Además, el uso de CSS se siente como un truco: por lo que respecta al mantenimiento, los administradores no deberían tener que modificar el CSS para modificar la salida HTML. Eso debería hacerse en Drupal.
Daniel Nitsche
4

La solución más fácil es con una plantilla personalizada. Sin embargo, no necesita ser mucho trabajo. Con la información de temas disponible en la interfaz de vistas, puede ver qué plantilla necesita cambiar. Todo lo que necesita hacer es agregar un código para imprimir los elementos adicionales para el primer nodo. Las vistas recorrerán cada fila, por lo que debería ser fácil.

googletorp
fuente