【发布时间】:2012-05-10 15:27:09
【问题描述】:
我已在 drupal 中使用表单更改将表单字段添加到内容类型。有没有办法在节点预览中查看这些字段?我只能在节点预览中看到使用 cck 添加的字段。
【问题讨论】:
-
主要版本之间的 API 变化很大。你用的是哪一个?
我已在 drupal 中使用表单更改将表单字段添加到内容类型。有没有办法在节点预览中查看这些字段?我只能在节点预览中看到使用 cck 添加的字段。
【问题讨论】:
直到 Drupal 6,实现 hook_nodeapi,传递 'view' 作为 $op 的参数。在 Drupal 7 中,实现 hook_node_view。
【讨论】:
查看节点时调用的钩子是 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->build_mode(或$node->in_preview)。在 Drupal 6 中,模块应该检查 $node->build_mode 是否等于 NODE_BUILD_PREVIEW。
【讨论】: