TYPO3 custom content inline elements - typo3

Is it possible to create a custom content element (type inline) where i can choose from the default typo3 elements (text with image, grids, html)?
At the moment i have an custom content with a new table an can insert my own element as a child.
I would like to give the editor the opprtunity to create an element like an tag and insert whatever he wants.
i have this code
'parent_uid' => [
'config' => [
'type' => 'select',
'renderType' => 'selectSingle',
'items' => [
[
'',
0,
],
],
'default' => 0,
'foreign_table' => 'tt_content',
'foreign_table_where' => 'AND tt_content.pid=###CURRENT_PID### AND tt_content.sys_language_uid IN (-1, ###REC_FIELD_sys_language_uid###)',
],
],
'parent_table' => [
'config' => [
'type' => 'passthrough',
],
],
and this
$tabs = [
'k_custom_content_tab' => [
'exclude' => true,
'label' => 'Field label',
'config' => [
'appearance' => [
'collapseAll' => '1',
'enabledControls' => [
'dragdrop' => '1',
],
'levelLinksPosition' => 'bottom',
'useSortable' => '1',
],
'foreign_field' => 'parent_uid',
'foreign_table' => 'k_custom_content_tab',
'foreign_table_field' => 'parent_table',
'maxitems' => '20',
'minitems' => '1',
'type' => 'inline',
],
],
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns(
'tt_content',
$tabs
);

Related

Override TCA Field

I want to override the field 'building' of the tt_address extension. I tried this in my sitepackage
typo3conf/ext/sitepackage/Configuration/TCA/Overrides/tt_address.php
$GLOBALS = [
'TCA' => [
'tt_address' => [
'columns' => [
'building' => [
'exclude' => true,
'label' => 'LLL:EXT:tt_address/Resources/Private/Language/locallang_db.xlf:tt_address.building',
'config' => [
'type' => 'select',
'renderType' => 'selectSingle',
'items' => [
['Building 1', 0],
['Building 2', 1],
['Building 3', 2],
],
'size' => 1,
'maxitems' => 4,
'eval' => ''
],
],
],
],
],
];
Now I get the error: Given select field item list was not found.
$GLOBALS = [
does not seem to be a good idea, since it will override the GLOBALS array completely.
It should be
$GLOBALS['TCA']['tt_address']['columns']['building'] = [
'exclude' => true,
'label' => 'LLL:EXT:tt_address/Resources/Private/Language/locallang_db.xlf:tt_address.building',
'config' => [
'type' => 'select',
'renderType' => 'selectSingle',
'items' => [
['Building 1', 0],
['Building 2', 1],
['Building 3', 2],
],
'size' => 1,
'maxitems' => 4,
'eval' => ''
]
]

Extending tt_content with inline element, element is not attached

I created an extension in TYPO3 9.5 for adding multiple elements from another table to tt_content with type "inline" (IRRE) according to the tutorial.
I can add new inline elements to a content element in backend but as I am saving them, they are not attached to the tt_content element. But I can see them as records in the list view. Only the connection between the two elements are missing.
The definition of the additional field for tt_content:
CREATE TABLE tt_content (
tx_jrinterview_question_answer int(11) DEFAULT '0' NOT NULL
);
The definition of the new records table:
CREATE TABLE tx_jrinterview_question_answer (
parentid int(11) DEFAULT '0' NOT NULL,
parenttable varchar(255) DEFAULT '' NOT NULL,
question varchar(255) DEFAULT '' NOT NULL,
answer text
);
The TCA part for tt_content to add the IRRE functionality:
'tx_jrinterview_question_answer' => [
'exclude' => true,
'label' => 'Questions and Answers',
'config' => [
'type' => 'inline',
'allowed' => 'tx_jrinterview_question_answer',
'foreign_table' => 'tx_jrinterview_question_answer',
'foreign_field' => 'parentid',
'foreign_table_field' => 'parenttable',
'minitems' => 0,
'maxitems' => 99,
],
],
],
And the TCA for the new record:
<?php
return [
'ctrl' => [
'title' => 'Question and answer',
'label' => 'question',
'tstamp' => 'tstamp',
'crdate' => 'crdate',
'cruser_id' => 'cruser_id',
'versioningWS' => true,
'languageField' => 'sys_language_uid',
'transOrigPointerField' => 'l10n_parent',
'transOrigDiffSourceField' => 'l10n_diffsource',
'delete' => 'deleted',
'enablecolumns' => [
'disabled' => 'hidden',
'starttime' => 'starttime',
'endtime' => 'endtime',
],
'searchFields' => 'question,answer',
],
'interface' => [
'showRecordFieldList' => 'parentid,parenttable,sys_language_uid, l10n_parent, l10n_diffsource, hidden, question, answer',
],
'types' => [
'0' => ['showitem' => 'parentid, parenttable, sys_language_uid, l10n_parent, l10n_diffsource, hidden, question, answer, --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access, starttime, endtime'],
],
'columns' => [
'pid' => [
'label' => 'Pid',
'config' => [
'type' => 'passthrough'
]
],
'crdate' => [
'label' => 'Crdate',
'config' => [
'type' => 'passthrough',
]
],
'tstamp' => [
'label' => 'Tstamp',
'config' => [
'type' => 'passthrough',
]
],
'sys_language_uid' => [
'exclude' => true,
'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.language',
'config' => [
'type' => 'select',
'renderType' => 'selectSingle',
'special' => 'languages',
'items' => [
[
'LLL:EXT:lang/locallang_general.xlf:LGL.allLanguages',
-1,
'flags-multiple'
]
],
'default' => 0,
],
],
'l10n_parent' => [
'displayCond' => 'FIELD:sys_language_uid:>:0',
'exclude' => true,
'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.l18n_parent',
'config' => [
'type' => 'select',
'renderType' => 'selectSingle',
'default' => 0,
'items' => [
['', 0],
],
'foreign_table' => 'tx_jrinterview_question_answer',
'foreign_table_where' => 'AND tx_jrinterview_question_answer.pid=###CURRENT_PID### AND tx_jrinterview_question_answer.sys_language_uid IN (-1,0)',
],
],
'l10n_diffsource' => [
'config' => [
'type' => 'passthrough',
],
],
't3ver_label' => [
'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.versionLabel',
'config' => [
'type' => 'input',
'size' => 30,
'max' => 255,
],
],
'hidden' => [
'exclude' => true,
'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.hidden',
'config' => [
'type' => 'check',
'items' => [
'1' => [
'0' => 'LLL:EXT:lang/locallang_core.xlf:labels.enabled'
]
],
],
],
'starttime' => [
'exclude' => true,
'behaviour' => [
'allowLanguageSynchronization' => true
],
'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.starttime',
'config' => [
'type' => 'input',
'renderType' => 'inputDateTime',
'size' => 13,
'eval' => 'datetime',
'default' => 0,
],
],
'endtime' => [
'exclude' => true,
'behaviour' => [
'allowLanguageSynchronization' => true
],
'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.endtime',
'config' => [
'type' => 'input',
'renderType' => 'inputDateTime',
'size' => 13,
'eval' => 'datetime',
'default' => 0,
'range' => [
'upper' => mktime(0, 0, 0, 1, 1, 2038)
],
],
],
'parentid' => [
'exclude' => true,
'label' => 'parentid',
'config' => [
'type' => 'passthrough',
],
],
'parenttable' => [
'exclude' => true,
'label' => 'parenttable',
'config' => [
'type' => 'passthrough',
],
],
'question' => [
'exclude' => true,
'label' => 'question',
'config' => [
'type' => 'input',
'size' => 30,
'eval' => 'trim'
],
],
'answer' => [
'exclude' => true,
'label' => 'answer',
'config' => [
'type' => 'text',
'cols' => 40,
'rows' => 15,
'eval' => 'trim'
]
],
],
];
Perhaps this has to be something with the language? If I change in the table directly the parentid and parenttable after creating it via IRRE, the record is shown.
Add more fields to your question/answer table.
In your ext_tables.sql
CREATE TABLE tx_jrinterview_question_answer (
uid int(11) NOT NULL auto_increment,
pid int(11) DEFAULT '0' NOT NULL,
tstamp int(11) DEFAULT '0' NOT NULL,
crdate int(11) DEFAULT '0' NOT NULL,
cruser_id int(11) DEFAULT '0' NOT NULL,
deleted tinyint(4) DEFAULT '0' NOT NULL,
hidden tinyint(4) DEFAULT '0' NOT NULL,
parentid int(11) DEFAULT '0' NOT NULL,
parenttable varchar(255) DEFAULT '' NOT NULL,
question varchar(255) DEFAULT '' NOT NULL,
answer text,
PRIMARY KEY (uid),
KEY parent (pid)
);
In your Configuration/TCA/tx_jrinterview_question_answer.php
<?php
defined('TYPO3_MODE') or die();
return [
'ctrl' => [
'title' => 'tx_jrinterview_question_answer',
'label' => 'question',
'tstamp' => 'tstamp',
'crdate' => 'crdate',
'cruser_id' => 'cruser_id',
'delete' => 'deleted',
'enablecolumns' => [
'disabled' => 'hidden',
],
],
'interface' => [
'showRecordFieldList' => 'parentid,parenttable,question,answer'
],
'columns' => [
'pid' => [
'label' => 'Pid',
'config' => [
'type' => 'passthrough'
]
],
'crdate' => [
'label' => 'Crdate',
'config' => [
'type' => 'passthrough',
]
],
'tstamp' => [
'label' => 'Tstamp',
'config' => [
'type' => 'passthrough',
]
],
'hidden' => [
'exclude' => true,
'label' => 'Hidden',
'config' => [
'type' => 'check',
'default' => 0
]
],
'parentid' => [
'exclude' => true,
'label' => 'Parentid',
'config' => [
'type' => 'passthrough',
],
],
'parenttable' => [
'exclude' => true,
'label' => 'Parenttable',
'config' => [
'type' => 'passthrough',
],
],
'question' => [
'exclude' => true,
'label' => 'Question',
'config' => [
'type' => 'input',
'size' => 30,
'eval' => 'trim'
],
],
'answer' => [
'exclude' => true,
'label' => 'Answer',
'config' => [
'type' => 'text',
'cols' => 40,
'rows' => 15,
'eval' => 'trim'
]
],
],
'types' => [
0 => [
'showitem' => 'parentid,parenttable,question,answer'
]
]
];
And the connection should be keept. I did test it.

sys_categories FAL image editor

I need to activate the "Image editor" for TYPO3 (8.7) sys_categories. In every other Element which uses FAL the editor is available. Only in the Category Images I did not have this option.
How do I active it?
I've tried to set the exact same TCA to this field but no changes.
Here is the TCA (of the tx_news) Extension:
'images' => [
'exclude' => true,
'l10n_mode' => 'mergeIfNotBlank',
'label' => $ll . 'tx_news_domain_model_category.image',
'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig(
'images',
[
'appearance' => [
'createNewRelationLinkTitle' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:images.addFileReference',
'showPossibleLocalizationRecords' => true,
'showRemovedLocalizationRecords' => true,
'showAllLocalizationLink' => true,
'showSynchronizationLink' => true
],
'foreign_match_fields' => [
'fieldname' => 'images',
'tablenames' => 'sys_category',
'table_local' => 'sys_file',
],
],
$GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext']
)
]
Also this file on GitHub: https://github.com/georgringer/news/blob/master/Configuration/TCA/Overrides/sys_category.php
You might compare your TCA with the configuration for field assets in record tt_content.
As the cropping is stored in sys_file_reference I would have a closer look to the showitem value "imageoverlayPalette"
Answer
The config index "foreign_types" were missing. Override the TCA settings like this and it works:
<?php
defined('TYPO3_MODE') or die();
$ll = 'LLL:EXT:news/Resources/Private/Language/locallang_db.xlf:';
$newSysCategoryColumns = [
'images' => [
'exclude' => true,
'label' => $ll . 'tx_news_domain_model_category.image',
'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig(
'images',
[
'behaviour' => [
'allowLanguageSynchronization' => true,
],
'appearance' => [
'createNewRelationLinkTitle' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:images.addFileReference',
'showPossibleLocalizationRecords' => true,
'showRemovedLocalizationRecords' => true,
'showAllLocalizationLink' => true,
'showSynchronizationLink' => true
],
'foreign_match_fields' => [
'fieldname' => 'images',
'tablenames' => 'sys_category',
'table_local' => 'sys_file',
],
'foreign_types' => array(
'0' => array(
'showitem' => '
--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
--palette--;;filePalette'
),
\TYPO3\CMS\Core\Resource\File::FILETYPE_TEXT => array(
'showitem' => '
--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
--palette--;;filePalette'
),
\TYPO3\CMS\Core\Resource\File::FILETYPE_IMAGE => array(
'showitem' => '
--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
--palette--;;filePalette'
),
\TYPO3\CMS\Core\Resource\File::FILETYPE_AUDIO => array(
'showitem' => '
--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
--palette--;;filePalette'
),
\TYPO3\CMS\Core\Resource\File::FILETYPE_VIDEO => array(
'showitem' => '
--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
--palette--;;filePalette'
),
\TYPO3\CMS\Core\Resource\File::FILETYPE_APPLICATION => array(
'showitem' => '
--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
--palette--;;filePalette'
)
),
],
$GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext']
)
],
];
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns('sys_category', $newSysCategoryColumns);

