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

Vla*_*ita 4 php drupal teaser drupal-7

我有一个Ajax处理程序脚本,我在其中加载$nodeId并在默认(完整)视图中输出结果:

$node = node_load($input);
$prerendered_node = node_view( $node, 'default' );
...
Run Code Online (Sandbox Code Playgroud)

现在我需要显示预告片(摘要或修剪).

到目前为止我试过这个,没有成功(摘要内容填写):

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)
Run Code Online (Sandbox Code Playgroud)

这个问题的解决方案但不起作用:

3. $output = truncate_utf8(strip_tags($node->body['eng']['0']['summary']),200,true,true);
echo $output; (blank)
Run Code Online (Sandbox Code Playgroud)

好奇的是var_dump($node->body['eng']['0'])显示和包含value(正文)summary,clean_summary和其他元素的数组,并且summary具有填充的必要值.但是在示例2中我无法直接访问它,它显示为空白.

提示,好吗?

谢谢.

jon*_*hot 10

没有直接访问值的正确方法(所以你自动获得我认为的国际化版本)如下所示:

$node = node_load($nid);
$body = field_get_items('node', $node, 'body');
$teaser = field_view_value('node', $node, 'body', $body[0],'teaser');
Run Code Online (Sandbox Code Playgroud)

要输出$ teaser值,需要将其传递给render()函数

print render($teaser);
Run Code Online (Sandbox Code Playgroud)

JC


Cli*_*ive 5

我想这是一个多语言网站,否则你可能会找到你想要的东西$node->body['und'][0](即und未定义的语言代码)?

你的第一个解决方案应该工作,只有你用过Teaser而不是teaser,我很确定视图模式是区分大小写的.你也有$node->body['en'][0](语言代码en),而你eng在所有其他例子中都使用了语言代码......这可能是问题吗?

如果$node->body['eng']['0']['summary']不是空的话,你的第二个解决方案就必须工作,所以我再次检查你var_dump()是否产生了准确的结果(例如,你var_dump()在调用之后立即检查输出是否$node = node_load($input);公平测试).

同样,如果您的第3个解决方案输出空白字符串,则表示$node->body['eng']['0']['summary']绝对必须为空.

我强烈建议安装devel模块并使用该dpm()函数打印格式良好的对象/数组的分层视图以供检查.如果你不能这样做,Drupal 7有一个debug()类似的功能.这两个函数的输出都打印到标准的Drupal消息空间.

希望有所帮助!