我在 TCA 中有一个类型为 group->file 的字段,我需要根据年份将文件保存在不同的目录中。
通常,当我需要对任何字段进行 pos 处理时,我会使用 processDatamap_afterDatabaseOperations 挂钩,但它无法正常处理文件。
这就是我正在做的事情。
function processDatamap_afterDatabaseOperations ($status, $table, $id, &$fieldArray, &$reference) {
if ($table=='tx_students' && isset($fieldArray['documents'])){
$path = $_SERVER['DOCUMENT_ROOT'].'/folder/';
$folder = date('Y').'/';
$filename = date('Y-m-d').' '.$student['first_name'].' '.$student['last_name'].'.zip';
$filename = str_replace(' ','_',$filename);
if (!file_exists($path.$folder)) {
mkdir($path.$folder, 0755, true);
$fh = fopen($path.$folder.'index.html','w+');
fclose($fh);
}
rename($path.$fieldArray['documents'],$path.$folder.$filename);
$GLOBALS['TYPO3_DB']->exec_UPDATEquery($table,'uid='.$student['uid'],array('documents'=>$folder.$filename));
}
}
我正在尝试将文件名与文件夹路径一起存储在数据库中,并且在我第一次保存表单时效果很好。但是接下来的时间我得到一个错误,因为 TYPO3 找不到文件。当我尝试删除文件以及单击 x 时会发生这种情况。
这是该字段的 TCA:
'documents' => array( 'exclude' => 1, 'label' => '', 'config' => array( 'type' => 'group', 'internal_type' => 'file', 'allowed' => 'zip', 'max_size' => $GLOBALS['TYPO3_CONF_VARS']['BE']['maxFileSize'], 'uploadfolder' => 'uploads/incoming', 'show_thumbs' => 1, 'size' => 1, 'minitems' => 0, 'maxitems' => 1, ), ),
我想按年份组织这些文件,但我不知道如何在 TYPO3 中执行此操作。这是另一个钩子吗?似乎 TYPO3 正在删除某些操作的斜线之前的路径部分。
我正在使用 TYPO3 4.5 LTS。有什么建议么?