<?php // initialize output; $output = true; // valid extensions $ext_array = array('pdf', 'PDF', 'txt', 'doc', 'docx', 'rtf', 'XLS', 'XLSX', 'xls', 'xlsx',); // create unique path for this form submission $uploadpath = 'assets/uploads/'; // you can create some logic to automatically // generate some type of folder structure here. // the path that you specify will automatically // be created by the script if it doesn't already // exist. // EXAMPLE: // this would put all file uploads into a new, // unique folder every day. // $uploadpath = 'assets/'uploads/'.date('Y-m-d').'/'; // get full path to unique folder $target_path = $modx->config['base_path'] . $uploadpath; // get uploaded file names: $submittedfiles = array_keys($_FILES); // loop through files foreach ($submittedfiles as $sf) { // Get Filename and make sure its good. $filename = basename( $_FILES[$sf]['name'] ); // Get file's extension $ext = pathinfo($filename, PATHINFO_EXTENSION); $ext = mb_strtolower($ext); // case insensitive // is the file name empty (no file uploaded) if($filename != '') { // is this the right type of file? if(in_array($ext, $ext_array)) { // clean up file name and make unique $filename = mb_strtolower($filename); // to lowercase $filename = str_replace(' ', '_', $filename); // spaces to underscores $filename = date("Y-m-d_G-i-s_") . $filename; // add date & time // full path to new file $myTarget = $target_path . $filename; // create directory to move file into if it doesn't exist mkdir($target_path, 0755, true); // is the file moved to the proper folder successfully? if(move_uploaded_file($_FILES[$sf]['tmp_name'], $myTarget)) { // set a new placeholder with the new full path (if you need it in subsequent hooks) $modx->setPlaceholder('fi.'.$sf.'_new', $myTarget); // set the permissions on the file if (!chmod($myTarget, 0644)) { /*some debug function*/ } } else { // File not uploaded $errorMsg = 'There was a problem uploading the file.'; $hook->addError($sf, $errorMsg); $output = false; // generate submission error } } else { // File type not allowed $errorMsg = 'Type of file not allowed.'; $hook->addError($sf, $errorMsg); $output = false; // generate submission error } // if no file, don't error, but return blank } else { $hook->setValue($sf, ''); } } return $output;
<div class="row clearfix"> <div class="label">Supplementary Files <span class="error">[[+fi.error.nomination_file]]</span></div> <!-- end of .label --> <div class="input"><input id="nomination_file" name="nomination_file:required" type="file" value="[[+fi.nomination_file]]" maxlength="100000" /></div> <!-- end of .input --> </div>
This question has been answered by BobRay. See the first response.
you could also try http://modx.com/extras/package/ajaxupload2
Or plain old FileUpload.
@INHERIT assets/uploads/
[[!FileUpload? &uploadTv=`UploadPath`]]
[[!FileUpload? &path=`assets/uploads/`]]
What is the type of the TV? It should be a plain text TV with default output.
You can also just supply the path property in the FileUpload tag (which will be faster) like this:
[[!FileUpload? &path=`assets/uploads/`]]
[[!FileUpload? &path=`assets/uploads/transport/`]]
I'm afraid I don't see any way to append a date to the file name without hacking the code of the snippet.
I can see why the TV didn't work for you. It's a mistake in the code. It would work if the default value of the TV contained just the path (no @INHERIT), but that would kind of defeat the purpose of using a TV.