Como acesso um valor de campo na variável $ row em um modelo de tema de exibição de campo?

11

Estou substituindo um modelo de campo para uma das minhas visualizações e quero poder acessar outro valor de campo da variável $ row. A documentação no arquivo de modelo mostra isso:

Ao buscar a saída da linha $, essa construção deve ser usada: $ data = $ row -> {$ field-> field_alias}

Meu campo é chamado field_calendar_title, mas o seguinte não funciona conforme o esperado:

$row->{$field->field_calendar_title}

Estou tendo o erro a seguir:

Erro fatal: não é possível acessar a propriedade vazia ...

O campo "alias" é diferente do nome do campo no tipo de conteúdo?

Saída "limpa" do var_dump de $ 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 ) ) )
                                ...
                        )
) 
SomethingOn
fonte

Respostas:

10

Pela aparência do, var_dumpvocê poderá encontrar o valor do seu campo com isso:

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

Eu realmente espero que exista uma maneira melhor do que isso!

Clive
fonte
Desculpe, corrigi a sintaxe da minha pergunta e ela ainda não funcionou. Tentei isso também e sem sorte $ row-> field_calendar_title;
SomethingOn
Hmmm ... acho que a mensagem de erro $fieldestá indefinida ... você tentou fazer um var_dump($row)para ver o que realmente está lá? Você provavelmente encontrará o campo que procura com muita facilidade :)
Clive
Ei Clive, sim, eu fiz um var_dump e o campo existe em _field_data, juntamente com o restante dos valores do campo ...
SomethingOn
Se você pode estalar a saída var_dump($row)para a sua pergunta como uma edição que eu poderia ser capaz de detectar o valor que você precisa
Clive
@SomethingOn Eu atualizei a resposta, não é bonito, mas ele deve funcionar :)
Clive
7

Uma abordagem mais simples:

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

Aqui, $ fieldname é o nome do campo original (não o alias da visualização), por exemplo, 'field_myfield'.

user606696
fonte
3

Talvez um pouco tarde, mas para referência futura, aqui está a minha resposta:

A descrição é bastante vaga, mas você deve literalmente usar:

$row->{$field->field_alias}

No seu arquivo de modelo, também é observado que:

Variáveis ​​disponíveis:

  • $ view: o objeto de visualização
  • $ field: o objeto manipulador de campo que pode processar a entrada
  • $ row: o resultado bruto do SQL que pode ser usado
  • $ output: a saída processada que normalmente será usada.

No campo $ existe um campo chamado field_alias. Então, $row->{$field->field_alias}na verdade, está apontando para, no seu caso, field_calendar_title.

Tente fazer um var_dump de $ field e você verá por si mesmo.

Espero que isso ajude quem se deparar com este post.

Gerben

Gerben Spil
fonte
Nunca é tarde demais, ainda é uma pergunta de tendência. 1. Não quero usar o exemplo monstruoso do @ Clive, embora funcione 2. Quero entender como trabalhar com variáveis: $ row, $ archive, etc. Sua sugestão retorna apenas um número (talvez nid ou smth ), mas como posso acessar com precisão meu campo. E se eu tiver dois campos diferentes que desejo obter?
precisa saber é
-2

A maneira mais simples é: $ fields ["field_name"] -> content; Onde field_name -> cck field name.

Espero que ajude !!

Felicidades ! Raj

Rajendra Prasad Das
fonte
1
não há nenhuma $fieldsvariável disponível no modelo de campo
Ejaz