Remove Action & Controller from url - EXT:news & RealURL

I'm having trouble removing /news/story/ from my URL's when using ext:news and real url.
What I'd like is:
www.mysite.com/en/news/this-is-my-story-title
And not:
www.mysite.com/en/news/story/this-is-my-story-title
Current page structure:
-root(1)
--Home (2)
--News (3)
---Story (4)
This is my manual realurl conf:
<?php
$GLOBALS['TYPO3_CONF_VARS']['FE']['addRootLineFields'] .= ',tx_realurl_pathsegment';
$domain = 'mysite.com';
$rootPageUid = 1;
$rssFeedPageType = 9818; // pageType of your RSS feed page
$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['realurl'][$domain] = [
'pagePath' => [
'type' => 'user',
'userFunc' => 'EXT:realurl/class.tx_realurl_advanced.php:&tx_realurl_advanced->main',
'spaceCharacter' => '-',
'languageGetVar' => 'L',
'expireDays' => '3',
'rootpage_id' => $rootPageUid,
'firstHitPathCache' => 1
],
'init' => [
'enableCHashCache' => true,
'respectSimulateStaticURLs' => 0,
'appendMissingSlash' => 'ifNotFile,redirect',
'adminJumpToBackend' => true,
'enableUrlDecodeCache' => true,
'enableUrlEncodeCache' => true,
'emptyUrlReturnValue' => '/',
],
'fileName' => [
'defaultToHTMLsuffixOnPrev' => 0,
'acceptHTMLsuffix' => 1,
'index' => [
'feed.rss' => [
'keyValues' => [
'type' => $rssFeedPageType,
]
]
]
],
'preVars' => array(
0 => array(
'GETvar' => 'L',
'valueMap' => array(
'en' => 0,
'cy' => 1,
),
'noMatch' => 'bypass',
),
),
'fixedPostVars' => array(
'newsDetailConfiguration' => array(
array(
'GETvar' => 'tx_news_pi1[action]',
'valueMap' => array(
'story' => '',
),
'noMatch' => 'bypass'
),
array(
'GETvar' => 'tx_news_pi1[controller]',
'valueMap' => array(
'news' => '',
),
'noMatch' => 'bypass'
),
array(
'GETvar' => 'tx_news_pi1[news]',
'lookUpTable' => array(
'table' => 'tx_news_domain_model_news',
'id_field' => 'uid',
'alias_field' => 'title',
'addWhereClause' => ' AND NOT deleted',
'useUniqueCache' => 1,
'useUniqueCache_conf' => array(
'strtolower' => 1,
'spaceCharacter' => '-'
),
'languageGetVar' => 'L',
'languageExceptionUids' => '',
'languageField' => 'sys_language_uid',
'transOrigPointerField' => 'l10n_parent',
'autoUpdate' => 1,
'expireDays' => 180,
)
)
),
'newsCategoryConfiguration' => array(
array(
'GETvar' => 'tx_news_pi1[overwriteDemand][categories]',
'lookUpTable' => array(
'table' => 'sys_category',
'id_field' => 'uid',
'alias_field' => 'title',
'addWhereClause' => ' AND NOT deleted',
'useUniqueCache' => 1,
'useUniqueCache_conf' => array(
'strtolower' => 1,
'spaceCharacter' => '-'
)
)
)
),
'newsTagConfiguration' => array(
array(
'GETvar' => 'tx_news_pi1[overwriteDemand][tags]',
'lookUpTable' => array(
'table' => 'tx_news_domain_model_tag',
'id_field' => 'uid',
'alias_field' => 'title',
'addWhereClause' => ' AND NOT deleted',
'useUniqueCache' => 1,
'useUniqueCache_conf' => array(
'strtolower' => 1,
'spaceCharacter' => '-'
)
)
)
),
'4' => 'newsDetailConfiguration', // ID of the page with the news plugin detail view
),
'postVarSets' => [
'_DEFAULT' => [
'controller' => [
[
'GETvar' => 'tx_news_pi1[action]',
'noMatch' => 'bypass'
],
[
'GETvar' => 'tx_news_pi1[controller]',
'noMatch' => 'bypass'
]
],
'dateFilter' => [
[
'GETvar' => 'tx_news_pi1[overwriteDemand][year]',
],
[
'GETvar' => 'tx_news_pi1[overwriteDemand][month]',
],
],
'page' => [
[
'GETvar' => 'tx_news_pi1[#widget_0][currentPage]',
],
],
],
],
];
Using TYPO3 v8.7.15,RealURL 2.3 and News v7.0.4
RealUrl is set to use my manual conf file also.
Thanks again T3 community
realUrl Provide pretty nice option to exclude a page from URL segment. For that go to Page-> property->General. You will find an option Exclude from speaking URL check this Screenshot.
In your case go to story page and exclude this from URL
-root(1)
--Home (2)
--News (3)
---Story (4) // Exclude from realUrl
That's it, this what you're actually looking for!
Greetings!

