Comment accéder à une valeur de champ dans la variable $ row d'un modèle de thème de vue de champ?

11

Je remplace un modèle de champ pour l'une de mes vues et je souhaite pouvoir accéder à une autre valeur de champ à partir de la variable $ row. La documentation sur le fichier modèle montre ceci:

Lors de la récupération de la sortie de la ligne $, cette construction doit être utilisée: $ data = $ row -> {$ field-> field_alias}

Mon champ s'appelle field_calendar_title, mais ce qui suit ne fonctionne pas comme prévu:

$row->{$field->field_calendar_title}

J'obtiens l'erreur suivante:

Erreur fatale: impossible d'accéder à la propriété vide ...

Le champ "alias" est-il différent du nom du champ dans le type de contenu?

Sortie "nettoyée" de 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 ) ) )
                                ...
                        )
) 
Quelque chose
la source

Réponses:

10

D'après l'apparence du, var_dumpvous devriez pouvoir trouver la valeur de votre champ avec ceci:

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

J'espère vraiment qu'il y a un meilleur moyen que ça!

Clive
la source
Désolé d'avoir corrigé la syntaxe dans ma question et cela n'a toujours pas fonctionné. J'ai essayé aussi et pas de chance $ row-> field_calendar_title;
Quelque chose
Hmmm ... Je pense que le message d'erreur $fieldn'est pas défini ... avez-vous essayé de faire un var_dump($row)pour voir ce qui s'y trouve réellement? Vous repérerez probablement le terrain que vous recherchez assez facilement :)
Clive
Hey Clive, yup j'ai fait un var_dump et le champ existe sous _field_data avec le reste des valeurs de champ ...
SomethingOn
Si vous pouvez insérer la sortie de var_dump($row)dans votre question en tant que modification, je pourrais être en mesure de repérer la valeur dont vous avez besoin
Clive
@SomethingOn J'ai mis à jour la réponse, ce n'est pas joli mais ça devrait marcher :)
Clive
7

Une approche plus simple:

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

Ici, $ fieldname est le nom de champ d'origine (et non pas la vue), par exemple 'field_myfield'.

user606696
la source
3

Peut-être un peu en retard, mais pour référence future, voici ma réponse:

La description est assez vague, mais vous devez littéralement utiliser:

$row->{$field->field_alias}

Dans votre fichier modèle, il est également noté que:

Variables disponibles:

  • $ view: l'objet de vue
  • $ field: l'objet gestionnaire de champ qui peut traiter l'entrée
  • $ row: le résultat SQL brut qui peut être utilisé
  • $ output: la sortie traitée qui sera normalement utilisée.

Dans $ field, il y a un champ appelé field_alias. Donc $row->{$field->field_alias}pointe en fait, dans votre cas, field_calendar_title.

Essayez de faire un var_dump de $ field et vous verrez par vous-même.

J'espère que cela aidera toute personne rencontrant ce message.

Gerben

Gerben Spil
la source
Il n'est jamais trop tard, question toujours d'actualité. 1. Je ne veux pas utiliser l'exemple monstrueux de @ Clive, bien que cela fonctionne. 2. Je veux comprendre comment travailler avec des variables données: $ row, $ deposited, etc. Votre suggestion ne renvoie qu'un nombre (peut-être nid ou smth ), mais comment accéder précisément à mon domaine. Et si j'ai deux champs différents que je veux obtenir?
vladkras
-2

La manière la plus simple est: $ fields ["field_name"] -> content; Où nom_champ -> nom du champ cck.

J'espère que cela vous aidera !!

À votre santé ! Raj

Rajendra Prasad Das
la source
1
il n'y a pas de $fieldsvariable disponible dans le modèle de champ
Ejaz