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' => '')
)
);
?>
1 ответ
TCA - это массив конфигурации таблицы. Он настраивает внешний вид записей из таблиц базы данных в вашем BackEnd TYPO3 в Web -> модуль списка. Итак, если вы зайдете в этот модуль и создадите новую запись для tx_newsbuilder_newsitems
вы увидите форму создания / редактирования вашей записи, настроенную вtca.php
а такжеext_tables.php
,
Ваш плагин, вставленный на страницу, представляет собой обычный элемент контента, сохраненный в таблице tt_content, поэтому он отображается, как определено в TCA для tt_content. Но в этой таблице настроено поле pi_flexform, которое имеет тип flex и может содержать гибкие данные внутри, чем на самом деле являетсяFlexForm. Для этого вам нужно создать надлежащий XML-файл для вашей FlexForm и дать указание TYPO3 использовать его.
В википедии TYPO3 вы можете найти подробную информацию об использовании FlexForms.
PS Должно быть возможно использовать мастер подсказок во FlexForm, потому что нотация FF почти такая же, как нотация TCA, и все мастера должны быть доступны.