错误 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 关系。
我有一个旧的 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 关系。