¿Cómo accedo a un valor de campo en la variable $ row en una plantilla de tema de vista de campo?


11

Estoy anulando una plantilla de campo para una de mis vistas y quiero poder acceder a otro valor de campo desde la variable $ row. La documentación en el archivo de plantilla muestra esto:

Al recuperar la salida de la fila $, se debe usar esta construcción: $ data = $ row -> {$ field-> field_alias}

Mi campo se llama field_calendar_title, pero lo siguiente no funciona como se esperaba:

$row->{$field->field_calendar_title}

Obtuve el siguiente error:

Error fatal: no se puede acceder a la propiedad vacía ...

¿El campo "alias" es diferente del nombre del campo en el tipo de contenido?

Salida "limpiada" de var_dump de $ row:

stdClass Object
(
    [node_title] => ...
    [nid] => 568
    [field_data_field_performance_date_delta] => 0
    [field_data_field_performance_date_language] => und
    [field_data_field_performance_date_bundle] => event
    [field_data_field_performance_date_field_performance_date_val] => 2012-03-02 19:00:00
    [field_data_field_performance_date_node_entity_type] => node
    [_field_data] => Array
        (
            [nid] => Array
                (
                    [entity_type] => node
                    [entity] => stdClass Object
                        (
                            [vid] => 878
                            [uid] => 0
                            [title] => ...
                            [log] => 
                            [status] => 1
                            [comment] => 0
                            [promote] => 0
                            [sticky] => 0
                            [nid] => 568
                            [type] => event
                            [language] => und
                            [created] => 1329332968
                            [changed] => 1331836509
                            [tnid] => 0
                            [translate] => 0
                            [revision_timestamp] => 1331836509
                            [revision_uid] => 1
                            [body] => Array
                                (
                                    [und] => Array
                                        (
                                            [0] => Array
                                                (
                                                    [value] => ...
                                                    [summary] => ...
                                                    [safe_summary] => ...
                                                )
                                        )
                                )
                                [field_resident_company] => Array ( [und] => Array ( [0] => Array ( [tid] => 3 ) ) )
                                [field_series] => Array ( [und] => Array ( [0] => Array ( [tid] => 36 ) ) )
                                [field_venue] => Array ( )
                                [field_rotator_image] => Array ( )
                                [field_exclude] => Array ( [und] => Array ( [0] => Array ( [value] => 0 ) ) )
                                [field_performance_image] => Array ( )
                                [field_premiere] => Array ( [und] => Array ( [0] => Array ( [value] => 1330714800 [timezone] => UTC [timezone_db] => UTC [date_type] => datestamp ) ) )
                                [field_closing] => Array ( [und] => Array ( [0] => Array ( [value] => 1330714800 [timezone] => UTC [timezone_db] => UTC [date_type] => datestamp ) ) )
                                [field_exclude_update] => Array ( [und] => Array ( [0] => Array ( [value] => 0 ) ) )
                                [field_performance_date] => Array ( [und] => Array ( [0] => Array ( [value] => 2012-03-02 19:00:00 [timezone] => UTC [timezone_db] => UTC [date_type] => datetime ) ) )
                                [field_performance_id] => Array ( [und] => Array ( [0] => Array ( [value] => 1436 [format] => [safe_value] => 1436 ) ) ) [field_event_status] => Array ( [und] => Array ( [0] => Array ( [value] => open ) ) )
                                [field_calendar_title] => Array ( [und] => Array ( [0] => Array ( [value] => PSYCHIC EXP [format] => [safe_value] => PSYCHIC EXP ) ) )
                                ...
                        )
) 

Respuestas:


10

A juzgar por el aspecto var_dump, debería poder encontrar su valor de campo con esto:

$row->_field_data['nid']['entity']->field_calendar_title['und'][0]['value'];

¡Realmente espero que haya una mejor manera que eso!


Lo siento, corrigí la sintaxis en mi pregunta y todavía no funcionó. Intenté esto también y no tuve suerte $ row-> field_calendar_title;
Algo el

Hmmm ... creo que el mensaje de error $fieldno está definido ... ¿has intentado hacer una var_dump($row)para ver qué hay realmente allí? Probablemente detectará el campo que está buscando con bastante facilidad :)
Clive

Hola Clive, sí, hice una var_dump y el campo existe bajo _field_data junto con el resto de los valores de campo ...
SomethingOn

Si puede mostrar el resultado de var_dump($row)su pregunta como una edición, podría detectar el valor que necesita
Clive

@SomethingOn He actualizado la respuesta, no es bonita, pero debería funcionar :)
Clive

7

Un enfoque más simple:

$rendered_field = $view->render_field($fieldname, $view->row_index);

Aquí, $ fieldname es el nombre de campo original (no el alias de vista), por ejemplo, 'field_myfield'.


3

Tal vez un poco tarde, pero para referencia futura aquí está mi respuesta:

La descripción es bastante vaga, pero debería usar literalmente:

$row->{$field->field_alias}

En su archivo de plantilla también se observa que:

Variables disponibles:

  • $ view: el objeto de vista
  • $ field: el objeto controlador de campo que puede procesar la entrada
  • $ row: el resultado de SQL sin formato que se puede usar
  • $ output: El resultado procesado que normalmente se usará.

En $ field hay un campo llamado field_alias. Entonces, en $row->{$field->field_alias}realidad, apunta a, en su caso, field_calendar_title.

Intenta hacer un var_dump de $ field y lo verás por ti mismo.

Espero que esto ayude a cualquiera que se encuentre con esta publicación.

Gerben


Nunca es demasiado tarde, sigue siendo una pregunta de tendencia. 1. No quiero usar el monstruoso ejemplo de @ Clive, aunque funciona 2. Sí quiero entender cómo trabajar con variables dadas: $ fila, $ archivado, etc. Su sugerencia devuelve solo un número (tal vez nid o smth ), pero ¿cómo puedo acceder con precisión a mi campo? ¿Qué sucede si tengo dos campos diferentes que quiero obtener?
vladkras

-2

La forma más simple es: $ fields ["field_name"] -> content; Donde nombre_campo -> nombre del campo cck.

Espero que ayude !!

Salud ! Raj


1
no hay $fieldsvariable disponible en la plantilla de campo
Ejaz
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.