Como alterar o valor de um único campo personalizado nas visualizações?

11

Eu tenho uma visão com o campo Global: texto personalizado, que é modificado como um link. Desejo alterar os tokens de substituição para gerar esse link, dependendo de um valor de outro campo.

Tentei modificar isso em hook_views_pre_render, mas não consigo encontrar uma maneira de fazer isso.

Em hook_views_post_render, existem duas matrizes:

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

que contém links gerados para cada linha, mas eles não estão presentes no pre_render, e alterá-los no post_render não funciona.

Eu também tentei fazer isso em template_preprocess_views_view_fields, mas para essa visualização específica, essa função não é acionada (para outras visualizações), e não sei por quê.

dmk.it
fonte

Respostas:

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

Verifique o link para obter mais detalhes Como inserir valores no campo de exibição de texto personalizado global programaticamente?

adicione nid como campo à vista e use esse campo para a condição. Você pode adicionar a condição da seguinte maneira: if ($nid == '124') { $view->field['nothing']->options['alter']['text'] = $nid}

A maneira simples é criar um novo campo field_waga que terá field_waga_1 como novo nome se você fizer check-in na visualização e alterar o rótulo e substituir esse campo pelo seu valor personalizado

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
fonte
Esta solução altera todos os campos para 'Meu texto personalizado', não consigo ver uma opção para alterar apenas os campos escolhidos e alterar um link (se o campo for modificado para exibir como um link) dessa maneira. Infelizmente, não posso usar uma função preprocess_views_view_fields (), mencionada no link que você forneceu, porque, por motivo desconhecido (para mim;)), essa função não é acionada para esta visão específica.
Dmk.it 04/12/2013
você pode adicionar a condição da seguinte maneira: if ($ nid == '124') {$ view-> campo ['nothing'] -> options ['alter'] ['text'] = $ nid}
harshal
verificar resposta atualizada
harshal 4/13/13
Condição adicionada desta maneira: if ($ view-> result [0] -> field_waga [0] ['raw'] ['value'] == '10') {$ view-> field ['nothing'] - > opções ['alter'] ['text'] = 'ALTER'; } Se a tiver um valor '10' na primeira linha, todos os campos 'nothing' terão o valor 'ALTER'. Não apenas primeiro, mas todas as linhas, infelizmente. Eu acho que é uma alteração global e não pode ser usada para linhas escolhidas.
Dmk.it 04/12
1
Não basta adicionar um field_waga que você já tenha novamente usando o campo Adicionar e, em seguida, usar esse campo como campo personalizado para introduzir os seus valores personalizados
Harshal
0

Como uma atualização da resposta acima, eu tive que definir 'alter_text' como TRUE para que isso funcionasse, por exemplo:

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
fonte