Como usar o Views PHP para reescrever resultados de um campo?

7

Estou usando o Views PHP para reescrever campos no Views. Eu posso acessar todas as variáveis, mas aquelas que têm um modo de compilação. No meu caso, eu tenho conteúdo: Campo Nó (que pode ser de construção de acordo com qualquer exibição), que deve ser acessado usando a variável $row->nodefield. No entanto, o conteúdo dessa variável está sempre vazio. Eu tentei com outras variáveis ​​e todos os campos com um modo de compilação não serão renderizados no Views PHP .

insira a descrição da imagem aqui

Este é um problema de design ou estou faltando alguma coisa?

Estou usando o Drupal 7 e Views 3

EDITAR

Usando dpm () nos valores disponíveis, retorne o seguinte:

dpm ($ linha)

insira a descrição da imagem aqui

dpm ($ dados)

insira a descrição da imagem aqui

znat
fonte

Respostas:

6

Acima da seção "Código de saída", você deve verificar a $datavariável no campo "Valor".

Normalmente eu só dpm($data)encontro o campo que preciso. Em seguida, você pode salvá-lo na $static['myvalue']variável para uso no campo "Código de saída".

É confuso, mas por algum motivo, se você tentar apenas as $row->xxxvariáveis ​​na seção "Código de saída", elas estão vazias ou definidas como id do nó.

Chance G
fonte
Obrigado. Eu sou novo para isso, então você poderia por favor me ajude ainda mais: quando eu copiar dpm($data)no campo de valor, Visualizações retorna uma "chamada para dpm função indefinida ()" erro"
znat
ESTÁ BEM. O DPM é uma função devel, portanto, não funcionará se você não tiver o módulo devel instalado. Instale isso ou use apenas print_r ($ data).
Chance G
Não encontrei nenhum conteúdo relevante. (veja minha edição) Todos os campos parecem nulos no objeto $ row. Eu tentei outras variáveis ​​como $ view ou $ handler sem sucesso. O token [nodefield] está disponível no Rewrite Results, portanto, deve estar em algum lugar. Alguma outra ideia?
znat 21/05
3

Os $rowitens Variáveis ​​disponíveis no Views são inúteis para obter valores de campo. Mas você não precisa usar noad_loadpara obter os dados necessários. Primeiro, como de costume, oculte a saída do campo que você deseja reescrever e, em seguida, no campo Código de saída do seu campo PHP, você pode usar $datao seguinte:

<?php echo check_markup($data->field_field_body[0]['rendered']['#markup'], 'nitf_body'); ?>

Nesse caso, estou removendo tags não permitidas e atribuídas ao conteúdo para uso em uma exportação NITF. Se você não tem certeza do que está dentro $data, é claro que pode print_r($data)dar uma olhada.

Scott Lahteine
fonte
o que exatamente você quer dizer com: "Primeiro, como de costume, oculte a saída do campo que você deseja reescrever"? Você está consultando a caixa de seleção "Excluir da exibição" no campo que deseja reescrever?
Antonio
Sim. Você usa "Excluir da exibição" sempre que deseja obter o valor de um campo e usá-lo em um campo personalizado subsequente.
Scott Lahteine ​​4/04
11
Você pode usar $data->field_field_body[0]['raw']['value']para obter o valor bruto.
usar o seguinte comando
1

Dica adicional: A matriz de dados $ realmente contém os dados brutos do nó e pode ser impressa. Mas, para renderizá-lo corretamente, precisamos processar os campos com funções como field_view_field .

Druvision
fonte
1

Você está tentando fazer isso dentro das visualizações? Por que não apenas tema o próprio modelo de visualizações em vez de usar o PHP global? Não tenho certeza se print_r funcionará dentro do campo de exibição. Se fosse eu, basta clicar em theme -> information, você verá algo como views-view-field - MyViewName.tpl.php

(edite, esclareça) Na pasta do tema do módulo de visualizações, copie "views-view-field.tpl.php" e renomeie-o para "views-view-field - MyViewName.tpl.php" e coloque-o na pasta / templates no seu site deles. No arquivo, você verá algo como

<?php print $output; ?> 

Você pode excluir isso e adicionar todos os seus campos manualmente, como

<div class="MyPrettyTitle"><?php print $row->_field_data['nid']['entity']->title; ?></div> 
<div class="MyNodeBody">
<?php print $row->_field_data['nid']['entity']->body['und'][0]['value'];?>
</div>

etc. Ou envolva a saída $ com o que quiser.

Além disso, nunca tive muita sorte com o DEVEL, sempre uso:

<?php print var_dump($row);?> 

Em seguida, observe a fonte da página para obter as variáveis. Talvez eu esteja apenas usando DEVEL errado, mas acho que posso obter as variáveis ​​para cada linha muito mais facilmente com um var_dump antigo e regular do PHP.

DrupalMonster
fonte
Isso fornece linhas duplicadas!
user219492
0

Passei dois dias para encontrar a solução. A maneira mais fácil é atualizar o "Views Php Module" para 7.x-2.x-dev. O mantenedor corrigiu esse problema em sua versão 2.x.

Você pode fazer o download aqui (certifique-se de baixar o 7.x-2.x-dev ): https://www.drupal.org/project/views_php

A esperança pode ajudar alguém.

jmu
fonte
0

Você nunca deve armazenar código PHP no seu banco de dados (e com o View PHP, você o fará). Use um gancho Views para modificar os resultados.

ssibal
fonte
Olá @ssibal, e obrigado por contribuir. Você pode explicar por que isso deve ser evitado? Isso aumentaria muito a qualidade da sua postagem.
precisa saber é o seguinte