TYPO3 v7.6.13:如何在自定义后端模块调用Hidden及起止时间字段?
嘿,我来帮你搞定这个问题!既然你已经通过Extension Builder给实体加上了Hidden和start/endtime字段,那在自定义后端模块里调用它们其实很直接,分这几步来:
首先要在后端模块的编辑模板(通常是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>
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模板和控制器能正确读写字段的前提。
不用额外修改控制器的代码!因为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'); }
如果你的模块有列表页面,要展示这些字段的状态,也可以直接在列表模板里调用:
<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字段用系统内置图标直观显示状态。
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

