0

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

选择列表可以很好地呈现到后端表单中,但保存时它不会存储任何内容。可能是正在显示列表但未设置值。

编辑:

我正在尝试将所有页面标题放入下拉列表中,并带有一些条件和处理。我想做的伪代码是这样的。(我仍然需要对列表进行大量处理)

function someWizard($PA, $fObj) {


                $GLOBALS['TYPO3_DB']->debugOutput = TRUE;
                $formField='<select>';  
                 $PA['fieldConf']['config']['type'] = 'select';

                try{
                    $where='is_siteroot=1';
                    $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*','pages',$where);
                    while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
                        $formField.='<option value='.$row['uid'].'>'.$row['title'].'</option>';
                    }
                }

                catch(Exception $e){
                    echo $e;
                }


                $formField.='</select>';
                return $formField;

    }

如果在我的 TCA 中,我给'type' => 'select'它不会渲染任何东西。

4

2 回答 2

0

您使用的代码当然只会显示选择器。即使此构造能够保存数据,您也必须至少提供一些关于存储位置的基本信息。所以至少“选择”的“名称”属性会很酷。

您应该将字段类型更改为“选择”而不是用户,并使用 itemsProcFunc 来操作可用项目的数组。

在此处查找更多信息:http: //docs.typo3.org/typo3cms/TCAReference/

于 2013-05-30T13:29:43.430 回答
0

该元素没有名称,因此没有机会被存储。如果您只想修改列表中的项目,请使用Joey 的答案。如果您想根据某些条件更多地更改字段的配置(例如,如果有很多项目,则从选择框到只有很少的复选框),最好是使用 TYPO3 的方法来创建元素:

function someWizard($PA, $fObj) {
  $PA['fieldConf']['config']['type'] = 'select';
  $content = $fobj->getSingleField_typeInput('TABLE_NAME', $PA['field'], false, $PA);
  return $content;
}
  • TABLE_NAME替换为您的表的名称。
  • 在 TCA 设置中保留所有其他默认配置。
  • 调试$PA以查看内部内容以及您应该即时更改的内容。
于 2013-05-30T13:40:58.077 回答