我有一个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
等元素的数组,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->body['eng']['0']['summary']
绝对必须是空的。
我强烈建议安装devel模块并使用dpm()
函数来打印一个格式良好的对象/数组分层视图以供检查。如果您不能做到这一点,Drupal 7有一个debug()
函数可以做类似的事情。这两个函数的输出将打印到标准Drupal消息空间。
希望有帮助!