TYPO3 4.5: должен ли TCA отображаться в параметрах плагина?

Я сейчас создаю свое первое расширение в Typo3 (версия 4.5.22). Я использую книгу Дмитрия Дулепова «Разработка расширений TYPO3» в качестве руководства (очень полезная ссылка). Я использовал Kickstarter, чтобы наладить работу, и одной из вещей, которые он сгенерировал, был $ TCA, который идет вместе с моей собственной таблицей в базе данных.

Насколько я понимаю, TCA определяет, какие параметры появляются в бэкэнде для моего подключаемого модуля в разделе «Параметры подключаемого модуля», когда вы создаете новый элемент содержимого «Вставить подключаемый модуль». Проблема в том, что этот раздел остается пустым. Когда я выбираю свой плагин, параметры не отображаются.

Мне удалось создать Flexform и заставить его отображаться в разделе «Параметры плагина», но чрезвычайно важным компонентом моего плагина является возможность использовать форму «предложения» для поиска записей, и из того, что я прочитал, невозможно заставить их работать должным образом с помощью Flexforms.

Мне не хватает простой функции в ext_tables, чтобы мой TCA отображался в разделе «Параметры плагина»? Извините, если я здесь совсем не на базе; абсолютная сложность Typo3 немного ошеломила меня.

Вот мой файл ext_tables.php, созданный Kickstarter:

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

t3lib_extMgm::allowTableOnStandardPages('tx_newsbuilder_newsitems');


t3lib_extMgm::addToInsertRecords('tx_newsbuilder_newsitems');

$TCA['tx_newsbuilder_newsitems'] = array(
    'ctrl' => array(
        'title'     => 'LLL:EXT:newsbuilder/locallang_db.xml:tx_newsbuilder_newsitems',        
        'label'     => 'uid',    
        'tstamp'    => 'tstamp',
        'crdate'    => 'crdate',
        'cruser_id' => 'cruser_id',
        '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_newsbuilder_newsitems.gif',
    ),
);

t3lib_div::loadTCA('tt_content');
$TCA['tt_content']['types']['list']['subtypes_excludelist'][$_EXTKEY.'_pi1'] = 'layout,select_key';


t3lib_extMgm::addPlugin(array(
    'LLL:EXT:newsbuilder/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_newsbuilder_pi1_wizicon'] = t3lib_extMgm::extPath($_EXTKEY) . 'pi1/class.tx_newsbuilder_pi1_wizicon.php';
}

// Flexform
//$TCA['tt_content']['types']['list']['subtypes_addlist'] [$_EXTKEY . '_pi1'] = 'pi_flexform';
//t3lib_extMgm::addPiFlexFormValue($_EXTKEY . '_pi1', 'FILE:EXT:' . $_EXTKEY . '/pi1/flexform_ds.xml');


?>

А вот и мой tca.php:

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

