问题描述
我有一个带有文件上传字段的网络表单。我需要做两件事之一。要么将文件上传到私有区域内的子文件夹中,要么为用户上传的文件名添加前缀。用户可以上传多个文件。网络表单编辑器允许您“重命名”文件并为此使用令牌,但我看不到任何保留原始文件名的方法。我可以破解 WebformManagedFileBase.PHP 中的 getFileDestinationUri() 来做我想做的事,但显然我宁愿不这样做。我错过了什么吗?
解决方法
事实证明,您可以使用 drupal form alter hook 来更改目的地。我曾想过这一点,但觉得不太可能奏效。确实如此。
以下是我的代码解决方案:(我可能缺少容器类型)
function _mymodule_fix_elements(&$elements) {
foreach ($elements as $key => &$element) {
if (strpos($key,'#') !== 0) {
if (is_array($element)) {
if (isset($element['#type'])) {
if (($element['#type'] == 'fieldset') ||
($element['#type'] == 'webform_flexbox') ||
($element['#type'] == 'container')) {
_mymodule_fix_elements($element);
} else if ($element['#type'] == 'managed_file') {
$pattern = $element['#upload_location'];
if (strpos($pattern,'private:') === 0) {
$element['#upload_location'] = $pattern . '/' . $key;
}
}
}
}
}
}
}
function mymodule_form_alter(&$form,&$form_state,$id) {
if (strpos($id,'webform_') === 0) {
_mymodule_fix_elements($form['elements']);
}
}