Wie greife ich auf einen Feldwert in der Variablen "$ row" in einer Feldansichts-Designvorlage zu?


11

Ich überschreibe eine Feldvorlage für eine meiner Ansichten und möchte über die Variable $ row auf einen anderen Feldwert zugreifen können. Die Dokumentation in der Vorlagendatei zeigt Folgendes:

Beim Abrufen der Ausgabe aus der $ row sollte dieses Konstrukt verwendet werden: $ data = $ row -> {$ field-> field_alias}

Mein Feld heißt field_calendar_title, aber Folgendes funktioniert nicht wie erwartet:

$row->{$field->field_calendar_title}

Ich erhalte folgenden Fehler:

Schwerwiegender Fehler: Kein Zugriff auf leere Eigenschaft ...

Unterscheidet sich das Feld "Alias" vom Namen des Feldes im Inhaltstyp?

"Bereinigte" Ausgabe von var_dump von $ 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 ) ) )
                                ...
                        )
) 

Antworten:


10

Anhand des Aussehens var_dumpsollten Sie in der Lage sein, Ihren Feldwert folgendermaßen zu finden:

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

Ich hoffe wirklich, dass es einen besseren Weg gibt!


Entschuldigung, ich habe die Syntax in meiner Frage korrigiert und es hat immer noch nicht funktioniert. Versuchte dies auch und kein Glück $ row-> field_calendar_title;
Etwas am

Hmmm ... ich denke die Fehlermeldung $fieldist undefiniert ... hast du versucht eine var_dump($row)zu machen um zu sehen was da eigentlich drin ist ? Wahrscheinlich werden Sie das Feld, nach dem Sie suchen, leicht erkennen :)
Clive

Hey Clive, yup ich habe ein var_dump gemacht und das Feld existiert unter _field_data zusammen mit den restlichen Feldwerten ...
SomethingOn

Wenn Sie die Ausgabe von var_dump($row)in Ihre Frage als Bearbeitung einfügen können, kann ich möglicherweise den gewünschten Wert erkennen
Clive

@ SomethingOn Ich habe die Antwort aktualisiert, es ist nicht schön, aber es sollte funktionieren :)
Clive

7

Ein einfacherer Ansatz:

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

Hier ist $ fieldname der ursprüngliche Feldname (nicht der Ansichts-Alias-Feldname), z. B. 'field_myfield'.


3

Vielleicht etwas spät, aber zum späteren Nachschlagen hier meine Antwort:

Die Beschreibung ist ziemlich vage, aber Sie sollten wörtlich verwenden:

$row->{$field->field_alias}

In Ihrer Vorlagendatei ist außerdem Folgendes vermerkt:

Variablen zur Verfügung:

  • $ view: Das Ansichtsobjekt
  • $ field: Das Feldbehandlungsobjekt, das die Eingabe verarbeiten kann
  • $ row: Das rohe SQL-Ergebnis, das verwendet werden kann
  • $ output: Die verarbeitete Ausgabe, die normalerweise verwendet wird.

In $ field gibt es ein Feld namens field_alias. So $row->{$field->field_alias}zeigt tatsächlich, in Ihrem Fall, field_calendar_title.

Versuchen Sie, ein var_dump von $ field zu erstellen, und Sie werden es selbst sehen.

Hoffe, das hilft jedem, der auf diesen Beitrag stößt.

Gerben


Es ist nie zu spät, immer noch eine Trendfrage. 1. Ich möchte das Beispiel von monströs @ Clive nicht verwenden, obwohl es funktioniert. 2. Ich möchte verstehen, wie man mit gegebenen Variablen arbeitet: $ row, $ filed usw. Ihr Vorschlag gibt nur eine Zahl zurück (vielleicht nid oder smth ), aber wie kann ich genau auf mein Feld zugreifen? Was ist, wenn ich zwei verschiedene Felder haben möchte?
Vladkras

-2

Der einfachste Weg ist: $ fields ["field_name"] -> content; Wobei field_name -> cck field name.

Hoffe das wird helfen !!

Prost ! Raj


1
In der $fields
Feldvorlage
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.