¿Cómo usar Views PHP para reescribir los resultados de un campo?

7

Estoy usando Views PHP para reescribir campos en Views. Puedo acceder a todas las variables PERO las que tienen un modo de construcción. En mi caso, tengo el campo Contenido: Nodo (que se puede construir de acuerdo con cualquier pantalla), al que debería accederse utilizando la variable $row->nodefield. Sin embargo, el contenido de esa variable siempre está vacío. He intentado con otras variables, y cada campo con un modo de compilación no se representará en Vistas PHP .

ingrese la descripción de la imagen aquí

¿Es esto un problema de diseño o me falta algo?

Estoy usando Drupal 7 y Views 3

EDITAR

El uso de dpm () en los valores disponibles devuelve lo siguiente:

dpm ($ fila)

ingrese la descripción de la imagen aquí

dpm ($ datos)

ingrese la descripción de la imagen aquí

znat
fuente

Respuestas:

6

Encima de la sección "Código de salida" debe verificar la $datavariable en el campo "Valor".

Por lo general, solo busco dpm($data)el campo que necesito. Luego puede guardarlo en la $static['myvalue']variable para usarlo en el campo "Código de salida".

Es confuso pero, por alguna razón, si prueba solo las $row->xxxvariables en la sección "Código de salida", están vacías o configuradas en el id de nodo.

Oportunidad G
fuente
Gracias. Soy nuevo en esto, así que podría ayudarme más: cuando copio dpm($data)en el campo de valor, Views devuelve una "llamada a la función indefinida dpm ()" error "
znat
OKAY. DPM es una función de desarrollo, por lo que no funcionará si no tiene instalado el módulo de desarrollo . Instale eso o simplemente use print_r ($ data).
Chance G
No encontré ningún contenido relevante. (ver mi edición) Todos los campos parecen nulos en el objeto $ row. He intentado otras variables como $ view o $ handler sin éxito. Sin embargo, el token [fieldfield] está disponible en Rewrite Results, por lo que debería estar en algún lugar. Alguna otra idea?
znat
3

Los $rowelementos de Variables disponibles en las Vistas son inútiles para obtener valores de campo. Pero no necesita usar noad_loadpara obtener los datos que necesita. Primero, como de costumbre, oculta la salida del campo que deseas reescribir, luego en el campo Código de salida de tu campo PHP puedes usar $dataasí:

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

En este caso, estoy eliminando las etiquetas no permitidas y atribuidas al contenido para su uso en una exportación NITF. Si no está seguro de lo que hay dentro $data, puede, por supuesto, print_r($data)echarle un vistazo.

Scott Lahteine
fuente
¿Qué quiere decir exactamente con: "Primero, como siempre, oculte la salida del campo que desea reescribir"? ¿Se está refiriendo a la casilla de verificación "Excluir de la pantalla" en el campo que queremos reescribir?
Antonio
Si. Utiliza "Excluir de pantalla" cuando quieras obtener el valor de un campo y usarlo en un campo personalizado posterior.
Scott Lahteine
1
Puede usar $data->field_field_body[0]['raw']['value']para obtener el valor bruto.
user2534880
1

Consejo adicional: la matriz $ data contiene los datos del nodo sin procesar y puede imprimirse. Pero para representarlo correctamente, necesitamos procesar los campos con funciones como field_view_field .

Druvision
fuente
1

¿Estás tratando de hacer esto dentro de las vistas? ¿Por qué no simplemente crear un tema de la plantilla de vistas en lugar de usar PHP global? No estoy seguro de si print_r funcionará dentro del campo de vista. Si fuera yo, simplemente haría clic en tema -> información, verá algo como vistas-campo-vista - MyViewName.tpl.php

(editar, aclaración) En la carpeta de temas del módulo de vistas, copie "views-view-field.tpl.php", luego cámbiele el nombre a "views-view-field - MyViewName.tpl.php" y colóquelo en su carpeta / templates en tu sitio ellos. En el archivo, verás algo como

<?php print $output; ?> 

Puede eliminar eso y agregar todos sus 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. O envuelva el $ output con lo que quiera.

Además, nunca he tenido mucha suerte con DEVEL, siempre uso:

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

Luego mirando la fuente de la página para obtener las variables. Tal vez solo estoy usando DEVEL incorrectamente, pero encuentro que puedo obtener las variables para cada fila mucho más fácil con un PHP var_dump viejo y regular.

DrupalMonster
fuente
¡Esto da filas duplicadas!
user219492
0

Pasé dos días para encontrar la solución. La forma más fácil es actualizar el "Módulo Php de Vistas" a 7.x-2.x-dev. El mantenedor solucionó este problema en su versión 2.x.

Puede descargar desde aquí (asegúrese de descargar 7.x-2.x-dev ): https://www.drupal.org/project/views_php

La esperanza puede ayudar a alguien.

jmu
fuente
0

NUNCA debe almacenar el código PHP en su base de datos (y con View PHP lo hará). Utilice un enlace de Vistas en su lugar para modificar los resultados.

ssibal
fuente
Hola @ssibal, y gracias por contribuir. ¿Puedes explicar por qué esto debería evitarse? Aumentaría enormemente la calidad de tu publicación.
Neograph734