【问题标题】:TYPO3 FAL in FlexformFlexform 中的 TYPO3 FAL
【发布时间】: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://stackoverflow.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”:不允许在弹性表单节中嵌套内联元素。

【问题讨论】:

    标签: typo3 typoscript fal flexform typo3-10.x


    【解决方案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 而不是设置,为什么使用两种类型?
    • 我刚刚复制了我找到​​的代码。我把它改成了设置。我删除了 inline。但仍然没有运气。我猜这是 Typo3 10 中的一个错误。
    【解决方案3】:

    我找到了解决方案:请看这里: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>
        

        在将 file 更改为 文件夹 后,错误消失了,一切都很好.后端还告诉我“db”选项在某些情况下也可能有效。

        <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>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-07-24
          • 2013-02-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-06-24
          • 1970-01-01
          • 2017-07-30
          相关资源
          最近更新 更多