Flexform 中的 TYPO3 FAL
Posted
技术标签:
【中文标题】Flexform 中的 TYPO3 FAL【英文标题】:TYPO3 FAL in Flexform 【发布时间】:2020-08-06 14:03:19 【问题描述】:我有一个带有以下代码的 flexform:
<image>
<TCEforms>
<label>LLL:EXT:my_slider/Resources/Private/Language/locallang.xlf:flexform.slider.main.slider.image</label>
<config>
<type>group</type>
<internal_type>file</internal_type>
<allowed>jpg, jpeg, gif, png</allowed>
<show_thumbs>1</show_thumbs>
<minitems>0</minitems>
<maxitems>1</maxitems>
<size>1</size>
</config>
</TCEforms>
</image>
到现在为止,这行得通。但是现在在 TYPO3 10 中我得到了这个错误:
表 tt_content 中字段“image”的 TCA internal_type 必须设置为“db”或“folder”。
我该如何解决这个问题?如何将我的 flexform 迁移到 FAL?我已经测试了一些解决方案,但它们以:
字段名称“pi_flexform”与节容器“sliderConfiguration”中元素“image”的无效弹性表单数据结构:不允许在弹性表单节中嵌套内联元素。
如果我写
<el>
<settings.slider type="array">
<title>LLL:EXT:my_slider/Resources/Private/Language/locallang.xlf:flexform.slider.main.slider</title>
<type>array</type>
<section>1</section>
<el>
<sliderConfiguration>
<type>array</type>
<title>LLL:EXT:my_slider/Resources/Private/Language/locallang.xlf:flexform.slider.main.slider.slide</title>
<el>
<media>
<!-- https://***.com/questions/47554243/how-to-add-cropvariants-to-an-image-field-in-typo3-flexform -->
<TCEforms>
<label>
LLL:EXT:va_template/Resources/Private/Language/locallang.xlf:content_element.backgroundtext.settings.image
</label>
<config>
<type>inline</type>
<minitems>1</minitems>
<maxitems>1</maxitems>
<appearance type="array">
<enabledControls type="array">
<delete>1</delete>
<dragdrop>1</dragdrop>
<new>0</new>
<hide>1</hide>
<info>1</info>
</enabledControls>
<fileUploadAllowed>1</fileUploadAllowed>
<headerThumbnail type="array">
<field>uid_local</field>
<height>100c</height>
<width>100</width>
</headerThumbnail>
<useSortable>1</useSortable>
</appearance>
<foreign_field>uid_foreign</foreign_field>
<foreign_label>uid_local</foreign_label>
<foreign_match_fields type="array">
<fieldname>media</fieldname>
</foreign_match_fields>
<foreign_selector>uid_local</foreign_selector>
<foreign_sortby>sorting_foreign</foreign_sortby>
<foreign_table>sys_file_reference</foreign_table>
<foreign_table_field>tablenames</foreign_table_field>
</config>
</TCEforms>
</media>
然后我得到这个错误
字段名称“pi_flexform”上的无效弹性表单数据结构在节容器“sliderConfiguration”中具有元素“media”:不允许在弹性表单节中嵌套内联元素。
【问题讨论】:
【参考方案1】:如果像在标准内容元素中那样做呢?
在 TYPO3 后端转到模块 Configuration
并选择$GLOBALS['TCA'] (Table configuration array)
然后找到tt_content.columns.media.config
的路径
选择这些字段和值并将其作为 XML 插入到您的定义中
【讨论】:
请看我上面的答案 抱歉,我还没有使用 TYPO3 10 的经验。也许您可以在闲散的频道中获得更多帮助。【参考方案2】:我找到了这个。所选图像保存在 tt_content 中。但保存后不会出现在后台表单中。
<options.image1>
<TCEforms>
<label>Bild</label>
<config>
<type>inline</type>
<type>group</type>
<internal_type>db</internal_type>
<maxitems>1</maxitems>
<foreign_table>sys_file_reference</foreign_table>
<foreign_field>uid_foreign</foreign_field>
<foreign_sortby>sorting_foreign</foreign_sortby>
<foreign_table_field>tablenames</foreign_table_field>
<foreign_match_fields>
<fieldname>--feldname--</fieldname>
</foreign_match_fields>
<foreign_label>uid_local</foreign_label>
<foreign_selector>uid_local</foreign_selector>
<foreign_selector_fieldTcaOverride>
<config>
<appearance>
<elementBrowserType>file</elementBrowserType>
<elementBrowserAllowed>gif,jpg,jpeg,tif,tiff,bmp,pcx,tga,png,pdf,ai</elementBrowserAllowed>
</appearance>
</config>
</foreign_selector_fieldTcaOverride>
<appearance>
<elementBrowserType>file</elementBrowserType>
<elementBrowserAllowed>jpg,jpeg,png,gif</elementBrowserAllowed>
</appearance>
<allowed>sys_file</allowed>
<size>5</size>
<minitems>0</minitems>
<maxitems>5</maxitems>
<show_thumbs>1</show_thumbs>
</config>
</TCEforms>
</options.image1>
【讨论】:
为什么使用 otions 而不是设置,为什么使用两种类型? 我刚刚复制了我找到的代码。我把它改成了设置。我删除了我找到了解决方案:请看这里:How to create a file upload field in flexform of a custom extbase extension in TYPO3 10?
或者为了您的方便:
<T3DataStructure>
<sheets>
<sDEF>
<ROOT>
<TCEforms>
<sheetTitle>Example 1</sheetTitle>
</TCEforms>
<type>array</type>
<el>
<!-- example of a working fal image -->
<images>
<label>FAL-Images</label>
<config>
<type>inline</type>
<foreign_table>sys_file_reference</foreign_table>
<foreign_field>uid_foreign</foreign_field>
<foreign_sortby>sorting_foreign</foreign_sortby>
<foreign_table_field>tablenames</foreign_table_field>
<foreign_match_fields>
<fieldname>image</fieldname>
</foreign_match_fields>
<foreign_label>uid_local</foreign_label>
<foreign_selector>uid_local</foreign_selector>
<overrideChildTca>
<columns>
<uid_local>
<config>
<appearance>
<elementBrowserType>file</elementBrowserType>
<elementBrowserAllowed></elementBrowserAllowed>
</appearance>
</config>
</uid_local>
</columns>
</overrideChildTca>
<filter>
<userFunc>TYPO3\CMS\Core\Resource\Filter\FileExtensionFilter->filterInlineChildren</userFunc>
<parameters>
<allowedFileExtensions></allowedFileExtensions>
<disallowedFileExtensions></disallowedFileExtensions>
</parameters>
</filter>
<appearance>
<useSortable>1</useSortable>
<headerThumbnail>
<field>uid_local</field>
<width>45</width>
<height>45c</height>
</headerThumbnail>
<enabledControls>
<info>1</info>
<new>0</new>
<dragdrop>1</dragdrop>
<sort>0</sort>
<hide>1</hide>
<delete>1</delete>
</enabledControls>
</appearance>
</config>
</images>
<!-- end -->
</el>
</ROOT>
</sDEF>
</sheets>
【讨论】:
【参考方案4】:max.haredoom 的解决方案有效 :) 干得好,伙计。 奇怪的是它只能在没有“设置...”的情况下工作
如果您需要此自定义内容元素,则可以将类似内容添加到您的处理器文件中:
if (isset($processedData['content']['images']) &&
(int) $processedData['content']['images'] > 0)
$fileRepository = GeneralUtility::makeInstance(\TYPO3\CMS\Core\Resource\FileRepository::class);
$fileObjects = $fileRepository->findByRelation('tt_content', 'image', $processedData['data']['uid']);
// now loop over objects and get sys_file uids via $fileObject->getOriginalFile()->getUid();
【讨论】:
【参考方案5】:我已经在这里编写了完整的 flexform 配置,它将使用typo3 10 运行。
<image>
<TCEforms>
<label>LLL:EXT:ns_theme_healthy/Resources/Private/Language/locallang_flex.xlf:general.image</label>
<config>
<type>inline</type>
<maxitems>1</maxitems>
<foreign_table>sys_file_reference</foreign_table>
<foreign_table_field>tablenames</foreign_table_field>
<foreign_label>uid_local</foreign_label>
<foreign_sortby>sorting_foreign</foreign_sortby>
<foreign_field>uid_foreign</foreign_field>
<foreign_selector>uid_local</foreign_selector>
<foreign_selector_fieldTcaOverride>
<config>
<appearance>
<elementBrowserType>file</elementBrowserType>
<elementBrowserAllowed>gif,jpg,jpeg,png,svg</elementBrowserAllowed>
</appearance>
</config>
</foreign_selector_fieldTcaOverride>
<foreign_types type="array">
<numIndex index="0">
<showitem>--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,--palette--;;filePalette</showitem>
</numIndex>
<numIndex index="2">
<showitem>--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,--palette--;;filePalette</showitem>
</numIndex>
</foreign_types>
<foreign_match_fields>
<fieldname>image</fieldname> <!-- CAUTION!! Replace "fal" with the variable name of this field! -->
</foreign_match_fields>
<appearance type="array">
<newRecordLinkAddTitle>1</newRecordLinkAddTitle>
<headerThumbnail>
<field>uid_local</field>
<height>64</height>
<width>64</width>
</headerThumbnail>
<enabledControls>
<info>1</info>
<new>0</new>
<dragdrop>0</dragdrop>
<sort>1</sort>
<hide>0</hide>
<delete>1</delete>
<localize>1</localize>
</enabledControls>
<createNewRelationLinkTitle>LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:images.addFileReference</createNewRelationLinkTitle>
</appearance>
<behaviour>
<localizationMode>select</localizationMode>
<localizeChildrenAtParentLocalization>1</localizeChildrenAtParentLocalization>
</behaviour>
<overrideChildTca>
<columns type="array">
<uid_local type="array">
<config type="array">
<appearance type="array">
<elementBrowserType>file</elementBrowserType>
<elementBrowserAllowed>jpg,png,svg,jpeg,gif</elementBrowserAllowed>
</appearance>
</config>
</uid_local>
</columns>
<types type="array">
<numIndex index="2">
<showitem>--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,--palette--;;filePalette</showitem>
</numIndex>
</types>
</overrideChildTca>
</config>
</TCEforms>
</image>
我已经测试了这将是我全新的typo3 10 项目。
希望对你有帮助。 谢谢!
【讨论】:
谢谢。在后端我看到它没问题。但在 Frontent 中,我总是得到值“1”。然后我看到 id 为 1 f:uri.image(src:'data.flexform_image',treatIdAsReference:'1') 的图片 是的,在前端它总是显示字段的状态。如果添加了图像,那么它将显示 1,否则将显示 0。但是要渲染完整的图像数组,您需要使用数据处理器。例如像这样: 10 = TYPO3\CMS\Frontend\DataProcessing\FilesProcessor 10 references.fieldName = image as = image 谢谢,我将数据处理器添加到了我的排版代码中,用于这样的网格。对我有用【参考方案6】:在将 Typo3 9.x 更新到 Typo3 10.x 后,我遇到了类似的错误, 如果您想编辑由 DCE 扩展创建的字段。
我过去的 dce 元素配置,给我的错误是:
<config>
<type>group</type>
<internal_type>file</internal_type>
<allowed>jpg,jpeg,png,gif</allowed>
<size>1</size>
<minitems>0</minitems>
<maxitems>1</maxitems>
<show_thumbs>1</show_thumbs>
</config>
在将
<config>
<type>group</type>
<internal_type>folder</internal_type>
<allowed>jpg,jpeg,png,gif</allowed>
<size>1</size>
<minitems>0</minitems>
<maxitems>1</maxitems>
<show_thumbs>1</show_thumbs>
</config>
【讨论】:
以上是关于Flexform 中的 TYPO3 FAL的主要内容,如果未能解决你的问题,请参考以下文章
从 Flexform 上传图像后出现 Fluid TYPO3 Flux 500 错误
Typo3 Fluid:渲染flux:flexform.field.wizard.link的正确方法是啥?
流体动力 TYPO3 部分中的 enableFields -> 对象
Fluid TYPO3:更新后出错:无法分析类:FluidTYPO3\Flux\ViewHelpers\Flexform\SheetViewHelper 可能未加载或没有自动加载器?