You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Drupal特定内容类型添加预览按钮?

给无预览按钮的内容类型添加预览功能的解决方案

我之前也碰到过一模一样的需求——有些内容类型只有保存选项,连个预览按钮都没有,每次想看看编辑后的效果都得先保存,不仅拖慢了整个编辑流程,还会生成一堆没必要的版本记录,尤其是在用版本修订功能的时候,真的太闹心了。下面分享一个我亲测有效的自定义模块方案,另外也聊聊给所有节点/内容类型批量添加的思路。

自定义模块实现步骤(针对指定内容类型)

  • 第一步:搭建基础模块结构
    先创建一个自定义模块,比如命名为content_preview_button,需要两个核心文件:

    • content_preview_button.info.yml(模块声明文件)
    • content_preview_button.module(核心逻辑文件)
  • 第二步:通过钩子添加预览按钮
    在content_preview_button.module文件里,利用hook_form_alter()钩子修改目标内容类型的编辑表单,插入预览按钮:

    function content_preview_button_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {
      // 替换成你需要添加预览的内容类型表单ID,比如'node_article_form'
      $target_form_ids = ['node_[your_content_type]_form'];
      if (in_array($form_id, $target_form_ids)) {
        // 复用保存按钮的基础配置,改成预览按钮
        $form['actions']['preview'] = $form['actions']['submit'];
        $form['actions']['preview']['#value'] = t('Preview');
        $form['actions']['preview']['#submit'] = ['node_form_preview_submit'];
        // 调整按钮顺序,把预览放在保存按钮前面
        $form['actions']['preview']['#weight'] = -10;
      }
    }
    

    记得把代码里的[your_content_type]替换成实际的内容类型机器名(比如article、page)。

  • 第三步:启用模块并验证效果
    把模块放到站点的modules/custom目录下,在后台模块管理页面启用它,然后打开目标内容类型的编辑页面,就能看到新增的预览按钮了。点击按钮会触发Drupal原生的节点预览逻辑,完全不会生成额外的版本记录,刚好解决需求里的痛点。

给所有内容类型批量添加预览按钮的思路

如果想一次性给所有节点类型都加上预览按钮,只需要修改上面的钩子逻辑,不用指定具体的表单ID,而是通过表单ID特征判断是否为节点编辑表单:

function content_preview_button_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {
  // 判断当前表单是否是节点编辑表单
  if (strpos($form_id, 'node_') !== FALSE && strpos($form_id, '_form') !== FALSE) {
    // 同样添加预览按钮的逻辑
    $form['actions']['preview'] = $form['actions']['submit'];
    $form['actions']['preview']['#value'] = t('Preview');
    $form['actions']['preview']['#submit'] = ['node_form_preview_submit'];
    $form['actions']['preview']['#weight'] = -10;
  }
}

这样所有节点类型的编辑页面都会自动出现预览按钮,不用逐个配置,适合全局需求的场景。

这个方案的优势在于完全复用了Drupal原生的预览功能,不需要自己额外编写预览渲染的代码,既稳定又省心,而且预览操作不会触发版本保存,完美解决了“为预览创建不必要版本”的问题。

内容的提问来源于stack exchange,提问作者Markus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:58:29