Russian TYPO3 community

Russian TYPO3 community (http://forum.typo3.ru/index.php)
-   Общие вопросы (http://forum.typo3.ru/forumdisplay.php?f=12)
-   -   FlexForm и тип "select" (http://forum.typo3.ru/showthread.php?t=7853)

Fearless Goblin 14.07.2009 05:44

FlexForm и тип "select"
 
День добрый.

Я разрабатываю расширение (FE Plugin), в котором использую ФлексФормы и хочу получить элемент множественного выбора (на подобие того, который используется в tt_news для выбора типа новостей: LIST, LATEST, SINGLE и т.д.), причём элементы списка берутся из БД.

Для этого использую такую структуру:
Код:

<T3DataStructure>
  <meta>
    <langDisable>1</langDisable>
    <langChildren>0</langChildren>
  </meta>
  <ROOT>
    <type>array</type>
    <el>
      <clubServices>
        <TCEforms>       
<label>LLL:EXT:club_services/locallang_db.xml:pi1_flexform.services</label>
          <config>
            <type>select</type>
            <foreign_table>tx_clubservices_service</foreign_table>
            <foreign_table_where>AND
tx_clubservices_service.pid=###STORAGE_PID### ORDER BY
tx_clubservices_service.uid</foreign_table_where>
            <size>10</size>
            <minItems>0</minItems>
            <maxItems>100</maxItems>
          </config>
        </TCEforms>
      </clubServices>
    </el>
  </ROOT>
</T3DataStructure>

Выборка элементов происходит успешно, список создаётся, но отсутствует список выбранных элементов (тот, который должен быть слева от списка всех элементов)...

Что я делаю не так?

Буду благодарен ответившим.

shuman 14.07.2009 12:48

TCA опубликуйте

Fearless Goblin 14.07.2009 16:49

TCA генерировался kickstarter-ом:

tca.php:
Код:

<?php
if (!defined ('TYPO3_MODE'))        die ('Access denied.');

$TCA['tx_clubservices_service'] = array (
        'ctrl' => $TCA['tx_clubservices_service']['ctrl'],
        'interface' => array (
                'showRecordFieldList' => 'sys_language_uid,l10n_parent,l10n_diffsource,hidden,title'
        ),
        'feInterface' => $TCA['tx_clubservices_service']['feInterface'],
        'columns' => array (
                'sys_language_uid' => array (               
                        'exclude' => 1,
                        'label'  => 'LLL:EXT:lang/locallang_general.xml:LGL.language',
                        'config' => array (
                                'type'                => 'select',
                                'foreign_table'      => 'sys_language',
                                'foreign_table_where' => 'ORDER BY sys_language.title',
                                'items' => array(
                                        array('LLL:EXT:lang/locallang_general.xml:LGL.allLanguages', -1),
                                        array('LLL:EXT:lang/locallang_general.xml:LGL.default_value', 0)
                                )
                        )
                ),
                'l10n_parent' => array (               
                        'displayCond' => 'FIELD:sys_language_uid:>:0',
                        'exclude'    => 1,
                        'label'      => 'LLL:EXT:lang/locallang_general.xml:LGL.l18n_parent',
                        'config'      => array (
                                'type'  => 'select',
                                'items' => array (
                                        array('', 0),
                                ),
                                'foreign_table'      => 'tx_clubservices_service',
                                'foreign_table_where' => 'AND tx_clubservices_service.pid=###CURRENT_PID### AND tx_clubservices_service.sys_language_uid IN (-1,0)',
                        )
                ),
                'l10n_diffsource' => array (               
                        'config' => array (
                                'type' => 'passthrough'
                        )
                ),
                'hidden' => array (               
                        'exclude' => 1,
                        'label'  => 'LLL:EXT:lang/locallang_general.xml:LGL.hidden',
                        'config'  => array (
                                'type'    => 'check',
                                'default' => '0'
                        )
                ),
                'title' => array (               
                        'exclude' => 0,               
                        'label' => 'LLL:EXT:club_services/locallang_db.xml:tx_clubservices_service.title',               
                        'config' => array (
                                'type' => 'input',       
                                'size' => '30',       
                                'eval' => 'required,trim',
                        )
                ),
        ),
        'types' => array (
                '0' => array('showitem' => 'sys_language_uid;;;;1-1-1, l10n_parent, l10n_diffsource, hidden;;1, title;;;;2-2-2')
        ),
        'palettes' => array (
                '1' => array('showitem' => '')
        )
);
?>


ext_tables.php:
Код:

<?php
if (!defined ('TYPO3_MODE')) {
        die ('Access denied.');
}

t3lib_extMgm::allowTableOnStandardPages('tx_clubservices_service');

$TCA['tx_clubservices_service'] = array (
        'ctrl' => array (
                'title'    => 'LLL:EXT:club_services/locallang_db.xml:tx_clubservices_service',               
                'label'    => 'title',       
                'tstamp'    => 'tstamp',
                'crdate'    => 'crdate',
                'cruser_id' => 'cruser_id',
                'languageField'            => 'sys_language_uid',       
                'transOrigPointerField'    => 'l10n_parent',       
                'transOrigDiffSourceField' => 'l10n_diffsource',       
                'default_sortby' => 'ORDER BY crdate',       
                'delete' => 'deleted',       
                'enablecolumns' => array (               
                        'disabled' => 'hidden',
                ),
                'dynamicConfigFile' => t3lib_extMgm::extPath($_EXTKEY).'tca.php',
                'iconfile'          => t3lib_extMgm::extRelPath($_EXTKEY).'icon_tx_clubservices_service.gif',
        ),
);


t3lib_div::loadTCA('tt_content');
$TCA['tt_content']['types']['list']['subtypes_excludelist'][$_EXTKEY.'_pi1']='layout,select_key,pages';
$TCA['tt_content']['types']['list']['subtypes_addlist'][$_EXTKEY.'_pi1']='pi_flexform';
t3lib_extMgm::addPiFlexFormValue($_EXTKEY . '_pi1', 'FILE:EXT:' . $_EXTKEY . '/pi1/flexform_ds.xml');


t3lib_extMgm::addPlugin(array(
        'LLL:EXT:club_services/locallang_db.xml:tt_content.list_type_pi1',
        $_EXTKEY . '_pi1',
        t3lib_extMgm::extRelPath($_EXTKEY) . 'ext_icon.gif'
),'list_type');


if (TYPO3_MODE == 'BE') {
        $TBE_MODULES_EXT['xMOD_db_new_content_el']['addElClasses']['tx_clubservices_pi1_wizicon'] = t3lib_extMgm::extPath($_EXTKEY).'pi1/class.tx_clubservices_pi1_wizicon.php';
}

t3lib_extMgm::addStaticFile($_EXTKEY,'static/club_services/', 'Club Services');
?>

Собственно, данные для списка берутся из таблицы "tx_clubservices_service".

Возможно я не до конца всё понимаю (впервые разрабатываю расширение...), но, как я понял из документации, TCA нужен только для того, чтобы можно было создавать записи (records) на страницах (то есть, чтобы в 'Web->List' их можно было увидеть, создать, отредактировать, удалить и т.д.), но FlexForms не зависит от TCA, так как данные, записанные в них, хранятся не в отдельных таблицах, а прямо в 'tt_content' в поле 'pi_flexform' (и потому необходимо только создать правильный xml и добавить его, а также поле 'pi_flexform' в 'ext_tables.php').
Возможно, я что-то неправильно понял?..

dmartynenko 14.07.2009 20:06

Да, вы правильно поняли что TCA совершенно не причем.

Но если что-то вам нужно есть в tt_news, то может там и посмотреть как это сделано?

Я например нашел дополнительно к вашему FF для поля clubServices вот такие параметры:
<multiple>1</multiple>
<selectedListStyle>width:150px</selectedListStyle>
<itemListStyle>width:150px</itemListStyle>

Fearless Goblin 15.07.2009 13:21

Эх, а проблема-то была совершенно в другом... Вот тут: <maxItems>100</maxItems>
Нету параметра "maxItems", есть только "maxitems" - с маленьким i.
Потому и подставлялась в него дефолтовая единица, которая предотвращала построение второго списка


Часовой пояс GMT +4, время: 10:06.

Работает на vBulletin® версия 3.8.1.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot