Як отримати доступ до значення поля у змінній $ row у шаблоні теми перегляду поля?


11

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

При отриманні виводу з рядка $ слід використовувати цю конструкцію: $ data = $ row -> {$ field-> field_alias}

Моє поле називається field_calendar_title, але наступне не працює так, як очікувалося:

$row->{$field->field_calendar_title}

Я отримую таку помилку:

Фатальна помилка. Неможливо отримати доступ до порожньої власності ...

Чи відрізняється поле "псевдонім" від назви поля у типі вмісту?

"Очищений" вихід з 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 ) ) )
                                ...
                        )
) 

Відповіді:


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)поставити підсумок свого питання як редагування, я можу виявити потрібне вам значення
Clive

@SomethingOn Я оновив відповідь, це не дуже, але це має працювати :)
Клайв

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 з $ поля, і ви самі переконаєтесь.

Сподіваюсь, це допоможе кожному, хто натрапив на цю посаду.

Гербен


Ніколи не пізно, як і раніше актуальне питання. 1. Я не хочу використовувати приклад монстра @ Клайва, хоча він працює 2. Я хочу зрозуміти, як працювати з даними змінними: $ row, $ файл і т.д. Ваша пропозиція повертає лише число (можливо, nid або smth ), але як я можу отримати доступ саме до свого поля. Що робити, якщо у мене є два різних поля, які я хочу отримати?
vladkras

-2

Найпростіший спосіб - це: $ polja ["ім'я_поля"] -> вміст; Де ім'я поля -> назва поля cck

Сподіваюся, що допоможе !!

Ура! Радж


1
$fieldsу шаблоні поля немає змінної
Ejaz
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.