Jak zmienić wartość pojedynczego pola niestandardowego w widokach?

11

Mam widok z polem Global: Custom Text, który jest modyfikowany jako link. Chcę zmienić tokeny zastępcze do generowania tego łącza, w zależności od wartości innego pola.

Próbowałem to zmienić w hook_views_pre_render, ale nie mogę znaleźć sposobu, aby to zrobić.

W hook_views_post_render są dwie tablice:

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

który zawiera wygenerowane linki dla każdego wiersza, ale nie są obecne w pre_render, a zmiana ich w post_render nie działa.

Próbowałem również to zrobić w szablonach_preprocess_views_view_fields, ale dla tego konkretnego widoku funkcja ta nie uruchamia się (dla innych widoków to robi) i nie wiem dlaczego.

dmk.it
źródło

Odpowiedzi:

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;
  }
}

Sprawdź link, aby uzyskać więcej informacji Jak programowo wstawiać wartości do globalnego niestandardowego pola tekstowego widoków?

dodaj nid jako pole w widoku i użyj tego pola dla warunku, możesz dodać warunek w następujący sposób: if ($nid == '124') { $view->field['nothing']->options['alter']['text'] = $nid}

Prostym sposobem jest utworzenie nowego pola field_waga, które będzie miało field_waga_1 jako nową nazwę, jeśli zaznaczysz w widoku, a następnie będziesz mógł zmienić etykietę i zastąpić to pole swoją wartością niestandardową

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
źródło
To rozwiązanie zmienia każde pole na „Mój tekst niestandardowy”, nie widzę opcji zmiany tylko wybranych pól i zmiany łącza (jeśli pole zostanie zmodyfikowane tak, aby wyświetlało się jako łącze) w ten sposób. Niestety nie mogę użyć funkcji preprocess_views_view_fields (), o której mowa w podanym przez ciebie linku, ponieważ z nieznanego (dla mnie;)) powodu ta funkcja nie jest uruchamiana dla tego konkretnego widoku.
dmk.it,
możesz dodać warunek w następujący sposób: if ($ nid == '124') {$ view-> field ['nothing'] -> options ['alter'] ['text'] = $ nid}
harshal
sprawdź zaktualizowaną odpowiedź
harshal
Dodano warunek w ten sposób: if ($ view-> result [0] -> field_waga [0] ['raw'] ['value'] == '10') {$ view-> field ['nothing'] - > options ['alter'] ['text'] = 'ALTER'; } Jeśli a ma wartość „10” w pierwszym rzędzie niż wszystkie pola „nic” ma wartość „ALTER”. Niestety nie tylko pierwsze, ale wszystkie wiersze. Myślę, że jest to zmiana globalna i nie można jej użyć do wybranych wierszy.
dmk.it,
1
Nie tylko dodaj pole_waga, które już masz, używając pola dodawania, a następnie użyj tego pola jako pola niestandardowego, aby wprowadzić własne wartości
harshal
0

Jako aktualizację powyższej odpowiedzi musiałem ustawić „alter_text” na PRAWDA, aby to zadziałało, np .:

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
źródło