Anpassen des ersten Elements in einer Ansicht


7

Als Block auf meiner Homepage versuche ich Folgendes auszugeben:

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

wobei jedes <li> einen Knoten darstellt und das Bild / der Text von CCK-Feldern geliefert wird, die an jeden Knoten angehängt sind.

Derzeit verwende ich eine Blockansicht für die Ausgabe der Knoten 2 bis 4 und eine Anhangsansicht für die Darstellung des ersten Knotens, wie hier beschrieben: http://www.agileapproach.com/blog-entry/the-views2-attachment-display

Das Problem ist, dass meine Ausgabe eher so endet:

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

Ich kann diese Ausgabe wahrscheinlich für meinen Zweck biegen, aber es wird eine Menge Vorlagen und Konfiguration erfordern. Ich möchte auch vermeiden, CSS und / oder JavaScript zum Ändern der Ausgabe zu verwenden, es sei denn, dies ist meine einzige Option.

Was ist vor diesem Hintergrund der einfachste Weg, um die Ausgabe näher an das zu bringen, was ich brauche?

Bearbeiten: Hier ist ein grober PHP-Code, den ich im Customfield-PHP-Codefeld verwende (basierend auf Jeremy Frenchs Vorschlag: Hier ist der Code, den ich in meinem PHP-Code-Customfield verwende:

<?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>";
  }
?>

Antworten:


5

Sie könnten etwas mit views_customfield machen .

Sie fügen ein PHP-Feld hinzu, lassen es nur das gewünschte Markup anzeigen (keine Elemente enthalten) und geben einen Wert nur für Zeilennummer 1 aus.


Das sieht gut aus! Es scheint ein sauberer Weg zu sein, dies zu tun.
Daniel Nitsche

8

Ich persönlich verwende dazu Vorverarbeitungsfunktionen, etwa die folgenden:

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

6

Ich bin mir nicht sicher, ob ich Ihre Frage richtig verstehe, aber ich glaube, Sie könnten dafür das Modul Semantic Views verwenden . Wenn Sie den Stil unter Grundeinstellungen auf Semantische Ansichten festlegen, haben Sie unter den Einstellungen für Semantische Ansichten die Möglichkeit, ein "First-Class-Attribut" festzulegen, mit dessen Hilfe Sie das erste Listenelement in Ihrer Ansicht im Stil Ihres Themas ausrichten können. CSS-Datei.


Semantische Ansichten sehen großartig aus und werden die Ausgabe definitiv bereinigen, aber ich möchte vermeiden, dass ich mich auf CSS verlasse, um das zusätzliche Markup zu verbergen, das ich ausgeben würde. Andernfalls würde ich wahrscheinlich nur li: first-child verwenden, um das zu tun, was ich brauche.
Daniel Nitsche

Ich bin nur neugierig, da ich noch selbst lerne, aber was ist der Grund dafür, dass ich CSS nicht verwenden möchte, um das erste Element in einer Listenansicht zu ändern?
Jay

1
Meistens das zusätzliche HTML, das es produzieren wird. Ein typisches Beispiel: Die Site, an der ich arbeite, wird von einigen Benutzern mit DFÜ-Verbindungen verwendet - in diesen Fällen zählt jedes Byte. Die Verwendung von CSS fühlt sich auch wie ein Hack an: In Bezug auf die Wartung sollten Administratoren das CSS nicht ändern müssen, um die HTML-Ausgabe zu ändern. Das sollte in Drupal gemacht werden.
Daniel Nitsche

4

Die einfachste Lösung ist eine benutzerdefinierte Vorlage. Es muss jedoch nicht viel Arbeit sein. Anhand der in der Ansichtsoberfläche verfügbaren Themeninformationen können Sie sehen, welche Vorlage Sie ändern müssen. Sie müssen lediglich Code hinzufügen, um die zusätzlichen Elemente für den ersten Knoten zu drucken. Ansichten durchlaufen jede Zeile und sollten daher einfach sein.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.