Drupal Views mit dem Theme Wizard themen


Den Drupal Theme Wizard verwenden Views und CCK sind sehr mächtige Module und erlauben einem viel Freiheit, doch so richtig mächtig werden sie erst, wenn man auch weiss, wie man die Views richtig Themen kann. Es gibt zwar mittlerweilen viele gute Bonus Views (z.B. die Gridview), aber denoch gibt es immer wieder Anforderungen, wo man einfach alles selber in die Hand nehmen muss. Dieses Tutorial soll Schritt für Schritt zeigen, wie es geht: Voraussetzungen:

  • Grundlagen von CCK
  • Wissen, wie man Views erstellen kann

Dann mal los. Als erstes sollte man sich vergewissern, dass der View Type auf "List View" gesetzt ist. Das führt dazu, dass diese standartmässig einfach als ul-Liste aufgeführt werden. Falls man hier etwas anders hat, so klappt es einfach nicht 😉 (Quelle für Fehler Nummer 1). [inline:1_list.png] Als nächstes geht man auf den Theme Wizard (admin/build/views/wizard). Falls der Pfad nicht erreichbar ist, muss das Modul zuerst noch aktiviert werden. Falls alles klappt, dann sieht es wie folgt aus: [inline:1_wizard_1.png] Im ersten Feld kann man die Views auswählen und im zweiten Feld die Art von Liste. Im Normalfall ist das eigentlich "Simle List". Weiter geht es mit "Select Theme Type". Klict man auf den anderen Knopf, so werden Funktionen aufgezeigt, welche überschrieben werden können (das wird in diesem Tutorial nicht behandelt). Daher auf select Theme Type klicken! Jetzt kommt eine Seite mit drei Textfeldern. Das oberste Textfeld enthält eine Funktion, welche in die Datei template.php reinkommt. Falls Zen als Theme verwendet wird, muss das ganze noch ein wenig verändert werden. Was diese Funktion macht: Wenn die Views geladen wird, wird diese Funktion aufgerufen. Die Funktion geht jetzt jeden Eintrag in der Views durch, filtert die nötigen Views Felder raus und verwendet die datei views-list-myView.tpl.php, um die Daten zu Themen. Die zweite Datei ist die eigentliche View, sprich ein Item der View. Hier kann jetzt beliebig gebaut und gearbeitet werden. In der Datei sind dabei die entsprechenden Variablen im Kommentar beschrieben. Die dritte und letzte Datei wäre dann einfach noch dass CSS File, welches geladen wird. Wichtig: Falls etwas nicht klappt, einfach mal kontrollieren, ob keine Tippfehler gemacht wurden und um die Dateien richtig benannt wurden! Ein paar Tipps: Die phptemplate Funktion übergibt auch eine Variable $count an die tpl.php Datei. Diese kann dazu verwendet werden, dass die CSS Datei nur einmal geladen wird:

?> Dadurch kann die Performance verbesser werden und es sieht ein bisschen hübscher aus, wenn man mit dem Firebug rumbrowsd 😉 Die phptemplate Funktion sieht so aus, wenn man sie kopiert:

field as $id => $field) { $field_name = $field['field'];
if (isset($taken[$field_name])) {
$field_name = $field['queryname'];
}
$taken[$field_name] = true;
$field_names[$id] = $field_name;
}

// Set up some variables that won't change.
$base_vars = array(
'view' => $view,
'view_type' => $type,
);

foreach ($nodes as $i => $node) {
$vars = $base_vars;
$vars['node'] = $node;
$vars['count'] = $i;
$vars['stripe'] = $i % 2 ? 'even' : 'odd';
foreach ($view->field as $id => $field) {
$name = $field_names[$id];
$vars[$name] = views_theme_field('views_handle_field', $field['queryname'], $fields, $field, $node, $view);
if (isset($field['label'])) {
$vars[$name . '_label'] = $field['label'];
}
}
$items[] = _phptemplate_callback('views-list-frontpage', $vars);
}
if ($items) {
return theme('item_list', $items);
}
}
?>

Falls man mehr Variablen übergen will, so kann dies relativ einfacht gemacht werden:

In der tpl.php Datei kann dann folgendes gemacht werden:

Eine letzte kleine Erklärung:

Dieser Aufruf befindet sich in der foreach Schlaufe. Sprich, wenn wir gesagt haben, wir wollen in unserer View 10 Elemente anzeigen lassen, dann wird diese Schlaufe 10 Mal durchlaufen. Es wird also 10 Mal die tpl.php Datei aufgerufen. Was zurück kommt ist reiner HTML code, welcher in der Array $items gespeichert wird. Damit das ganze dann auch wieder rauskommt, ist die folgende Zeile notwendig:

Damit wird die Funktion theme_item_list($items) aufgerufen. Das Array wird durchlaufen und einen Listen HTML Code draus gemacht:

  • $item[1]
  • $item[2]
  • $item[3]
  • $item[10]

Es ist ja eine Liste. Manchmal will man es jedoch als reinen HTML Code haben, dann kann man einfach eine eigenen Theme Funktion schreiben:

Natürlich muss dann auch die phptemplate Funktion angepasst werden, was so aussehen würde:

So, das wäre es dann gewesen. Es ist wirklich recht simpel, wenn man sich einfach mal Zeit nimmt und sich ein wenig dahinter setzt und es einmal durchspielt. Die phptemplate Funktion kann natürlich noch beliebig optimiert und verändert werden… Die Ausgabe ist recht beliebig. Es könnte sogar eine Tabelle ausgegeben werden, wenn man das wollte. Falls Anmerkungen sind… Bitte einfach das Kommentarformular benutzten. Ich bin froh, wenn ich mehr dazu lernen kann und andere Leser sicher auch. Falls das Tutorial hilfreich war -> Bitte auf die Werbung klicken (reich werde ich nicht, aber ist doch ein kleiner Verdienst, damit ich evtl. mal die Hostinggebühren damit bezahlen kann).