$TCA['tx_newsbuilder_newsitems'] = array(
    'ctrl' => $TCA['tx_newsbuilder_newsitems']['ctrl'],
    'interface' => array(
        'showRecordFieldList' => 'hidden,tt_news_uid,singleview_uid,fishback_uid,fishback_url,headline,subheading,link'
    ),
    'feInterface' => $TCA['tx_newsbuilder_newsitems']['feInterface'],
    'columns' => array(
        'hidden' => array(        
            'exclude' => 1,
            'label'   => 'LLL:EXT:lang/locallang_general.xml:LGL.hidden',
            'config'  => array(
                'type'    => 'check',
                'default' => '0'
            )
        ),
        'tt_news_uid' => array(        
            'exclude' => 0,        
            'label' => 'LLL:EXT:newsbuilder/locallang_db.xml:tx_newsbuilder_newsitems.tt_news_uid',        
            'config' => array(
                'type' => 'group',    
                'internal_type' => 'db',    
                'allowed' => 'NO_TABLE_NAME_AVAILABLE',    
                'size' => 1,    
                'minitems' => 0,
                'maxitems' => 1,
            )
        ),
        'singleview_uid' => array(        
            'exclude' => 0,        
            'label' => 'LLL:EXT:newsbuilder/locallang_db.xml:tx_newsbuilder_newsitems.singleview_uid',        
            'config' => array(
                'type' => 'group',    
                'internal_type' => 'db',    
                'allowed' => 'tt_news',    
                'size' => 1,    
                'minitems' => 0,
                'maxitems' => 1,
            )
        ),
        'fishback_uid' => array(        
            'exclude' => 0,        
            'label' => 'LLL:EXT:newsbuilder/locallang_db.xml:tx_newsbuilder_newsitems.fishback_uid',        
            'config' => array(
                'type' => 'group',    
                'internal_type' => 'db',    
                'allowed' => 'pages',    
                'size' => 1,    
                'minitems' => 0,
                'maxitems' => 1,
            )
        ),
        'fishback_url' => array(        
            'exclude' => 0,        
            'label' => 'LLL:EXT:newsbuilder/locallang_db.xml:tx_newsbuilder_newsitems.fishback_url',        
            'config' => array(
                'type'     => 'input',
                'size'     => '15',
                'max'      => '255',
                'checkbox' => '',
                'eval'     => 'trim',
                'wizards'  => array(
                    '_PADDING' => 2,
                    'link'     => array(
                        'type'         => 'popup',
                        'title'        => 'Link',
                        'icon'         => 'link_popup.gif',
                        'script'       => 'browse_links.php?mode=wizard',
                        'JSopenParams' => 'height=300,width=500,status=0,menubar=0,scrollbars=1'
                    )
                )
            )
        ),
        'headline' => array(        
            'exclude' => 0,        
            'label' => 'LLL:EXT:newsbuilder/locallang_db.xml:tx_newsbuilder_newsitems.headline',        
            'config' => array(
                'type' => 'text',
                'cols' => '48',    
                'rows' => '1',
            )
        ),
        'subheading' => array(        
            'exclude' => 0,        
            'label' => 'LLL:EXT:newsbuilder/locallang_db.xml:tx_newsbuilder_newsitems.subheading',        
            'config' => array(
                'type' => 'text',
                'cols' => '48',    
                'rows' => '1',
            )
        ),
        'link' => array(        
            'exclude' => 0,        
            'label' => 'LLL:EXT:newsbuilder/locallang_db.xml:tx_newsbuilder_newsitems.link',        
            'config' => array(
                'type'     => 'input',
                'size'     => '15',
                'max'      => '255',
                'checkbox' => '',
                'eval'     => 'trim',
                'wizards'  => array(
                    '_PADDING' => 2,
                    'link'     => array(
                        'type'         => 'popup',
                        'title'        => 'Link',
                        'icon'         => 'link_popup.gif',
                        'script'       => 'browse_links.php?mode=wizard',
                        'JSopenParams' => 'height=300,width=500,status=0,menubar=0,scrollbars=1'
                    )
                )
            )
        ),
    ),
    'types' => array(
        '0' => array('showitem' => 'hidden;;1;;1-1-1, tt_news_uid, singleview_uid, fishback_uid, fishback_url, headline, subheading, link')
    ),
    'palettes' => array(
        '1' => array('showitem' => '')
    )
);
?>

person Nick    schedule 27.03.2013    source источник
comment
Похоже, я ошибался, говоря, что мастер предложений не работает во Flexforms, поэтому я пока воспользуюсь этим путем. Тем не менее, разве не должно появиться TCA?   -  person Nick    schedule 28.03.2013


Ответы (1)


TCA - это массив конфигурации таблицы. Он настраивает внешний вид записей из таблиц базы данных в вашем TYPO3 BackEnd в модуле Интернет -> Список. Итак, если вы перейдете в этот модуль и создадите новую запись для tx_newsbuilder_newsitems, вы увидите форму создания / редактирования записи, как настроено в tca.php и ext_tables.php.

Ваш плагин, вставленный на страницу, представляет собой обычный элемент содержимого, сохраненный в таблице tt_content, поэтому он отображается, как определено в TCA для tt_content. Но в этой таблице настроено поле pi_flexform, которое относится к типу flex и может содержать внутри гибкие данные, чем на самом деле является FlexForm. Для этого вам нужно создать правильный XML-файл для вашей FlexForm и указать TYPO3 использовать его.

В вики TYPO3 вы можете найти подробную информацию об использовании FlexForms.

P.S. Должна быть возможность использовать мастер подсказывать в FlexForm, потому что нотация FF почти такая же, как нотация TCA, и все мастера должны быть доступны.

person Viktor Livakivskyi    schedule 27.03.2013
comment
Спасибо за разъяснения! Это мне очень помогает. Я начинал подозревать, что Flexform - единственный способ сделать это, но не был уверен. Теперь мне просто нужно выяснить, как получить все, что я ввожу в форму, чтобы попасть в базу данных, когда я нажимаю «Сохранить» ... но это тема для другого потока. - person Nick; 28.03.2013