如何在字段视图主题模板的$ row变量中访问字段值?


11

我正在为其中一个视图覆盖字段模板,并且希望能够从$ row变量访问另一个字段值。模板文件上的文档显示了以下内容:

从$ row获取输出时,应使用以下构造:$ data = $ row-> {$ field-> field_alias}

我的字段称为field_calendar_title,但是以下内容无法正常工作:

$row->{$field->field_calendar_title}

我收到以下错误:

致命错误:无法访问空属性...

字段“别名”与内容类型中的字段名称是否不同?

$ row的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 ) ) )
                                ...
                        )
) 

Answers:


10

从外观上,var_dump您应该可以使用以下命令找到字段值:

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

我真的希望有比这更好的方法!


抱歉,我更正了问题中的语法,但仍然无法正常工作。也尝试过这个,没有运气$ row-> field_calendar_title;
SomethingOn 2012年

嗯...我认为错误消息中的信息$field未定义...您是否尝试过进行操作var_dump($row)以查看其中的实际内容?您可能会很容易地发现自己所追求的领域:)
克莱夫(Clive)

嗨,克莱夫,是的,我做了一个var_dump,该字段与其他字段值一起存在于_field_data下……
SomethingOn

如果您可以var_dump($row)将问题的输出作为编辑添加到您的问题中,那么我也许可以发现您需要的值
Clive

@SomethingOn我已经更新了答案,虽然不漂亮,但应该可以使用:)
Clive

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。

尝试制作$ field的var_dump,您会自己看到的。

希望这对遇到这篇文章的人有所帮助。

格本


永远不会太晚,仍然是一个趋势。1.我不想使用可怕的@Clive的示例,尽管它可以工作2.我确实想了解如何使用给定的变量:$ row,$ filed等。您的建议仅返回一个数字(可能是nid或smth ),但我该如何准确访问自己的领域。如果我想获得两个不同的领域怎么办?
vladkras 2014年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.