2016-03-07 2 views
0

Я пишу расширение, настроенное через FlexForms. Один элемент FlexForm имеет тип «select», с maxitems> 1. Я использую itemsProcFunc для вызова метода внешнего класса, изменяющего массив «items».itemsProcFunc и выбранные элементы в TYPO3 6.2

Это прекрасно работает до сих пор, но когда я пытаюсь сохранить параметры плагина в BE, записи в разделе «Selected:» исчезают. Однако выбранные значения сохраняются правильно. См. Ниже мою конфигурацию 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, а другие имеют пустые значения. Может кто-то помочь мне с этим ?

ответ

2

Я думаю, что вы должны вернуть config вместо params.

Один мой рабочий пример, может быть ваш помогает:
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; 
} 
+0

Я пытаюсь получить результаты от предыдущего 2 flexform fields, и на основании этого я только готовлю условия. Я тоже попытался убрать $ conf. Но это не помогло мне. В любом случае мне удалось исправить это другой альтернативной идеей. Спасибо за ваше время в любом случае за проверку этого! – Siva

 Смежные вопросы

  • Нет связанных вопросов^_^