使用form_alter添加Drupal Fields以在节点预览中显示

时间:2011-05-27 09:13:06

标签: drupal preview

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

知道预览节点的唯一函数是node_preview(),或node_preview()使用以下代码调用的theme_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->build_mode(或$node->in_preview })。在Drupal 6中,模块应检查$node->build_mode是否等于NODE_BUILD_PREVIEW