能够在print_r()的输出中看到一个variables,但不知道如何在代码中访问它

我GOOGLE了,安装了Devel,为Firebug Drupal,但我找不到它。

我find我想要的,我知道它在哪里 ; 我只是不知道如何得到它。

我会把它放在代码中,但是Devel告诉我文件名(我想要放在.tpl.php文件中)在这里:

 field_image(Object)stdClass 
  处理程序(对象)views_handler_field_field 
    查看(对象)视图 
      结果(数组,2个元素) 
         0(Object)stdClass 
           _field_data(数组,1个元素) 
             nid(数组,2个元素) 
              实体(对象)stdClass
                 field_image(Array,1个元素) 
                   und(数组,1个元素)
                     0(数组,11个元素)                                      
                      文件名(string,23个字符)FILENAME.jpg

那么,我如何才能使用PHP输出FILENAME.jpg呢?

<?php print $something->other; ?> 

无论何时您需要从variables中读取一个值,您都需要知道需要expression哪个expression式来访问该值。

对于一个简单的variables值来说,这很简单,你只需要把variables名称作为variables,并用$ sign作为前缀就可以访问它:

 var_dump($variable); 

这是在这里logging 。

但是,这只适用于简单的数据types,如stringinteger 。 还有复合数据types,即arrayobject 。 它们可以包含更多的数据types,无论是简单还是复合。 您可以在PHP手册中学习如何访问数组的值以及如何从对象访问它们 。 我想你已经知道了一点,所以只是为了让它链接到这里。

当你了解了这些之后,就可以把这个结合起来。 例如,如果对象中有一个数组,并且其中有一个string,则需要将$符号和variables名称与所需的访问器,属性名称和数组键组合在一起。 然后你得到你的价值。 你发布的数据显示你有一个对象有一些其他的对象和数组,最后你可以findvariables名。

一些组合的例子:

 var_dump($variable->handler->view[0]->_field_data); 

这是基于您上面提供的数据。 $variable是你开始的地方, ->用于访问需要被命名的对象成员(比如一个variables的名字): handler 。 正如你在debugging输出中看到的, handler是一个对象,你需要再次使用->来访问它的view成员。

现在view是不同的,因为它是一个数组。 您可以使用[]来访问数组的值,并将键放在那里。 在我的例子中的关键是一个数字, 0 。 而且,由于数组条目的值又是一个对象,下一步需要再次使用->

您可以继续这个游戏,直到您到达您感兴趣的元素。您已经有的debugging输出可以帮助您编写返回值的expression式。 可能是:

 $field_image->handler->view->result[0]->_field_data['nid']['entity']->field_image['und'][0]['filename'] 

但是我无法完全validation我的系统。

但是,当找出东西时,使用var_dump会很有帮助,因为您可以逐步扩展expression式直到find元素。 如果你犯了一个错误,你会立即看到。 有时它有助于放置一个die();var_dump语句之后,不要在响应中包含许多其他将隐藏信息的数据之前结束响应。 devel插件提供额外的debugging例程来突出显示值。

如果这是你的对象:

 field_image (Object) stdClass handler (Object) views_handler_field_field view (Object) view result (Array, 2 elements) 0 (Object) stdClass _field_data (Array, 1 element) nid (Array, 2 elements) entity (Object) stdClass field_image (Array, 1 element) und (Array, 1 element) 0 (Array, 11 elements) filename (String, 23 characters ) FILENAME.jpg 

我猜你可以find它使用:

 field_image->handler->view->result[0]->_field_data['nid'][entity]->field_image['und'][0]['filename] 

这可能是一个错误,但一般的想法是:如果你有一个对象,使用->获得variables,如果你有一个数组,使用[key]

假设您在$ node中有一个节点对象。 你可以打印它的值非常好:

 dpm($node); // remember this function is declared in devel module 

然后,您可以从$ node中看到信息,并单击展开内部字段。 而双击该字段,你可以看到它的PHPpath。

Devel Drupal节点对象的信息

你会得到这个结果:

双击字段后显示路径

希望有所帮助!

PD:我想这个function在D6的dpm上不可用。

尝试:

 $field_image->handler->view->result[0]->_field_data['nid']['entity']->field_image['und'][0]['filename'] 

如果你已经安装并尝试

 krumo ($variable); 

只要记住默认情况下,只有pipe理员用户有权使用krumo命令,但可以通过查看DEVELangular色权限来解决这个问题。 (不要忘记一旦你完成删除这些权限)

 <? print_r($something["other"]); ?> 

(其他是这个)所以结果是'这个'

让我总结一下

 print_r($data); => Traditional view of printing array. var_dump($data); => Not so much cleaned view , gives you everything but in very suffocated manner print "<pre>"; print_r($data); => A cleaned view but will not get data types information. dpm($data); => It gives you everything, but you need to have installed devel. 

你应该使用field_view_field($ entity_type,$ entity,$ field_name,$ display = array(),$ langcode = NULL),这将返回可渲染的数组。 你可以检查api文件https://api.drupal.org/api/drupal/modules%21field%21field.module/function/field_view_field/7.x

如果由于某种原因无法使用devel模块,另一个有用的“debugging”函数可能是var_export()和Drupal包装函数drupal_var_export() 。 这些函数以PHP代码的forms提供输出。