- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个扩展,它允许在 TYPO3 实例的前端和后端上传文件。上传在两个 View 中都有效,但如果管理员想在 ListView 中删除后端的上传,则不会删除位于网络服务器硬盘上的“物理”文件,只会删除 sys_file_reference 记录。
是否有可能告诉 tca 在删除上传记录的情况下也应该删除相关文件?我也尝试使用以下代码实现一个插槽,但没有任何 react :
ext_localconf.php:
\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\SignalSlot\\Dispatcher')->connect(
'TYPO3\CMS\Extbase\Persistence\Generic\Backend',
'afterRemoveObject',
'Kmi\feupload\Slots\MyAfterRemoveObjectSlot',
'myAfterRemoveObjectMethod'
);
namespace Kmi\feupload\Slots;
class MyAfterRemoveObjectSlot {
public function myAfterRemoveObjectMethod($object) {
// do something
\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($object);
}
}
最佳答案
不幸的是,我没有时间创建一个完整的、经过测试的答案 ATM,但我正在整理所需的步骤,并希望您能找到解决方案并完成我的答案。
通过 TCEFORM 完成的每个操作都使用 DataHandler(以前称为 TCEmain)保存。 DataHandler 有许多钩子(Hook)。我假设您的模型“上传”具有属性 file
类型(或扩展)\TYPO3\CMS\Extbase\Domain\Model\FileReference
.
TCEFORM 中的文件引用作为 IRRE 元素添加。因此,当您删除文件引用并保存 Upload 对象时,以下数据(以及其他数据)被发送到 DataHandler:
cmd[sys_file_reference][15011][delete]=1
processCmdmap_deleteAction
钩这个。
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processCmdmapClass']['your_extension'] = 'My\\Extension\\Hook\\DataHandler';
<?php
namespace My\Extension\Hook
class DataHandler {
/**
* @param string $table
* @param int $id
* @param array $recordToDelete
* @param $parentObject \TYPO3\CMS\Core\DataHandling\DataHandler
*/
public function processCmdmap_deleteAction($table, $id, $recordToDelete, $parentObject) {
if (array_key_exists('tx_myext_domain_model_upload', $parentObject->datamap)) {
// Parent record of record to delete is of type "tx_myext_domain_model_upload"
if ($table === 'sys_file_reference' && is_integer($id)) {
// A file reference was requested to delete
// Get an instance of the ResourceFactory
/** @var $resourceFactory \TYPO3\CMS\Core\Resource\ResourceFactory */
$resourceFactory = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Resource\\ResourceFactory');
// We get the FileReference object for the given id
$fileReferenceObject = $resourceFactory->getFileReferenceObject($id);
// Delete the original file of the file reference
$fileWasDeleted = $fileReferenceObject->getOriginalFile()->delete();
// @TODO throw a warning if $fileWasDeleted is false
}
}
}
}
关于typo3 - 删除 sys_file_reference 时删除文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29749690/
我正在编写一个扩展,它允许在 TYPO3 实例的前端和后端上传文件。上传在两个 View 中都有效,但如果管理员想在 ListView 中删除后端的上传,则不会删除位于网络服务器硬盘上的“物理”文件,
我使用自己的扩展在表“sys_file_reference”中构建了一个名为“tx_references_special”的新字段。在typo3后端的“textpic”内容元素中,我可以通过在BE中的
各位! 在一个新的 TYPO3 8.7.10 站点中,我刚刚使用 Extension Builder 创建了一个新的扩展。在那个扩展中,有一个模型对象(“FurnitureFamily”)和一个文件类
我是一名优秀的程序员,十分优秀!