Как получить доступ к значению поля в переменной $ row в шаблоне темы представления поля?


11

Я переопределяю шаблон поля для одного из моих представлений и хочу получить доступ к другому значению поля из переменной $ row. Документация по файлу шаблона показывает это:

При извлечении выходных данных из $ row следует использовать эту конструкцию: $ data = $ row -> {$ field-> field_alias}

Мое поле называется field_calendar_title, но следующее не работает должным образом:

$row->{$field->field_calendar_title}

Я получаю следующую ошибку:

Неустранимая ошибка: невозможно получить доступ к пустому свойству ...

Отличается ли поле «псевдоним» от имени поля в типе содержимого?

«Очищенный» вывод из var_dump строки $:

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

Ответы:


10

Судя по всему, var_dumpвы сможете найти значение вашего поля с помощью этого:

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

Я действительно надеюсь, что есть лучший способ, чем это, хотя!


Извините, я исправил синтаксис в своем вопросе, и он все еще не работал. Пробовал это тоже и не повезло $ row-> field_calendar_title;
что-то

Хммм ... я думаю из сообщения об ошибке $fieldне определено ... вы пытались сделать, var_dump($row)чтобы увидеть, что на самом деле там? Скорее всего, вы легко заметите поле, которое вам нужно :)
Клайв

Эй, Клайв, да, я сделал var_dump, и поле существует под _field_data вместе с остальными значениями поля ...
SomethingOn

Если вы можете добавить вывод var_dump($row)в свой вопрос в качестве редактирования, я мог бы найти нужное вам значение
Клайв

@ Что-то на я обновил ответ, это не красиво, но это должно работать :)
Клайв

7

Более простой подход:

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

Здесь $ fieldname является исходным (не псевдонимом представления) именем поля, например, 'field_myfield'.


3

Может быть, немного поздно, но для дальнейшего использования вот мой ответ:

Описание довольно расплывчато, но вы должны буквально использовать:

$row->{$field->field_alias}

В вашем файле шаблона также отмечено, что:

Доступные переменные:

  • $ view: просмотр объекта
  • $ field: объект обработчика поля, который может обрабатывать ввод
  • $ row: необработанный результат SQL, который можно использовать
  • $ output: обработанный вывод, который обычно будет использоваться.

В $ field есть поле с именем field_alias. Так $row->{$field->field_alias}что на самом деле указывает на, в вашем случае, field_calendar_title.

Попробуйте сделать var_dump из поля $, и вы сами все увидите.

Надеюсь, это поможет любому, кто сталкивается с этим постом.

Gerben


Никогда не поздно, все еще актуальный вопрос. 1. Я не хочу использовать пример monstrous @ Clive, хотя он работает 2. Я хочу понять, как работать с заданными переменными: $ row, $ filed и т. Д. Ваше предложение возвращает только число (возможно, nid или smth ), но как я могу получить доступ именно к своему полю? Что если у меня есть два разных поля, которые я хочу получить?
vladkras

-2

Самый простой способ: $ fields ["field_name"] -> content; Где field_name -> имя поля cck.

Надеюсь, это поможет!

Ура! Радж


1
$fieldsв шаблоне поля нет доступных переменных
Ejaz
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.