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

TYPO3 v7.6.13:如何在自定义后端模块调用Hidden及起止时间字段?

嘿,我来帮你搞定这个问题!既然你已经通过Extension Builder给实体加上了Hidden和start/endtime字段,那在自定义后端模块里调用它们其实很直接,分这几步来:

1. 在模块表单模板中渲染字段

首先要在后端模块的编辑模板(通常是Resources/Private/Templates/MyObject/Edit.html这类路径)里添加这些字段的渲染代码。用TYPO3的Fluid ViewHelper就能轻松实现,还能和系统后端风格保持一致:

比如添加Hidden字段:

<div class="form-group">
    <f:form.checkbox property="hidden" id="hidden" />
    <label for="hidden">{f:translate(key='LLL:EXT:lang/Resources/Private/Language/locallang_general.xlf:LGL.hidden')}</label>
</div>

starttime和endtime可以用日期时间控件来渲染,直接调用系统的语言标签:

<div class="form-group">
    <label>{f:translate(key='LLL:EXT:lang/Resources/Private/Language/locallang_general.xlf:LGL.starttime')}</label>
    <f:form.datetime property="starttime" mode="date" class="form-control" />
    <f:form.datetime property="starttime" mode="time" class="form-control" />
</div>

<div class="form-group">
    <label>{f:translate(key='LLL:EXT:lang/Resources/Private/Language/locallang_general.xlf:LGL.endtime')}</label>
    <f:form.datetime property="endtime" mode="date" class="form-control" />
    <f:form.datetime property="endtime" mode="time" class="form-control" />
</div>
2. 确认实体类的属性与方法正确

Extension Builder应该已经帮你生成了这些字段的实体代码,但最好检查一下Classes/Domain/Model/MyObject.php里是否有这些定义:

/**
 * hidden
 *
 * @var boolean
 */
protected $hidden = false;

/**
 * starttime
 *
 * @var integer
 */
protected $starttime = 0;

/**
 * endtime
 *
 * @var integer
 */
protected $endtime = 0;

同时要确保对应的getter/setter方法存在,比如getHidden()、setHidden()、getStarttime()、setEndtime(),这些是Fluid模板和控制器能正确读写字段的前提。

3. 控制器自动处理表单提交

不用额外修改控制器的代码!因为Extension Builder生成的控制器已经集成了PropertyMapper,只要表单的property属性和实体的属性名对应(比如property="hidden"),TYPO3会自动把表单值映射到实体对象里。

比如你的updateAction本来是这样的,完全不用改:

/**
 * action update
 *
 * @param \Vendor\MyExtension\Domain\Model\MyObject $myObject
 * @return void
 */
public function updateAction(\Vendor\MyExtension\Domain\Model\MyObject $myObject)
{
    $this->myObjectRepository->update($myObject);
    $this->addFlashMessage('记录已更新', '', \TYPO3\CMS\Core\Messaging\AbstractMessage::OK);
    $this->redirect('list');
}
4. 在列表视图显示字段状态

如果你的模块有列表页面,要展示这些字段的状态,也可以直接在列表模板里调用:

<f:for each="{myObjects}" as="myObject">
    <tr>
        <!-- 显示Hidden状态 -->
        <td>
            <f:if condition="{myObject.hidden}">
                <span class="icon icon-size-small icon-state-hidden"></span>
            </f:if>
        </td>
        <!-- 格式化显示时间 -->
        <td>{myObject.starttime -> f:format.date(format='Y-m-d H:i')}</td>
        <td>{myObject.endtime -> f:format.date(format='Y-m-d H:i')}</td>
        <!-- 其他字段 -->
    </tr>
</f:for>

用f:format.date把时间戳转换成可读的日期格式,Hidden字段用系统内置图标直观显示状态。

5. 可选:检查TCA配置(确保权限与字段行为正确)

Extension Builder已经帮你配置好了TCA,但如果需要和TYPO3权限系统深度集成,可以检查Configuration/TCA/MyObject.php里的字段配置:

'hidden' => [
    'exclude' => true,
    'label' => 'LLL:EXT:lang/Resources/Private/Language/locallang_general.xlf:LGL.hidden',
    'config' => [
        'type' => 'check',
        'items' => [
            '1' => [
                '0' => 'LLL:EXT:lang/Resources/Private/Language/locallang_core.xlf:labels.enabled'
            ]
        ],
    ],
],
'starttime' => [
    'exclude' => true,
    'label' => 'LLL:EXT:lang/Resources/Private/Language/locallang_general.xlf:LGL.starttime',
    'config' => [
        'type' => 'input',
        'size' => 13,
        'eval' => 'datetime',
        'default' => 0,
    ],
],
'endtime' => [
    'exclude' => true,
    'label' => 'LLL:EXT:lang/Resources/Private/Language/locallang_general.xlf:LGL.endtime',
    'config' => [
        'type' => 'input',
        'size' => 13,
        'eval' => 'datetime',
        'default' => 0,
        'range' => [
            'upper' => mktime(0, 0, 0, 1, 1, 2038)
        ],
    ],
],

这些配置确保字段在后端(包括你的自定义模块)里的行为和系统默认字段一致,比如时间戳转换、权限控制等。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:40:25