Как изменить значение отдельного настраиваемого поля в представлениях?

11

У меня есть вид с полем Global: Custom Text, который изменяется как ссылка. Я хочу изменить токены замены для генерации этой ссылки, в зависимости от значения другого поля.

Попытался изменить это в hook_views_pre_render, но я не могу найти способ сделать это.

В hook_views_post_render есть два массива:

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

который содержит сгенерированные ссылки для каждой строки, но их нет в pre_render, и их изменение в post_render не работает.

Я также пытался сделать это в template_preprocess_views_view_fields, но для этого конкретного представления эта функция не срабатывает (для других представлений это происходит), и я не знаю почему.

dmk.it
источник

Ответы:

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

Проверьте ссылку для более подробной информации. Как программно вставить значения в глобальное настраиваемое текстовое поле представлений?

добавьте nid как поле зрения и используйте это поле для условия, вы можете добавить условие следующим образом: if ($nid == '124') { $view->field['nothing']->options['alter']['text'] = $nid}

Простой способ - создать новое поле field_waga, которое будет иметь field_waga_1 в качестве нового имени, если вы включите представление, а затем вы можете изменить метку и переопределить это поле с помощью пользовательского значения.

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
источник
Это решение меняет каждое поле на «Мой пользовательский текст», поэтому я не вижу возможности изменить только выбранные поля и таким образом изменить ссылку (если поле изменено для отображения в виде ссылки). К сожалению, я не могу использовать функцию preprocess_views_view_fields (), которая упоминается в предоставленной вами ссылке, потому что по неизвестной (для меня;)) причине эта функция не запускается для этого конкретного представления.
dmk.it
Вы можете добавить условие следующим образом: if ($ nid == '124') {$ view-> field ['nothing'] -> options ['alter'] ['text'] = $ nid}
harshal
проверить обновленный ответ
харшал
Таким образом добавлено условие: if ($ view-> result [0] -> field_waga [0] ['raw'] ['value'] == '10') {$ view-> field ['nothing'] - > options ['alter'] ['text'] = 'ALTER'; } Если a имеет значение '10' в первой строке, тогда все поля 'nothing' имеют значение 'ALTER'. К сожалению, не только первый, но и все ряды. Я думаю, что это глобальное изменение, и его нельзя использовать для выбранных строк.
dmk.it
1
Нет, просто добавьте field_waga, который у вас уже есть, с помощью поля add, а затем используйте это поле в качестве настраиваемого поля для ввода пользовательских значений
harshal
0

В качестве обновления к приведенному выше ответу мне пришлось установить для 'alter_text' значение TRUE, чтобы это работало, например:

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;
  }
}
Тайлер Фахи
источник