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

Bolt CMS后台能否为内容类型添加自定义过滤器/验证器?

当然可以!在Bolt CMS里,你完全可以通过事件监听的方式,给内容保存流程添加自定义的过滤器/验证逻辑,刚好能实现你要的邮箱识别、编码需求。下面我给你一步步拆解实现方法,另外也补充几个Bolt生态里常用的防垃圾邮件抓取方案,供你参考:

一、实现自定义保存过滤器(针对邮箱编码需求)

Bolt的内容生命周期有一系列可监听的事件,其中content.preSave就是内容保存到数据库前的钩子,我们可以通过这个事件介入处理字段内容。

步骤1:创建自定义扩展的事件监听器

首先,你需要在Bolt的本地扩展目录(extensions/local/)里创建一个扩展(或者在现有自定义扩展里修改),在扩展的主文件(比如YourCustomExtension.php)里注册事件监听:

use Bolt\Event\ContentEvent;
use Bolt\Extension\BaseExtension;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

class YourCustomExtension extends BaseExtension implements EventSubscriberInterface
{
    public function getName(): string
    {
        return 'your-custom-extension';
    }

    public static function getSubscribedEvents()
    {
        return [
            // 监听内容保存前的事件
            'content.preSave' => 'processEmailBeforeSave',
        ];
    }

    public function processEmailBeforeSave(ContentEvent $event)
    {
        $content = $event->getContent();
        
        // 只处理你指定的内容类型和字段,比如"page"类型的"body"字段
        $contentTypeSlug = $content->getContentType()->getSlug();
        if ($contentTypeSlug !== 'page') {
            return;
        }

        $fieldValue = $content->get('body');
        if (empty($fieldValue)) {
            return;
        }

        // 调用处理函数,替换邮箱为编码后的脚本
        $processedContent = $this->encodeEmails($fieldValue);
        $content->set('body', $processedContent);
    }
}

步骤2:实现邮箱识别与编码的核心逻辑

在同一个扩展类里,添加encodeEmails方法,完成正则匹配邮箱、base64编码、替换成目标脚本的逻辑:

private function encodeEmails(string $text): string
{
    // 用正则匹配文本中的邮箱地址(这个正则是基础版,可根据需求调整)
    $emailRegex = '/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/';

    // 遍历匹配到的邮箱,逐个替换
    return preg_replace_callback($emailRegex, function ($matches) {
        $originalEmail = $matches[0];
        $base64Encoded = base64_encode($originalEmail);
        // 替换成你需要的脚本格式
        return '<script> document.write(window.atob("' . $base64Encoded . '")); </script>';
    }, $text);
}

步骤3:启用扩展

把这个扩展放到extensions/local/目录后,登录Bolt后台,进入「扩展」页面找到你的自定义扩展并启用。之后每次保存对应内容类型的项时,字段里的邮箱就会自动被处理后存入数据库。

二、Bolt CMS其他防邮件抓取的替代方案

如果你的核心需求只是防止垃圾邮件机器人抓取邮箱,不一定非要修改数据库内容,Bolt还有几个更省心的方案:

  • 使用Twig内置的混淆过滤器:Bolt的模板引擎Twig自带|obfuscate过滤器,能在前端渲染时自动混淆邮箱,不需要修改后台保存的内容。比如在模板里这么写:

    {{ page.body|obfuscate }}
    

    它会把邮箱转换成HTML实体或其他混淆形式,爬虫难以识别,但用户正常浏览时完全不受影响。

  • JS拼接邮箱链接:在模板里生成邮箱联系链接时,用JS动态拼接邮箱地址,避开静态文本抓取:

    <a href="#" onclick="window.location.href = 'mailto:' + 'test' + '@' + 'test.com'">联系我们</a>
    
  • 用表单替代直接显示邮箱:Bolt有内置的表单功能,你可以创建一个联系表单,让用户通过表单发送消息,完全不暴露邮箱地址,这是最彻底的防爬方式。

内容的提问来源于stack exchange,提问作者T.O.M.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:55:31