TYPO3中的userFunc显示呈现列表,但不存储在数据库中
我的一条记录的TCA字段如下所示:TYPO3中的userFunc显示呈现列表,但不存储在数据库中,typo3,backend,Typo3,Backend,我的一条记录的TCA字段如下所示: 'page_id' => array( 'exclude' => 0, 'label' => 'LLL:EXT:calendar/Resources/Private/Language/locallang_db.xlf:tx_calendar_domain_model_display.page_id', 'config' => array(
'page_id' => array(
'exclude' => 0,
'label' => 'LLL:EXT:calendar/Resources/Private/Language/locallang_db.xlf:tx_calendar_domain_model_display.page_id',
'config' => array(
'type' => 'user',
'userFunc' => 'EXT:calendar/class.tx_calendars_tca.php:tx_calendars_tca->someWizard',
),
函数someWizard
如下所示:
function someWizard($PA, $fObj) {
$content='<select>' .
'<option value="One" > item 1 </option>' .
'<option value="Two" > item 2 </option>' .
'<option value="Three" > item 55 </option>' .
'</select>';
return $content;
}
functionsomewizard($PA,$fObj){
$content=''。
“项目1”。
“项目2”。
“项目55”。
'';
返回$content;
}
选择列表可以很好地呈现在后端表单中,但保存时不会存储任何内容。可能是列表正在显示,但未设置值
编辑:
我正在尝试将所有页面标题放入一个下拉列表,其中包含一些条件和处理。我想做的伪代码是这样的(我仍然需要对列表进行大量处理)
functionsomewizard($PA,$fObj){
$GLOBALS['TYPO3_DB']->debugOutput=TRUE;
$formField='';
$PA['fieldConf']['config']['type']='select';
试一试{
$where='is_siteroot=1';
$res=$GLOBALS['TYPO3\u DB']->exec\u SELECTquery('*','pages',$where);
while($row=$GLOBALS['TYPO3\u DB']->sql\u fetch\u assoc($res)){
$formField.=''.$row['title'].';
}
}
捕获(例外$e){
echo$e;
}
$formField.='';
返回$formField;
}
如果在我的TCA中,我给出
“type”=>“select”
它不会呈现任何内容 您正在使用的代码当然只会显示选择器。即使这个构造能够保存数据,您也必须至少提供一些关于在何处存储数据的基本信息。因此,至少“select”的“name”属性是很酷的
您应该将字段类型改为“选择”而不是“用户”,并使用itemsProcFunc来操作可用项的数组
请在此处查找更多信息:元素没有名称,因此无法存储。如果您只想修改列表中的项目,请选择Joey的答案。如果您希望根据某些条件(例如,从多个项目的选择框到少个项目的复选框)稍微更改字段的配置,最好使用TYPO3的方法创建元素:
function someWizard($PA, $fObj) {
$PA['fieldConf']['config']['type'] = 'select';
$content = $fobj->getSingleField_typeInput('TABLE_NAME', $PA['field'], false, $PA);
return $content;
}
- 将表\u NAME替换为表名
- 在TCA设置中保留所有其他默认配置
- 调试
以查看内部内容以及动态更改的内容$PA
标记的名称
属性还是与$PA
数组相关的内容?感谢您的回答,请检查编辑:)选择标记需要一个名称,否则datamap处理器将不知道如何处理这些内容。当然,它应该与TCE表单字段的“官方”命名方案相匹配,这就是我推荐select类型的原因。在这种情况下,您甚至不需要itemsProcFunc-有关select及其参数的详细说明,请参阅。要根据其他where子句从“pages”中获取项目,您应该使用“foreign_table”和“foreign_table_where”中定义的内容,而不是创建userFunc。好吧,这当然是我想要做的。我编辑了我的问题。请查收。谢谢:)在我看来,你只是在操纵物品,在这种情况下,你应该听从乔伊的建议。如果你真的需要在飞行中改变TCA,那就选择我的。它的工作方式是,在默认TCA中,您使用'type'=>'user'
加上userFunc
以及可能要呈现的元素的一些其他配置(例如选择类型的maxitems
)。然后,您的方法将类型
更改为实际需要的类型,并使用getSingleField\u typeInput()
正确渲染元素。执行print\r($PA)
以查看内部内容以及您可以以任何方式修改的内容。
function someWizard($PA, $fObj) {
$PA['fieldConf']['config']['type'] = 'select';
$content = $fobj->getSingleField_typeInput('TABLE_NAME', $PA['field'], false, $PA);
return $content;
}