Typo3 FAL missing alternative text field in Extension

i am using FAL in my Extension and cant get the alternative field showing.
Please look at these 2 images to have a better view:
Image 1: This is the view in my extension
Image 2: This view is in Typo3 Page Ressource Tab
As you can see the image is working fine, so its not this problem: TYPO3 fal upload image with alt-text.
Here is my TCA code:
'images' => array(
'exclude' => 1,
'label' => 'LLL:EXT:fy_reference/Resources/Private/Language/locallang_db.xlf:tx_fyreference_domain_model_reference.images',
'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig('image', array(
'appearance' => array(
'createNewRelationLinkTitle' => 'LLL:EXT:cms/locallang_ttc.xlf:images.addFileReference'
),
'minitems' => 0,
'maxitems' => 9999,
), $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext']),
'files' => array(
'exclude' => 1,
'label' => 'Files',
'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig('files', array(
'appearance' => array(
'createNewRelationLinkTitle' => 'LLL:EXT:cms/locallang_ttc.xlf:images.addFileReference'
),
), $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext']),
),
),
Any advise will be thankful.
Found the solution thanks to: TYPO3 FAL: enable Alt text and Link for custom domain field and https://forge.typo3.org/issues/56884
It seems that I have overread the answere.
Here is the complete TCA:
'images' => array(
'exclude' => 1,
'label' => 'LLL:EXT:fy_reference/Resources/Private/Language/locallang_db.xlf:tx_fyreference_domain_model_reference.images',
'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig('image', array(
'foreign_selector_fieldTcaOverride' => array(
'config' => array(
'appearance' => array(
'elementBrowserType' => 'file',
'elementBrowserAllowed' => 'gif,jpg,jpeg,tif,tiff,bmp,png'
)
)
),
'appearance' => array(
'createNewRelationLinkTitle' => 'LLL:EXT:cms/locallang_ttc.xlf:images.addFileReference',
),
'minitems' => 0,
'maxitems' => 9999,
'foreign_types' => array(
'0' => array(
'showitem' => '
--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
--palette--;;filePalette'
),
\TYPO3\CMS\Core\Resource\File::FILETYPE_IMAGE => array(
'showitem' => '
--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
--palette--;;filePalette'
),
)
), $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext']),
'files' => array(
'exclude' => 1,
'label' => 'Files',
'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig('files', array(
'appearance' => array(
'createNewRelationLinkTitle' => 'LLL:EXT:cms/locallang_ttc.xlf:images.addFileReference'
),
), $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext']),
),
),
Important is to add these line:
'foreign_types' => array(
'0' => array(
'showitem' => '
--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
--palette--;;filePalette'
),
\TYPO3\CMS\Core\Resource\File::FILETYPE_IMAGE => array(
'showitem' => '
--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
--palette--;;filePalette'
),
)
If you also want to limit the upload files type, you could use this:
'foreign_selector_fieldTcaOverride' => array(
'config' => array(
'appearance' => array(
'elementBrowserType' => 'file',
'elementBrowserAllowed' => 'gif,jpg,jpeg,tif,tiff,bmp,png'
)
)
),
You will get this: