Skip to Content

Customfield - PHP in Views

Eine Sammlung kleiner PHP-Kniffe speziell in Views.

Voraussetzung:

  • Für Header/Footer muss das Eingabeformat PHP erlauben.
  • Damit auch Views-Felder PHP verstehen können, braucht man Views_Customfield
  • In diesem (leider sehr langen) Screencast wird die Technik demonstriert.

PHP
Views lassen sich leicht einbauen - die Ansichten sind durchnumeriert. Bsp:
<?php print views_embed_view('myView','page_2'); ?>
<?php print views_embed_view('myView','default',arg(2)); ?>     
   Default-Ansicht - mit Parameter arg(2)
 
Zugriff auf Argumente in Header/Footer - mit views_get_current_view()
<?php
  $view=views_get_current_view();
  print 'Das erste Argument ist: '.$view->args[0];
?>
 
Zugriff auf Args/Fields in Views_Customfield-Feldern über $data->name, denn [Token] funktioniert hier leider nicht, (Die Namen können überraschend lang sein):
<?php print $data->node_data_field_begriff_field_begriff_value; ?>
Tip: <?php print_r($data); ?> listet alle Field-Value-Namen. 
         Weiteres steht in $this ->   <?php var_dump($this); ?>
Tip: Übergebene Argumente (wenn View zB mit views_embed_view() aufgerufen) sind hier:
         <?php print $this->view->args[1]; ?>   <- entspricht arg(1)
View als SQL-Abfrage
Flexibel und bequem -> Bsp: myView berechnet eine nid (zb. vom jüngsten Beitrag)
$view = views_get_view(myView,'attachment_1');
$view->set_arguments(array($a1,$a2)); // Argumentübergabe hier !
$view->execute();
$nid=$view->result[0]->nid;
Oder einfacher:
$result=views_get_view_result(myView,'attachment_1',$a1,$a2);
$nid=$result[0]->nid;
Mehr PHP
 
schlaue Edit-Links
Views bietet standardmäßig einen Edit/Delete-Link (mit Redirect) an, der nur dann erscheint, wenn man die entsprechenden Rechte auf den Nodetypen hat.
Das funktioniert aber nur dann, wenn es sich auf den Basis-Nodetypen bezieht.
Das folgende Code-Snippet in einem Views-Customfield gibt Edit und Delete Buttons, wenn man zB. Adminrechte hat - Delete mit Redirect zur aktuellen Seite:
<?php if (user_access('access administration pages'))
  return '<div class="edit-link">'
  .l('[Edit]','node/'.$data->nid.'/edit').' '.l('[Delete]','node/'.$data->nid.'/delete', array('query'=>'destination='.url($_GET['q']))).'</div>'; ?>
Verschachtelte Views
gelingen mit der obigen Technik und der Möglichkeit von Views_Customfield, PHP-Felder auszugeben.
Theming-Namen
Theme:Information   zeigt mögliche Templates sowie deren Standardcode an. Namenskonvention:
Standard -> views-view.tpl.php gilt für alle Views
spezifisch -> views-view-list[--myView][--mySubview].tpl.php Bsp. Subviews: default, page-1,...
Bei Feldern kann zusätzlich noch der Feldname ausgegeben werden:
Feld à views-view-field[--myView][--mySubview][--myField].tpl.php
Lesenswertes

Kommentare

PHP in Views ist hidden code. Das ist natürlich unschön.
Vorteil: Die View lässt sich einfach exportieren und woanders nutzen.

Alternative: Template. Ist bei komlizierten Wünschen eleganter - aber nicht, wenn man zu jedem Feldtypen ein eigenes Template baut. Dann gibt es verstreuten code.

Programmers choice: Views um geeignete Feldtypen oder Ansichten erweitern. Waaahnsinnig elegant aber auch recht aufwendig. Der Code ist zentral, aber für den Uneingeweihten kaum zu finden/verstehen.

Tipp: PHP in Views ganz besonders deutlich kommentieren !!!

Relativierung: Ist die View Teil eines Features, kann auch gut im Code gesucht werden.

Schöne Ausführung!
Vielen Dank für diese sehr gute Art der Aufstellung. Gerade das Listing aller Variablen, die dem custom_field zur Verfügung stehen, hat mir sehr geholfen. Custom_field = views->gone wild!

Kommentar hinzufügen

Der Inhalt dieses Feldes wird nicht öffentlich zugänglich angezeigt.
  • Internet- und E-Mail-Adressen werden automatisch umgewandelt.
  • Zulässige HTML-Tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>, <drupal6>, <java>, <javascript>, <php>. The supported tag styles are: <foo>, [foo]. PHP source code can also be enclosed in <?php ... ?> or <% ... %>.

Weitere Informationen über Formatierungsoptionen

CAPTCHA
Nerd oder Robot ?
audiovi_ue_l: