我用Google搜索,为Firebug安装了Devel,Drupal,但我找不到它。
我找到我想要的,我知道其中;我只是不知道如何来获得它。
我会把它放在代码括号中,但是Devel告诉我文件名(我想留在.tpl.php文件中)在这里:
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
那么,如何使用PHP输出FILENAME.jpg?
<?php print $something->other; ?>
答案 0 :(得分:17)
每当您需要从变量中读取值时,您需要知道需要制定哪个表达式来访问该值。
对于一个简单的变量值,这很简单,您只需获取变量名称并将其作为变量访问,方法是在其前面添加$
符号:
var_dump($variable);
但是,这仅适用于string
或integer
等简单数据类型。还有复合数据类型,即array
和object
。它们可以包含更多数据类型,无论是简单还是复合。您可以在PHP手册中学习如何access the values of an array以及如何you can access them from an object。我想你已经知道了一点,所以只是把它链接在这里。
当您了解了这一点后,您就可以将其结合起来。例如。如果对象中有一个数组,并且其中有一个你想要获得的字符串,则需要将$
符号和变量名称与所需的访问器,属性名称和数组键组合在一起。然后你就得到了你的价值。您发布的数据显示您有一个包含其他对象和数组的对象,最后您会找到变量名称。
一些组合示例:
var_dump($variable->handler->view[0]->_field_data);
这是基于您在上面提供的数据。 $variable
是您开始的地方,->
用于访问需要命名的对象成员(如变量的名称):handler
。正如您在调试输出中看到handler
是一个对象,您需要再次使用->
来访问view
成员。
现在view
是不同的,因为它是一个数组。您可以使用[]
并将密钥放在那里来访问数组的值。我的示例中的关键字是数字0
。由于该数组条目的值再次成为对象,因此在下一步中您需要再次使用->
。
您可以继续此游戏,直到找到您感兴趣的元素。您已有的调试输出可帮助您编写返回值的表达式。可能是:
$field_image->handler->view->result[0]->_field_data['nid']['entity']->field_image['und'][0]['filename']
但我无法在我的系统上完整验证。
然而,当发现问题时,使用var_dump
是有帮助的,因为您可以一步一步地扩展表达式,直到找到元素。如果你犯了错误,你会立即看到。有时,在die();
语句之后放置var_dump
有助于在响应包含之前将响应结束到将隐藏您的信息的其他数据。 devel插件提供了额外的调试例程来转储突出显示的值。
答案 1 :(得分:6)
如果这是你的对象:
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
我猜您可以使用以下方式找到它:
field_image->handler->view->result[0]->_field_data['nid'][entity]->field_image['und'][0]['filename]
可能是一个错误,但一般的想法是:如果你有一个对象,使用->
获取变量,如果你有一个数组,使用[key]
。
答案 2 :(得分:4)
假设您在$ node中有一个节点对象。您可以使用以下方式打印它的值:
dpm($node); // remember this function is declared in devel module
然后,您可以从$ node查看信息,并通过单击展开内部字段。双击该字段,您可以看到它的php路径。
你会得到这个结果:
希望有所帮助!
PD:我想这个功能在D6的dpm上不可用。
答案 3 :(得分:3)
尝试:
$field_image->handler->view->result[0]->_field_data['nid']['entity']->field_image['und'][0]['filename']
答案 4 :(得分:0)
如果您已安装devel并尝试
krumo ($variable);
请记住,默认情况下,只有管理员用户有权使用krumo命令,但可以通过查看DEVEL角色权限来解决此问题。 (尽管如此,请不要忘记删除这些权限)
答案 5 :(得分:0)
<? print_r($something["other"]); ?>
(其他的是这个) 所以结果就是'这个'
答案 6 :(得分:0)
让我总结一下
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.
答案 7 :(得分:0)
你应该使用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
答案 8 :(得分:0)
如果由于某种原因你不能使用devel模块,另一个有用的“调试”函数可能是var_export()和一个Drupal包装器drupal_var_export()。这些函数将输出作为PHP代码。