4

我有一个 Ajax 处理程序脚本,我在其中加载 a$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(of body),summaryclean_summary其他元素,并且summary填充了必要的值。但是在示例 2 中,我无法直接访问它,它在显示时显示为空白。

请给点提示好吗?

谢谢你。

4

2 回答 2

10

在不直接访问该值的情况下执行此操作的正确方法(因此您会自动获得我认为的国际化版本)如下所示:

$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

于 2012-03-07T15:09:58.987 回答
5

我猜这是一个多语言站点,否则您可能会在其中找到您要查找的内容$node->body['und'][0](即und未定义的语言代码)?

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

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

同样,如果您的第三个解决方案输出一个空白字符串,则意味着$node->body['eng']['0']['summary']绝对必须为空。

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

希望有帮助!

于 2011-08-31T17:56:50.740 回答