[英]Drupal 7 get teaser with field_view_value()
我有一个Ajax处理程序脚本,我在其中加载$nodeId
并在默认(完整)视图中输出结果:
$node = node_load($input);
$prerendered_node = node_view( $node, 'default' );
...
现在我需要显示预告片(摘要或修剪)。
到目前为止我试过这个,没有成功(摘要内容已填写):
1.
$item = $node->body['en'][0];
$output = field_view_value('node', $node, 'body', $item, 'Teaser');
echo $output; (blank)
2. echo $node->body['eng']['0']['summary']; (blank)
这个问题的解决方案但不起作用:
3. $output = truncate_utf8(strip_tags($node->body['eng']['0']['summary']),200,true,true);
echo $output; (blank)
奇怪的是var_dump($node->body['eng']['0'])
显示和包含value
(body), summary
, clean_summary
和其他元素的clean_summary
,并且summary
具有必要的值。 但是在示例2中我无法直接访问它,它显示为空白。
提示,好吗?
谢谢。
没有直接访问值的正确方法(所以你自动获得我认为的国际化版本)如下所示:
$node = node_load($nid);
$body = field_get_items('node', $node, 'body');
$teaser = field_view_value('node', $node, 'body', $body[0],'teaser');
要输出$ teaser值,需要将其传递给render()函数
print render($teaser);
JC
我想这是一个多语言的网站,否则你可能会在$node->body['und'][0]
(即und
,未定义的语言代码)中找到你要找的东西?
你的第一个解决方案应该有效,只有你使用了Teaser
而不是teaser
,我很确定视图模式区分大小写。 你还有$node->body['en'][0]
( en
语言代码),而你在所有其他例子中都使用了语言代码eng
......这可能是问题吗?
如果$node->body['eng']['0']['summary']
不为空,那么你的第二个解决方案就必须工作,所以我再次检查你的var_dump()
是否产生了准确的结果(是你吗?在调用$node = node_load($input);
之后立即检查var_dump()
的输出$node = node_load($input);
,使其成为公平的测试。
同样,如果您的第3个解决方案输出空白字符串,则意味着$node->body['eng']['0']['summary']
绝对必须为空。
我强烈建议安装devel模块并使用dpm()
函数打印格式良好的对象/数组的分层视图以供检查。 如果你不能这样做,Drupal 7有一个debug()
函数可以做类似的事情。 这两个函数的输出都打印到标准的Drupal消息空间。
希望有所帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.