【问题标题】:itemsProcFunc and selected items in TYPO3 6.2TYPO3 6.2 中的 itemsProcFunc 和选定项目
【发布时间】: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


    【解决方案1】:

    我认为你应该返回配置而不是参数。

    我的一个工作示例,可能对您有所帮助:
    TYPO3 v7.6.2

    -FlexForm 设置

    <settings.eventID>
        <TCEforms>
            <label>Available Event</label>
            <config>
                <type>select</type>
                <size>1</size>
                <minitems>0</minitems>
                <maxitems>1</maxitems>
                <itemsProcFunc>VENDOR\EXT\Controller\ControllerName->flexFormsEventsListItems</itemsProcFunc>
                <items type="array"></items>
            </config>
        </TCEforms>
    </settings.eventID>
    

    -动作

    public function flexFormsEventsListItems($config){
        $formsRepository = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows('fields', 
                                    'table_name', 
                                    'WHERE clause', '', '', '', '');
    
        $formsData = array(
            'Events' => $formsRepository,
        );
    
        // create option list
        $optionList = array();
        foreach($formsRepository as $key=>$item){ 
            $label = $item['title'];
            $value = $item['uid'];
    
            $optionList[] = array(0 => $label, 1 => $value);
        }
    
        // return config
        $config['items'] = array_merge($config['items'], $optionList);
        return $config;
    }
    

    【讨论】:

    • 我正在尝试从前 2 个 flexform 字段中获取结果,并且仅基于此我正在准备 where 条件。我也尝试过返回 $conf 。但对我来说效果不佳。无论如何,我设法通过另一个替代想法来解决这个问题。无论如何,感谢您抽出宝贵的时间来检查!
    猜你喜欢
    • 1970-01-01
    • 2021-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多