Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
TYPO3中的userFunc显示呈现列表,但不存储在数据库中_Typo3_Backend - Fatal编程技术网

TYPO3中的userFunc显示呈现列表,但不存储在数据库中

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(

我的一条记录的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(
                '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;
}