Wie ändere ich einen einzelnen benutzerdefinierten Feldwert in Ansichten?

11

Ich habe eine Ansicht mit dem Feld Global: Benutzerdefinierter Text, das als Link geändert wird. Ich möchte Ersatz-Token zum Generieren dieses Links in Abhängigkeit von einem Wert eines anderen Felds ändern.

Ich habe versucht, dies in hook_views_pre_render zu ändern, aber ich kann keinen Weg finden, dies zu tun.

In hook_views_post_render gibt es zwei Arrays:

$view->style_plugin->render_tokens
$view->style_plugin->row_tokens

Dies enthält generierte Links für jede Zeile, die jedoch in pre_render nicht vorhanden sind. Das Ändern dieser Links in post_render funktioniert nicht.

Ich habe auch versucht, dies in template_preprocess_views_view_fields zu tun, aber für diese bestimmte Ansicht wird diese Funktion nicht ausgelöst (für andere Ansichten), und ich weiß nicht warum.

dmk.it.
quelle

Antworten:

16
function hook_views_pre_render(&$view) {

  switch ($view->name) {
    case 'YOUR_VIEW_NAME':
      //  override the global custom text field value
      $view->field['nothing']->options['alter']['text'] = 'My custom text';
    break;
  }
}

Überprüfen Sie den Link für weitere Details. Wie füge ich Werte programmgesteuert in ein globales benutzerdefiniertes Textfeld mit Ansichten ein?

Fügen Sie nid als Feld in der Ansicht hinzu und verwenden Sie dieses Feld für die Bedingung. Sie können die Bedingung wie folgt hinzufügen: if ($nid == '124') { $view->field['nothing']->options['alter']['text'] = $nid}

Eine einfache Möglichkeit besteht darin, ein neues Feld field_waga zu erstellen, das field_waga_1 als neuen Namen hat, wenn Sie die Ansicht einchecken. Anschließend können Sie die Beschriftung ändern und dieses Feld mit Ihrem benutzerdefinierten Wert überschreiben

if($view->result[0]->field_waga[0]['raw']['value'] == '10') {
//here you can create the field to act as custom text field and enter the custom //value
$view->result[0]->field_waga_1[0]['#markup'] = 'alter';
}
Harshal
quelle
Diese Lösung ändert jedes Feld in "Mein benutzerdefinierter Text". Es wird keine Option angezeigt, nur ausgewählte Felder zu ändern und einen Link auf diese Weise zu ändern (wenn das Feld so geändert wird, dass es als Link angezeigt wird). Leider kann ich keine preprocess_views_view_fields () -Funktion verwenden, die in dem von Ihnen angegebenen Link erwähnt wird, da diese Funktion aus unbekannten (für mich;)) Gründen für diese bestimmte Ansicht nicht ausgelöst wird.
dmk.it
Sie können die Bedingung wie folgt hinzufügen: if ($ nid == '124') {$ view-> field ['nothing'] -> options ['alter'] ['text'] = $ nid}
harshal
Überprüfen Sie die aktualisierte Antwort
Harshal
Bedingung auf diese Weise hinzugefügt: if ($ view-> result [0] -> field_waga [0] ['raw'] ['value'] == '10') {$ view-> field ['nothing'] - > options ['alter'] ['text'] = 'ALTER'; } Wenn a in der ersten Zeile den Wert '10' hat, haben alle Felder 'nichts' den Wert 'ALTER'. Nicht nur zuerst, sondern leider alle Zeilen. Ich denke, es ist eine globale Änderung und kann nicht für ausgewählte Zeilen verwendet werden.
dmk.it
1
Nein, fügen Sie einfach eine field_waga hinzu, die Sie bereits wieder über das Feld add haben, und verwenden Sie dieses Feld dann als benutzerdefiniertes Feld, um Ihre benutzerdefinierten Werte
einzugeben
0

Als Aktualisierung der obigen Antwort musste ich 'alter_text' auf TRUE setzen, damit dies funktioniert, z.

function hook_views_pre_render(&$view) {

  switch ($view->name) {
    case 'YOUR_VIEW_NAME':
    //  override the global custom text field value
    $view->field['nothing']->options['alter']['text'] = 'My custom text';
    $view->field['nothing']->options['alter']['alter_text'] = TRUE;

    break;
  }
}
Tyler Fahey
quelle