Jak uzyskać dostęp do wartości pola w zmiennej $ row w szablonie kompozycji widoku pola?

11

Zastępuję szablon pola dla jednego z moich widoków i chcę mieć dostęp do innej wartości pola ze zmiennej $ row. Dokumentacja pliku szablonu pokazuje to:

Podczas pobierania danych wyjściowych z wiersza $ należy użyć tej konstrukcji: $ data = $ row -> {$ field-> field_alias}

Moje pole nazywa się field_calendar_title, ale następujące nie działa zgodnie z oczekiwaniami:

$row->{$field->field_calendar_title}

Otrzymuję następujący błąd:

Błąd krytyczny: nie można uzyskać dostępu do pustej właściwości ...

Czy pole „alias” różni się od nazwy pola w typie zawartości?

„Oczyszczone” wyjście z var_dump $ 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 ) ) )
                                ...
                        )
) 
Coś
źródło

Odpowiedzi:

10

Z wyglądu var_dumpmożesz znaleźć swoją wartość pola za pomocą tego:

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

Mam jednak nadzieję, że istnieje lepszy sposób!

Clive
źródło
Przepraszamy, poprawiłem składnię w moim pytaniu i nadal nie działała. Próbowałem też i bez powodzenia $ row-> field_calendar_title;
Coś
Hmmm ... Myślę, że komunikat o błędzie $fieldjest niezdefiniowany ... próbowałeś zrobić, var_dump($row)żeby zobaczyć, co tam naprawdę jest? Prawdopodobnie z łatwością zauważysz boisko, którego szukasz :)
Clive
Hej Clive, tak, zrobiłem zrzut_ var i pole istnieje pod _field_data wraz z resztą wartości pola ...
Coś
Jeśli umieścisz wynik var_dump($row)swojego pytania jako edycję, być może uda mi się znaleźć potrzebną wartość
Clive
@SomethingOn Zaktualizowałem odpowiedź, nie jest ładna, ale powinna działać :)
Clive
7

Prostsze podejście:

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

$ Nazwa_pola to oryginalna nazwa pola (nie aliasu widoku), np. „Moje_pole”.

użytkownik606696
źródło
3

Może trochę za późno, ale w celu uzyskania odniesienia w przyszłości oto moja odpowiedź:

Opis jest dość niejasny, ale powinieneś dosłownie użyć:

$row->{$field->field_alias}

W pliku szablonu należy również zauważyć, że:

Dostępne zmienne:

  • $ view: Obiekt widoku
  • $ field: Obiekt obsługi pola, który może przetwarzać dane wejściowe
  • $ row: Surowy wynik SQL, którego można użyć
  • $ output: przetworzone wyjście, które zwykle będzie używane.

W polu $ znajduje się pole o nazwie field_alias. W $row->{$field->field_alias}rzeczywistości oznacza to w twoim przypadku field_calendar_title.

Spróbuj zrobić var_dump pola $, a przekonasz się sam.

Mam nadzieję, że pomoże to każdemu, kto natknie się na ten post.

Gerben

Gerben Spil
źródło
Nigdy nie jest za późno, wciąż aktualne pytanie. 1. Nie chcę używać monstrualnego przykładu Clive'a, chociaż działa 2. Chcę zrozumieć, jak pracować z podanymi zmiennymi: $ row, $ filed itp. Twoja sugestia zwraca tylko liczbę (może nid lub smth ), ale jak dokładnie uzyskać dostęp do mojego pola. Co jeśli mam dwa różne pola, które chcę uzyskać?
vladkras
-2

Najprostszym sposobem jest: $ fields [„nazwa_pola”] -> treść; Gdzie nazwa_pola -> nazwa pola cck.

Mam nadzieję, że to pomoże !!

Twoje zdrowie ! Raj

Rajendra Prasad Das
źródło
1
$fieldsw szablonie pola nie ma żadnej zmiennej
Ejaz