typo3:将internal_type=file_reference迁移到FAL

问题描述 投票:0回答:1

我有一个旧的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中不再起作用(错误:“表页中字段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'),
    ),

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

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

php typo3 filepicker
1个回答
1
投票

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

所以,FAL 的基础知识例如: 升级到FAL可以在文档中阅读。


有多种解决方案,但大多数都需要针对您的自定义扩展进行调整/配置:

1。扩展“connet://FAL 迁移”

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

2。看看EXT:新闻

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

3.大部分都是手动的

只需一点 PHP 脚本就可以处理:

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

identifier
中的
sys_file
列的形式。

<?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 查询以插入所需的 FAL 关系。

© www.soinside.com 2019 - 2024. All rights reserved.