TCA に group->file タイプのフィールドがあり、年に応じて異なるディレクトリにファイルを保存する必要があります。
通常、フィールドを後処理する必要がある場合は、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));
}
}
ファイル名をフォルダーパスを使用してDBに保存しようとしていますが、フォームを初めて保存するときにうまく機能します。しかし、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で作業しています。助言がありますか?