问题描述
|
我用谷歌搜索,安装了Devel,Drupal for Firebug,但找不到。
我找到了我想要的东西,我知道它在哪里;我只是不知道如何得到它。
我将其放在代码括号中,但是Devel告诉我文件名(我想粘贴到.tpl.PHP文件中)在这里:
field_image(Object)stdClass
处理程序(对象)views_handler_field_field
视图(对象)视图
结果(数组,2个元素)
0(对象)stdClass
_field_data(数组,1个元素)
nid(数组,2个元素)
实体(Object)stdClass
field_image(数组,1个元素)
und(Array,1 element)
0(数组,11个元素)
文件名(字符串,23个字符)FILENAME.jpg
那么,如何使用PHP输出该FILENAME.jpg?
<?PHP print $something->other; ?>
解决方法
每当需要从变量中读取值时,就需要知道需要公式化哪个表达式才能访问该值。
对于一个简单的变量值,这很简单,您只需将变量名作为变量并通过在其前面加上
$
符号即可将其作为变量访问:
var_dump($variable);
在此处记录。
但是,这仅适用于简单数据类型,如string
或integer
。也有复合数据类型,即array
和object
。它们可以包含其他数据类型,无论是简单数据还是复合数据。您可以在PHP手册中学习如何访问数组的值以及如何从对象访问它们的值。我想您已经知道了一点,所以只需要在此处进行链接即可。
了解到这一点后,您可以将其组合起来。例如。如果对象中有一个数组,并且其中有一个想要获取的字符串,则需要将“ 1”号和变量名与所需的访问器,属性名和数组键结合使用。然后,您便获得了价值。您发布的数据表明您有一个包含其他对象和数组的对象,最后找到了变量名。
一些组合示例:
var_dump($variable->handler->view[0]->_field_data);
这是基于您上面提供的数据。以“ 9”开头,“ 10”用于访问需要随后命名的对象成员(例如变量名):“ 11”。正如您在调试输出中看到的那样,ѭ11是一个对象,您需要再次使用ѭ10来访问它的view
成员。
现在ѭ14有所不同,因为它是一个数组。您可以通过使用[]
并将键放在其中来访问数组的值。在我的示例中,键是数字0
。由于该数组条目的值再次是一个对象,因此在下一步中,您需要再次使用->
。
您可以继续该游戏,直到到达您感兴趣的元素为止。已经拥有的调试输出可帮助您编写返回值的表达式。可能是:
$field_image->handler->view->result[0]->_field_data[\'nid\'][\'entity\']->field_image[\'und\'][0][\'filename\']
但是我无法在我的系统上完全验证这一点。
但是,当发现问题时,使用ѭ20会很有帮助,因为您可以逐步扩展表达式直到找到元素。如果输入错误,您将立即看到。有时在var_dump
语句后放置die();
很有帮助,这样可以避免在包含很多其他数据的响应之前结束响应,这些其他数据将对您隐藏信息。 devel插件提供了额外的调试例程来转储突出的值。
, 如果这是您的对象:
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]
。
, 假设您在$ node中有一个node对象。您可以使用以下命令很好地打印它的值:
dpm($node); // remember this function is declared in devel module
然后,您可以查看来自$ node的信息,然后单击以展开内部字段。双击该字段,您可以看到它的php路径。
您会得到以下结果:
希望有帮助!
PD:我想此功能在D6的dpm中不可用。
, 尝试:
$field_image->handler->view->result[0]->_field_data[\'nid\'][\'entity\']->field_image[\'und\'][0][\'filename\']
, 如果您已安装devel并尝试
krumo ($variable);
请记住,默认情况下,只有管理员用户有权使用krumo命令,但这可以通过查看DEVEL角色权限来解决。 (不过,一旦完成操作,请不要忘记删除这些权限)
, <? 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),这将返回可渲染的array。您可以检查api文档https://api.drupal.org/api/drupal/modules%21field%21field.module/function/field_view_field/7.x
, 如果由于某种原因而无法使用devel模块,则另一个有用的“调试”功能可能是var_export()和Drupal包装器drupal_var_export()。这些函数将输出作为PHP代码提供。