我已经将typo3从9.5.5升级到10.4.19,DCE从2.03.x升级到2.6.2
DCE 升级后,图像上传字段配置似乎更改错误(https://nimb.ws/slTyH8)。图像不在这些字段中,并且在前端中存在图像,即缓存。
我尝试将 DCE 的旧配置更改为新配置。该领域现在还可以,但是网站已刷新,旧图像已消失。
我有200多页。所以不可能重新上传。我已经上传了我的备份,现在我处于以前的状态。
检查了安装工具,不幸的是,DCE 没有升级向导。如何在不丢失图像的情况下使其正确?
帮我!
我已经将typo3从9.5.5升级到10.4.19,DCE从2.03.x升级到2.6.2
DCE 升级后,图像上传字段配置似乎更改错误(https://nimb.ws/slTyH8)。图像不在这些字段中,并且在前端中存在图像,即缓存。
我尝试将 DCE 的旧配置更改为新配置。该领域现在还可以,但是网站已刷新,旧图像已消失。
我有200多页。所以不可能重新上传。我已经上传了我的备份,现在我处于以前的状态。
检查了安装工具,不幸的是,DCE 没有升级向导。如何在不丢失图像的情况下使其正确?
帮我!
这是从旧图像处理到基于 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。
sys_file_reference并更新tt_content现在我们必须管理对数据库的更改:
sys_file在 DCE 和-entries之间创建 FAL 关系(以 -records 的形式sys_file_reference)pi_flexform现有 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 查询,这些查询可以被审查、复制和触发。
谢谢大家的这些详细解释。
但是我们找到了另一种解决方法。在分析问题时,图像的旧配置具有字段名称,<fieldname>{$bannerimage}</fieldname>并且在数据库中sys_file_reference表的字段名称包含与'{$bannerimage}
我们为解决这个问题所做的工作是:
将映像配置更新为最新的 conf,然后将其替换<fieldname>{$variable}</fieldname>为<fieldname>bannerimage</fieldname>
DB 中的配置也是如此。字段名从更改{$bannerimage}为bannerimage这解决了所有问题而不会丢失图像。