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
相关产品推荐
相关产品推荐

