【问题标题】:Print node teaser from nid从 nid 打印节点预告片
【发布时间】:2012-02-20 08:51:32
【问题描述】:

如何打印来自特定 nid 的预告片?快把我逼疯了。

我试过这个:

$teaser = TRUE;
$page = FALSE;
$nid = 20;
print node_view(node_load(array('nid' => $nid)), $teaser, $page, FALSE); 

但唯一的输出是“数组”。

我也试过这个:

$node = node_load(20);
$teaser_content = $node->body['und']['0']['summary'];
print $teaser_content;

但这只是给我节点的摘要,而不是<!--break-->指定的预告片。

【问题讨论】:

    标签: drupal drupal-7


    【解决方案1】:

    在 Drupal 7 中,node_view() 函数没有 $teaser 参数,而是有一个带有字符串的$view_mode 参数(通常是teaserfull,默认为full)。不过,您当前使用的代码对于 Drupal 6 来说是完美的。

    此代码适用于 Drupal 7:

    $view_mode = 'teaser';
    $nid = 20;
    
    $node = node_load($nid);
    
    print render(node_view($node, $view_mode)); 
    

    【讨论】:

    • 谢谢你,你拯救了我的一天 :)!
    • 只有一件事:有没有办法“干净”地打印它,这样你就没有 node.tpl.php 的所有包装器 div 等?我想在预告片的最后一个单词之后添加一个省略号,但现在它打印在一个新段落中。
    • 这有点复杂,但基本上你可以将自定义的$view_mode 传递给node_view(),然后检查node.tpl.php 文件中的$view_mode,如果视图模式为您的自定义,例如if ($view_mode != 'custom_view') {.
    • 谢谢,我现在几乎可以正常工作了。我现在有一个自定义视图模式,可以在 if 语句中使用。我只需要知道如何在 else 语句中获取 node.tpl.php 的默认内容(或者可能是另一种结构,我不知道 PHP)。像这样的东西:if ($view_mode == 'clean_teaser') { print render($content); } else { // node.tpl.php default content }
    【解决方案2】:

    使用render() 函数。

    $teaser = TRUE;
    $page = FALSE;
    $nid = 20;
    print render(node_view(node_load(array('nid' => $nid)), $teaser, $page, FALSE)); 
    

    请小心在node_load() 上直接使用node_view(),因为如果node_load() 无法成功加载节点,它会出现白屏。

    【讨论】:

    • 您是否启用了预告片的显示?
    • 但 Drupal 似乎忽略了我的自定义预告片断点。当我使用示例面板来显示我的预告片时,它使用 600 个字符的默认值来呈现内容,而不是我指定的断点(我使用完整的 HTML 作为输入格式)。
    • 我上一条评论中提到的那个问题现在已经解决了(参见this 主题),但是您的脚本仍然无法正常工作。
    • 对于启用的预告片显示中的字段,您是否至少将一种字段格式设置为 以外的任何字段。
    【解决方案3】:

    在 Drupal 6 中只是

    $node = node_load(20);
    print node_view($node, 'teaser'); 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-23
      • 2013-09-25
      • 2023-02-25
      • 2013-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多