Drupal 7使用field_view_value()获取预告片


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)、summaryclean_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消息空间。

希望有帮助!