0

我已经将typo3从9.5.5升级到10.4.19,DCE从2.03.x升级到2.6.2

DCE 升级后,图像上传字段配置似乎更改错误(https://nimb.ws/slTyH8)。图像不在这些字段中,并且在前端中存在图像,即缓存。

我尝试将 DCE 的旧配置更改为新配置。该领域现在还可以,但是网站已刷新,旧图像已消失。

我有200多页。所以不可能重新上传。我已经上传了我的备份,现在我处于以前的状态。

检查了安装工具,不幸的是,DCE 没有升级向导。如何在不丢失图像的情况下使其正确?

帮我!

4

2 回答 2

1

这是从旧图像处理到基于 FAL 的参考图像的变化。在 DCE 的早期版本中,文件名已保存在其中,tt_content.pi_flexform并且有一个预定义/配置的路径,应该在其中搜索该文件。一段时间以来,在 TYPO3 中,文件是通过 FAL 处理的,因此与表条目的关系sys_file...

几周前,a 为客户迁移了一些 DCE 元素。没有编写升级向导,而是使用了一些 PHP 行。

第一步:导出相关数据

在 DCE 中导出内容元素和文件名的“uid”。

对于 UID=2 的 DCE,文件字段称为“图像”,可以通过以下方式完成:

SELECT ExtractValue(pi_flexform, '//field[@index="settings.image"]/value') as filename, `uid`
FROM `tt_content`
WHERE CType='dce_dceuid2' AND ExtractValue(pi_flexform, '//field[@index="settings.image"]/value')!='';

将结果导出为 CSV。

第 2 步:创建关系sys_file_reference并更新tt_content

现在我们必须管理对数据库的更改:

  1. sys_file在 DCE 和-entries之间创建 FAL 关系(以 -records 的形式sys_file_reference
  2. 更新pi_flexform现有 DCE 内容元素
  3. 更新旧式 DCE 的结构

对于这些步骤,我使用 PHP 函数生成了 SQL 查询:

function process(string $csv, string $CType, string $fieldName = 'image'): void
{
    foreach (explode(chr(10), $csv) as $line) {
        [$fileName, $uid] = explode(';', $line);
        if ($fileName && $fileName !== '""') {
            $uid = trim($uid);
            echo htmlentities("INSERT INTO sys_file_reference (uid_local, uid_foreign, tablenames, fieldname, table_local) VALUES((SELECT uid FROM sys_file WHERE identifier=\"/_migrated_/pics/" . $fileName . "\"), $uid, 'tt_content', '" . $fieldName . "', 'sys_file');",
                    ENT_QUOTES | ENT_HTML5) . chr(10);
        }
    }
    echo htmlentities('UPDATE tt_content SET pi_flexform=UpdateXML(`pi_flexform`, \'//field[@index="settings.' . $fieldName . '"]/value\', \'<value index=\"vDEF\">1</value>\') WHERE uid=437 AND CType=\'' . $CType . '\' AND ExtractValue(pi_flexform, \'//field[@index="settings.' . $fieldName . '"]/value\')!=\'\';',
            ENT_QUOTES | ENT_HTML5) . chr(10);

    $configuration = '<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>{$variable}</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>gif,jpg,jpeg,png</elementBrowserAllowed>
                        </appearance>
                    </config>
                </uid_local>
            </columns>
            <types type="array">
                <numIndex index="2">
                    <showitem>--palette--;LLL:EXT:core/Resources/Private/Language/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,--palette--;;filePalette</showitem>
                </numIndex>
            </types>
        </overrideChildTca>

        <minitems>0</minitems>
        <maxitems>1</maxitems>

        <appearance>
            <useSortable>1</useSortable>
            <headerThumbnail>
                <field>uid_local</field>
                <width>45c</width>
                <height>45</height>
            </headerThumbnail>

            <enabledControls>
                <info>1</info>
                <dragdrop>1</dragdrop>
                <hide>1</hide>
                <new>0</new>
                <sort>0</sort>
                <delete>1</delete>
            </enabledControls>

            <createNewRelationLinkTitle>LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:images.addFileReference</createNewRelationLinkTitle>
        </appearance>

        <behaviour>
            <allowLanguageSynchronization>1</allowLanguageSynchronization>
        </behaviour>

        <dce_load_schema>1</dce_load_schema>
        <dce_get_fal_objects>1</dce_get_fal_objects>
    </config>
    ';
    echo 'UPDATE tx_dce_domain_model_dcefield SET configuration=\'' . htmlentities($configuration, ENT_QUOTES | ENT_HTML5) . '\' WHERE variable=\'' . $fieldName . '\' AND parent_dce=' . str_replace('dce_dceuid', '', $CType) . ';' . chr(10);
}

现在,我们需要将 CSV 与代码结合起来:

$csv = 'image_1.jpg;82
typo3_box.jpg;904';
process($csv, 'dce_dceuid2', 'image');

不会改变任何东西,而只会打印出必要的 SQL 查询,这些查询可以被审查、复制和触发。

于 2021-08-18T15:28:53.500 回答
0

谢谢大家的这些详细解释。

但是我们找到了另一种解决方法。在分析问题时,图像的旧配置具有字段名称,<fieldname>{$bannerimage}</fieldname>并且在数据库中sys_file_reference表的字段名称包含与'{$bannerimage}

我们为解决这个问题所做的工作是:

将映像配置更新为最新的 conf,然后将其替换<fieldname>{$variable}</fieldname><fieldname>bannerimage</fieldname> DB 中的配置也是如此。字段名从更改{$bannerimage}bannerimage这解决了所有问题而不会丢失图像。

于 2021-08-19T08:21:50.793 回答