[gelöst] [View] Feld abhängig vom Inhalt formatieren
am 24.09.2012 - 13:03 Uhr in
Hi,
ich habe mir einen tabellarischen View andgelegt und möchte nun den Text in 2 Spalten je nach Inhalt formatieren.
Im Speziellen geht es um einen "Begriff" ("OSV Zittau") den ich, egal in welcher Spalte er auftritt, fett dargestellt haben möchte.
Beim suchen im Internet bin ich schon auf diverse Ansätze gestoßen, so auch auf folgenden:
<?php
function theme_preprocess_views_view_fields(&$vars) {
if ($do_your_checks) {
$vars['fields']['field_name'] = preg_replace(...) // Use regular expression to change title.
}
}
?>
Wie preg_replace funktioniert weiß ich auch allerdings muss ich nun die vermeintlich dumme Frage stellen:
Wo muss diese Funktion hin und wie bringe ich Drupal bei diese Funktion nur in meinem View zu nutzen? (vermutlich als Abfrage anstelle von $do_your_checks ?)
Gibt es vielleicht einen anderen Weg das Problem zu lösen?
Von Veränderungen im Drupalsystem oder gar von Modulentwicklung habe ich derzeit absolut null Ahnung, daher meine Frage.
Hoffe mir kann geholfen werden.
LG Benni
- Anmelden oder Registrieren um Kommentare zu schreiben
Ich habe auch mal gegoogled
am 24.09.2012 - 15:12 Uhr
Ich habe auch mal gegoogled und dabei folgendes Snippet gefunden
<?php
function NAME-OF-THEME_preprocess_views_view_fields(&$vars, $hook){
// machine name of view
if ($vars['view']->name == 'homepage_slideshow') {
..........
?>
Das gehört in die template.php in Deinem Theme und NAME-OF-THEME muß durch den Namen Deines Themes ersetzt werden. In den anderen Funktionen dort nachsehen, wie die anfangen.
Du mußt selbst dafür sorgen, daß diese Funktion nur bei Deinem speziellen View ausgeführt wird (daher die Abfrage).
Beste Grüße
Werner
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Erstmal Danke für die
am 24.09.2012 - 15:54 Uhr
Erstmal Danke für die Hilfe.
Blamiert habe ich mich da wohl..
Da töne ich erst, dass ich weiß wie es geht aber anscheinend weiß ich es nicht.
Mein Theme war bisher ein Subtheme von Bartik ohne eigene template.php
Ich habe nun die template.php kopiert und alle Vorkommen von bartik mit osv (so heißt mein Theme) ersetzt.
Um mein Ziel zu erreichen habe ich folgenden Code hinzugefügt:
<?php
/**
* Implements the formatting for OSV Zittau View
*/
function osv_preprocess_views_view_fields(&$vars, $hook){
if ($vars['view']->name == 'view_spielplan') {
$vars['field']['field_heim'] = preg_replace("OSV Zittau", "<strong>OSV Zittau</strong>", $vars['field']['field_heim']);
}
if ($vars['view']->name == 'view_spielplan') {
$vars['field']['field_gast'] = preg_replace("OSV Zittau", "<strong>OSV Zittau</strong>", $vars['field']['field_gast']);
}
}
?>
ich nehme ja an, dass
<?php
$vars['fields']['field_name']
?>
field_name für den namen meines Feldes, also einmal field:heim und einmal field_gast, steht. Liege ich da schon falsch?
Leider konnte ich in der Ausgabe als Page (via View) keine Auswirkung feststellen. Liegt es nun, Gott bewahre, an meinem preg_replace oder habe ich so einen hook vergessen? O der liegt es vielleicht am output?
Habe in einer anderen function
<?php
$output .= '<h3 class="field-label">' . $variables['label'] . ': </h3>';
return $output;
?>
entdeckt. Muss ich das auch machen?
Bin da wirklich ratlos :-/
Installiere Dir das Devel
am 24.09.2012 - 16:07 Uhr
Installiere Dir das [do:devel Devel Modul]. Dann kannst Du in Deine Routine dsm($vars['fields']); einbauen als zusätzliche Zeile am Beginn der Routine. Drupal gibt dann auf der Seite einen Bereich aus, indem Du die Struktur und auch den Inhalt der Variablen genau untersuchen kannst.
Beste Grüße
Werner
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
So Leid es mir tut, aber es
am 24.09.2012 - 20:25 Uhr
So Leid es mir tut, aber es tut sich garnichts.
ich habe Devel installiert und dsm($vars['fields']); in meine Funktion geschrieben.
Es passiert nichts was wiederum wohl darauf deutet, dass meine Funktion nicht erst aufgerufen wird?
EDIT:
Ich konnte es inzwischen soweit eingrenzen, dass ich nun weiß das die Funktion nicht aufgerufen wird.
<?php
function osv_preprocess_page(&$vars) {
$views = $vars['page']['#views_contextual_links_info']['views_ui']['view']->field['field_gast'];//->name;
dpm($views);
}
?>
funktioniert. Aber direkt drunter
<?php
function osv_preprocess_views(&$vars, $hook) {
dpm($vars);
}
?>
Muss die Funktion noch "registriert" werden?
PS: ich rufe den view über
www.domain.de/spielplan
auf.Du mußt auch die korrekten
am 24.09.2012 - 20:33 Uhr
Du mußt auch die korrekten Funktionen verwenden:
Wie die Templates heißen können zeigt Dir Views ja unter Extras an. Die Funktionsnamen müssen entsprechend gebildet werden z.B.
Beste Grüße
Werner
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Nach inziwschen 67 Versuchen
am 25.09.2012 - 09:07 Uhr
Nach inziwschen 67 Versuchen (ja ich bin ein 'try and error' - Typ) habe ich inzwischen folgenden, funktionierenden Code:
<?php
function osv_preprocess_views_view_field(&$vars) {
$markup = $vars['row']->field_field_gast['0']['rendered']['#markup'];
if($markup == 'OSV Zittau')
$markup = preg_replace("/OSV Zittau/", "<strong>OSV Zittau</strong>", $markup);
dpm($markup);
}
?>
Mit diesem Code kann ich den Wert inzwischen ändern, leider wird er nicht als html interpretiert, liegt das jetzt vllt an meinen Feld-Typ?
Dieser ist Text, sollte er eher "Langer Text"? (der lange Text wird ja mit Filtered HTML umgesetzt)
Auch HTML- und CSS-Kenntnisse
am 25.09.2012 - 09:07 Uhr
Auch HTML- und CSS-Kenntnisse sind manchmal nötig. Ersetze im Markup OSV Zittau durch
<span class="osvbold">OSV Zittau</span>
. Dann kannst Du mittels CSS den Text in der Klasse osvbold auf Bold setzen.Beste Grüße
Werner
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Da haben sich mein Posting
am 25.09.2012 - 09:12 Uhr
Da haben sich mein Posting und Deine Änderung überschnitten. Was kommt den auf der Seite bei der Ausgabe an? Hast Du mal den Ergebnis HTML-Code angesehen?
Beste Grüße
Werner
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Ich hatte meinen Beitrag
am 25.09.2012 - 09:23 Uhr
Ich hatte meinen Beitrag nochmal geändert, da hat sich deine Antwort wohl überschnitten.
Und ob ich nun
<strong>, <b>
oder nen<span>
mit Klasse nehme ist m.E. egal.Es sieht im moment so aus:
Ich nehme an, dass die Variable die ich ändere nicht nochmal von Drupal verarbeitet wird, obwohl die function ja preprocess heißt...
Du darfst nicht nur $markup
am 25.09.2012 - 10:01 Uhr
Du darfst nicht nur $markup verändern. Du mußt die Variable auch wieder in $vars einbringen. Die Variable $markup verläßt Deine Funktion nicht. Hast Du daran gedacht?
Beste Grüße
Werner
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Ah super! An die Zeile <?php
am 26.09.2012 - 07:38 Uhr
Ah super!
An die Zeile
<?php
$vars['row']->field_field_gast['0']['rendered']['#markup'] = $markup;
?>
habe ich natürlich nicht gedacht.
Nun klappt es endlich wie gewollt!
Meinen herzlichsten Danke für die Geduld und die kompetente Hilfe!
Grüße
Benni