Views bei neuem Buchstaben eine Zusatzklasse anhängen

am 20.09.2010 - 14:34 Uhr in
Hallo liebe Drupaler
Steh da mal wieder vor einem Problem, bei dem mir wohl die Übersicht etwas fehlt, was wo wann von Drupal gemacht wird.
Folgendes: Ich gebe in einer View eine 5-spaltige (Raster) Stichwortliste aus. Jeder erste Buchstaben des neuen Wortes soll geprüft werden und nach seinem letzten Vorkommen, soll eine zusätzliche Klasse ins umschliessende Dif kommen, damit ich dort eine Linie zur optischen Hilfe einfügen kann. Nun dachte ich, dass ich diese Abfrage in der Datei "views-view-fields.tpl.php" erstellen kann, wo ja alle rows ausgegeben werden. So schaut die leicht angepasste tpl-Datei aus:
<?php $i="0"; ?>
<?php foreach ($fields as $id => $field) : ?>
<?php
$aktuell = $field->raw{0};
print $i.' '.$aktuell;
if($i!=$aktuell) {$link="linie";} else{$link="";}
$i=$aktuell;
?>
<?php if (!empty($field->separator)): ?>
<?php print $field->separator; ?>
<?php endif; ?>
<<?php print $field->inline_html;?> class="views-field-<?php print $field->class; ?><?php print $klasse .' '.$ab.' '.$lb.' '.$nr; ?>">
<?php if ($field->label): ?>
<label class="views-label-<?php print $field->class; ?>">
<?php print $field->label; ?>:
</label>
<?php endif; ?>
<?php
// $field->element_type is either SPAN or DIV depending upon whether or not
// the field is a 'block' element type or 'inline' element type.
?>
<<?php print $field->element_type; ?> class="field-content"><?php print $field->content; ?></<?php print $field->element_type; ?>>
</<?php print $field->inline_html;?>>
<?php print $i.' '.$aktuell.' '.$link; ?>
<?php endforeach; ?>
Ich prüfe innerhalb der foreach Schleife, ob der Anfangsbuchstabe des letzten Begriffs identisch mit dem aktuellen Anfangsbuchstaben ist. Nur verstehe ich nicht, wieso meine Variable $i die ich ja ausserhalb der foreach Schleife für den ersten Durchlauf initialisiere jedesmal wieder überschrieben wird. Somit kann natürlich die Abfrage nicht funktionieren, und es kommt für die if-Abfrage für die befüllung von $link immer ein false raus.
Kann mir da mal jemand auf die Sprünge helfen und mir erklären, wieso $i immer wieder auf 0 gestellt wird? Vielleicht gibts ja für das ganze auch eine viel einfachere Lösung?
Hier noch ein Link zur Musterseite (Da geb ich im Moment grad noch $i und $aktuell vor und nach dem Content aus: Musterseite
- Anmelden oder Registrieren um Kommentare zu schreiben
Fields <-> Rows
am 20.09.2010 - 14:57 Uhr
Hallo,
verwechselst Du vielleicht gerade Fields und Rows? Du bearbeitest ja in der Template-Datei gerade alle einzelnen Felder eines Datensatzes / einer View-Zeile. Macht es nicht mehr Sinn alle Zeilen des Views mit dem genannten Code zu verarbeiten? Dann wäre die views-view.tpl.php eher die richtige Stelle dafür. Aber vielleicht wirds mit nem Beispiel doch eindeutiger.
Gruß,
Sven
Huch, mist... sehe grad, dass
am 20.09.2010 - 23:38 Uhr
Huch, mist... sehe grad, dass meine Antwort von Heute Mittag gar nicht raus ist.
Ein Müsterchen mit der Demoversion ist am Ende des Frageposts verlinkt.
In der views-view-grid--a-z.tpl.php, oder views-views.tpl.php habe ich gar keinen Zugriff mehr auf $fields, wo ich überhaupt per php auf die Feldinhalte zugreifen kann und somit auch die Anfangsbuchstaben auslesen kann.
Viel mehr an Beispiel fällt mir hier nicht ein zu posten. Den verwendeten Code hab ich ja schon, den Link zur Musterseite auch. Aussehen sollte es am Ende etwas so, also immer vor einem Wort mit neuem Anfangsbuchstaben soll eine Linie stehen, bzw. eine Klasse ins entsprechende Div einfügt werden:
3D-CAD-Technologie Bolzenschweissen Entwicklung
---------------------- ---------------------- ------------------------
Abdeckungen Dachaufbauten Führerstandkonsolen
------------------------
Abkanten Druckgefässe Gehäusebau
----------------------
Aluminiumschweissen Edelstahlschweissen Gerüste
Anlagen und Apparatebau Eigenprodukte Gesamtlösungen
---------------------- ------------------------
Bahnkomponenten Einzelanfertigungen Handschweissen
finkenmann@drupal.org
am 21.09.2010 - 07:35 Uhr
Huch, mist... sehe grad, dass meine Antwort von Heute Mittag gar nicht raus ist.
Ein Müsterchen mit der Demoversion ist am Ende des Frageposts verlinkt.
Viel mehr an Beispiel fällt mir hier nicht ein zu posten. Den verwendeten Code hab ich ja schon, den Link zur Musterseite auch. Aussehen sollte es am Ende etwas so, also immer vor einem Wort mit neuem Anfangsbuchstaben soll eine Linie stehen, bzw. eine Klasse ins entsprechende Div einfügt werden:
3D-CAD-Technologie Bolzenschweissen Entwicklung
---------------------- ---------------------- ------------------------
Abdeckungen Dachaufbauten Führerstandkonsolen
------------------------
Abkanten Druckgefässe Gehäusebau
----------------------
Aluminiumschweissen Edelstahlschweissen Gerüste
Anlagen und Apparatebau Eigenprodukte Gesamtlösungen
---------------------- ------------------------
Bahnkomponenten Einzelanfertigungen Handschweissen
Great Job!
Great Antwort... hilft mir
am 21.09.2010 - 12:24 Uhr
Great Antwort... hilft mir nur nicht weiter.
Ich habe mir den Code
am 21.09.2010 - 13:30 Uhr
Ich habe mir den Code angeschaut und kann grad auch nichts falsches finden. Wahrscheinlich aber würde ich als nächsten Schritt mal $i umbenennen in $bac_aktuell, weil $i doch
gerne als Schleifenvariable verwendet wird...
Danke für den Tipp. Das hatte
am 21.09.2010 - 13:39 Uhr
Danke für den Tipp. Das hatte ich auch schon mal probiert, hat aber nichts geholfen. Ich finds super eigenartig, dass diese foreach-Schlaufe den ausserhalb liegenden Wert immer wieder übernimmt... :-( Manno, bin ich ratlos ;-)
Sehr strange... Was mir auch
am 21.09.2010 - 14:55 Uhr
Sehr strange...
Was mir auch schon passiert ist, dass sich ein Stückchen Code gaaaanz weit hinten im php-Source-Code versteckt hat.
Wahrscheinlich hast Du schon Copy&Paste hier ins Forum gemacht, aber vielleicht kannst Du mal auf jeder Zeile ans Ende gehen.
Mir scheint inzwischen aber der Einwand von Sven ziemlich plausibel. Wahrscheinlich bearbeitest Du gerade das falsche tpl,
welches bei JEDEM Feld einzeln aufgerufen und daher $i immer wieder initialisiert wird.
views-view-grid.tpl.php
am 21.09.2010 - 19:40 Uhr
Hallo nochmal,
die Template-Datei, die Du angepasst hast, wird nur für die Felder und quasi Spalten einer View-Zeile verwendet. Dieses "Spalten" haben aber nichts mit Deiner tabellarischen Raster-Darstellung zu tun. In Deinem Falle willst Du die Zeilen und somit die einzelnen Datensätze des Views verarbeiten. Du muß quasi bei Deiner Raster-Darstellung die views-view-grid.tpl.php und deren Ableitungen verwenden. Die Template-Datei läuft dann nämlich auch wirklich durch alle Daten-Zeilen im herkömmlichen Sinne. War das jetzt einigermaßen verständlich? Ich glaub nicht, oder? ;-)
Gruß,
Sven
Noch ein kurzer Hinweis, da
am 21.09.2010 - 19:54 Uhr
Noch ein kurzer Hinweis,
da Du meintest, dass Du aus der views-view-grid.tpl nicht auf die einzelnen Felder / Items zugreifen kannst. Du kommst in den Template Dateien eigentlich problemlos an die Variable $view und dort sollten auch die gesuchten Daten zu finden sein.
Gruß,
Sven
Prima. Das klingt alles sehr
am 21.09.2010 - 20:17 Uhr
Prima. Das klingt alles sehr logisch. Wars eingentlich schon zu Beginn, nur check ich einfach noch nicht, wo welche Arrays mit Daten verfügbar sind und wie die weitergegeben werden. Aber $view ist tatsächlich in der grid.tpl verfügbar. Da werd ich wohl noch ein Weilchen dran rumfriemeln, denke aber, dass mich dein Hinweis ein ganzes Stück vorwärts gebracht hat. Da ich grad die Huppe voll zu tun hab, hab ich den Kunden bisschen vertröstet, werde hier dann, wenn ich ne Lösung hab das ganze auch noch posten.
Herzlichen Dank
Pierre