错误 3:将 internal_type=file_reference 迁移到 FAL

typo3: Migrate internal_type=file_reference to FAL

我有一个旧的 typo3 网站,它使用带有以下代码的图像选择器:

    'tx_my_image' => array(
        'label' => 'Image',
        'exclude' => 1,
        'config' => array(
            'type' => 'group',
            'internal_type' => 'file_reference',
            'allowed' => 'gif,jpg,jpeg,png',
            'show_thumbs' => 1,
            'size' => 1,
            'maxitems' => 1,
            'minitems' => 0,
        )
    ),

这在 typo3 10 中不再起作用(错误:“table 页面中字段 tx_my_image 的 TCA 内部类型必须设置为“db”或“文件夹”。”)。所以我把它改成了这样:

    'tx_my_image' => array(
        'label' => 'Image',
        'exclude' => 1,
        'config' => ExtensionManagementUtility::getFileFieldTCAConfig('tx_my_image', [
            'show_thumbs' => 1,
            'size' => 1,
            'maxitems' => 1,
            'minitems' => 0
        ], 'gif,jpg,jpeg,png'),
    ),

这在后端不再抛出致命错误的意义上是有效的,但我现在的问题是所有以前选择的图像都不再找到。以前,图像的路径只是简单地存储在页面 table 中的一个字段“tx_my_image”中(这可能不是一个好主意,但当我开始维护网站时就已经这样了).

本站页面数量庞大,手动重做所有图片选择是完全不可行的。所以我的问题是,有没有一种方法可以将我的旧数据转换为新的 typo3 版本所期望的任何格式,或者更好的方法是配置表单以便它以当前形式找到数据?

“新typo3版本期望的格式”是一个文件抽象层关系,在8年前的“新版本”TYPO3 6.2(2014年3月25日发布)中引入;)

所以,FAL 的基础知识,例如Upgrading to FAL 可以在文档中阅读。


有多种解决方案,但大多数需要 adapted/configured 用于您的自定义扩展:

1.扩展“连接:// FAL迁移”

此扩展(适用于 TYPO3 6.2)可以帮助迁移到 FAL。 https://extensions.typo3.org/extension/conn_falmigration

2。看看 EXT:news

Georg 已将以前的迁移代码(用于 hist EXT:news)提取到一个额外的扩展中。查看代码可以显示必须完成哪些步骤。 https://packagist.org/packages/georgringer/news-fal-migration

3。大部分是手动的

用一点PHP脚本就可以处理:

输入数据是记录的uid和文件的路径。该路径必须采用现在用作新 table sys_file.

中的 identifier 列的形式
<?php
// each line: recordUid;pathOfFile
$csv = "1;/user_upload/test.pdf
2;/user_upload/image.jpg";

$lines = str_getcsv($csv, chr(10));
$pid = 123;

foreach ($lines as $line) {
    $row = str_getcsv($line, ';');
    $row = array_map('trim', $row);
    $uid = $row[0];
    $filePath = $row[1];
    if ($filePath && $filePath !== '""') {
        $uid = trim($uid);
        echo "INSERT INTO sys_file_reference (pid, uid_local, uid_foreign, tablenames, fieldname, table_local) VALUES($pid, (SELECT uid FROM sys_file WHERE identifier=\"" . $filePath . "\"), $uid, 'yourTable ', 'tx_my_image', 'sys_file');" . chr(10);
    }
}

这将生成 SQL-Queries 用于插入所需的 FAL 关系。