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

TYPO3 v12:如何在无页面内容的Fluid模板中用TypoScript集成EXT:form表单

TYPO3 v12 Fluid 订阅表单集成示例

1. 基础准备

先确保你有一个自定义扩展(比如命名为subscription),如果没有,用TYPO3扩展生成器快速创建一个基础扩展,只保留Controller和Fluid模板相关结构即可。

2. 创建订阅控制器

在扩展的Classes/Controller/SubscriptionController.php中添加以下代码:

<?php

namespace Vendor\Subscription\Controller;

use TYPO3\CMS\Extbase\Mvc\Controller\ActionController;
use TYPO3\CMS\Extbase\Mvc\View\ViewInterface;
use TYPO3\CMS\Fluid\View\TemplateView;

class SubscriptionController extends ActionController
{
    public function initializeView(ViewInterface $view): void
    {
        parent::initializeView($view);
        if ($view instanceof TemplateView) {
            $view->setTemplateRootPaths(['EXT:subscription/Resources/Private/Templates/']);
        }
    }

    public function formAction(): void
    {
        // 表单初始化逻辑,可预设空对象或默认值
    }

    public function submitAction(string $email): void
    {
        // 邮箱格式验证
        if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
            $this->addFlashMessage('邮箱格式无效', '错误', \TYPO3\CMS\Core\Messaging\AbstractMessage::ERROR);
            $this->redirect('form');
        }

        // 这里可添加订阅逻辑:存入数据库、调用第三方API等
        $this->addFlashMessage('订阅成功!', '成功', \TYPO3\CMS\Core\Messaging\AbstractMessage::OK);
        $this->redirect('form');
    }
}

3. 创建Fluid表单模板

在扩展的Resources/Private/Templates/Subscription/Form.html中添加表单代码:

<f:layout name="Default" />
<f:section name="Main">
    <f:flashMessages />

    <f:form action="submit" name="subscription" method="post">
        <div class="form-group">
            <label for="email">邮箱地址</label>
            <f:form.textfield id="email" name="email" required="true" placeholder="请输入你的邮箱" />
        </div>
        <f:form.submit value="订阅" class="btn btn-primary" />
    </f:form>
</f:section>

4. 配置TypoScript

在扩展的Configuration/TypoScript/setup.typoscript中添加:

plugin.tx_subscription {
    view {
        templateRootPaths {
            0 = EXT:subscription/Resources/Private/Templates/
        }
        partialRootPaths {
            0 = EXT:subscription/Resources/Private/Partials/
        }
        layoutRootPaths {
            0 = EXT:subscription/Resources/Private/Layouts/
        }
    }
    persistence {
        storagePid = 1 # 替换为你的存储页面ID(若需存入数据库)
    }
}

# 将表单插件注册为可调用的内容对象
tt_content.list.20_subscription_subscription =< plugin.tx_subscription

在Configuration/TypoScript/constants.typoscript中:

plugin.tx_subscription {
    view {
        templateRootPaths {
            0 = EXT:subscription/Resources/Private/Templates/
        }
        partialRootPaths {
            0 = EXT:subscription/Resources/Private/Partials/
        }
        layoutRootPaths {
            0 = EXT:subscription/Resources/Private/Layouts/
        }
    }
    persistence {
        storagePid = 1
    }
}

5. 在现有Fluid模板中集成表单

在你的目标Fluid模板中插入以下代码,直接调用表单插件:

<!-- 插入到现有模板的对应位置 -->
<f:cObject typoscriptObjectPath="tt_content.list.20_subscription_subscription" />

6. 调试验证步骤

  • 清除TYPO3所有缓存(包括配置缓存)
  • 查看系统日志(后台 > 系统 > 日志)定位具体错误
  • 确认扩展已激活,Controller和模板路径配置无误
  • 测试邮箱输入的前后端验证逻辑是否生效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 08:47:42