【发布时间】:2016-03-07 16:07:44
【问题描述】:
我正在编写一个通过 FlexForms 配置的扩展。 FlexForm 的一个元素是“select”类型,maxitems > 1。我使用 itemsProcFunc 调用外部类方法来修改“items”数组。
到目前为止,这工作正常,但是当我尝试在 BE 中保存插件选项时,“已选择:”下的条目消失了。但是,所选值会正确存储。有关我的 flexform 配置,请参见下文。
<settings.flexuserList>
<TCEforms>
<label>Sektionen</label>
<config>
<type>select</type>
<itemsProcFunc>tx_hevpersons_sections->dogetSectionInfo1</itemsProcFunc>
<maxitems>10000</maxitems>
<size>10</size>
</config>
</TCEforms>
</settings.flexuserList>
public function dogetSectionInfo1($params, $conf)
{
print_r($params['row']['pi_flexform']);
$flexform = \TYPO3\CMS\Core\Utility\GeneralUtility::xml2array($params['row']['pi_flexform']);
$grp = $flexform['data']['sDEF']['lDEF']['settings.flexroleList']['vDEF'];
$flexcantonval = $flexform['data']['sDEF']['lDEF']['settings.flexcanton']['vDEF'];
$flexsectionList = $flexform['data']['sDEF']['lDEF']['settings.flexsectionList']['vDEF'];
$flexuserList = $flexform['data']['sDEF']['lDEF']['settings.flexuserList']['vDEF'];
f( strstr( $grp , "|" ) ){
$string = explode(",",$grp);
foreach ($string as $key => $value) {
$array = explode('|',$value);
$nearay[$key] = $array[0];
}
}
if( count($nearay) ){
foreach ($nearay as $key => $value) {
$usergroupFind[$key] = 'FIND_IN_SET("'.$value.'",usergroup)';
}
$string = ' AND '.implode(' OR ', $usergroupFind) . ' ';
}
if( !empty($string) ){
$GLOBALS['TYPO3_DB']->store_lastBuiltQuery = 1;
$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery("uid, name ", 'fe_users', 'deleted=0 AND disable=0 '.$string );
while($entry = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res))
{
$params['items'][count($params['items'])] = array(trim($entry['name'] ), $entry['uid']);
}
$GLOBALS['TYPO3_DB']->sql_free_result($res);
}
return $params;
}
当打印 flexfrom 时,我得到了 2 条 xml 记录,其中一条以逗号分隔的值存储在 xml 中,而另一条则为空值。有人可以帮我解决这个问题吗?
【问题讨论】:
标签: typo3 typo3-6.2.x