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 ) ) )
                                ...
                        )
) 

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!


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”.


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


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


1
$fieldsw szablonie pola nie ma żadnej zmiennej
Ejaz
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.