【问题标题】:Drupal Fields added using form_alter to be shown in node preview使用 form_alter 添加的 Drupal 字段将显示在节点预览中
【发布时间】:2012-05-10 15:27:09
【问题描述】:

我已在 drupal 中使用表单更改将表单字段添加到内容类型。有没有办法在节点预览中查看这些字段?我只能在节点预览中看到使用 cck 添加的字段。

【问题讨论】:

  • 主要版本之间的 API 变化很大。你用的是哪一个?

标签: drupal preview


【解决方案1】:

直到 Drupal 6,实现 hook_nodeapi,传递 'view' 作为 $op 的参数。在 Drupal 7 中,实现 hook_node_view

【讨论】:

  • 那行得通.. 谢谢.. 我可以知道如何将这些值分配给预览中的字段。
【解决方案2】:

查看节点时调用的钩子是 Oswald 报告的。

知道何时预览节点的唯一函数是node_preview(),或theme_node_preview(),由node_preview() 使用以下代码调用:

// Drupal 6.
if (!form_get_errors()) {
  $cloned_node = drupal_clone($node);
  $cloned_node->build_mode = NODE_BUILD_PREVIEW;
  $output = theme('node_preview', $cloned_node);
}

// Drupal 7.
if (!form_get_errors()) {
  $node->in_preview = TRUE;
  $output = theme('node_preview', array('node' => $node));
  unset($node->in_preview);
}

theme_node_preview(),然后使用以下代码调用node_view()

// Drupal 6.
$output .= '<h3>' . t('Preview trimmed version') . '</h3>';
$output .= node_view(drupal_clone($node), 1, FALSE, 0);
$output .= '<h3>' . t('Preview full version') . '</h3>';
$output .= node_view($node, 0, FALSE, 0);

// Drupal 7.
$elements = node_view(clone $node, 'teaser');
$trimmed = drupal_render($elements);
$elements = node_view($node, 'full');
$full = drupal_render($elements);

node_view() 调用hook_nodeapi()(或hook_node_view())时,这些钩子实现能够知道是否正在预览节点以检查$node-&gt;build_mode(或$node-&gt;in_preview)。在 Drupal 6 中,模块应该检查 $node-&gt;build_mode 是否等于 NODE_BUILD_PREVIEW

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-13
    • 1970-01-01
    相关资源
    最近更新 更多