能够在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,如string
或integer
。 还有复合数据types,即array
和object
。 它们可以包含更多的数据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。
你会得到这个结果:
希望有所帮助!
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提供输出。