【发布时间】:2011-06-08 22:11:12
【问题描述】:
我正在使用表达式引擎 2.x 并尝试为前端用户创建文件上传表单,上传的文件将存储在以登录用户 ID 命名的文件夹中。我们可以使用 saef 或 safecracker 来做到这一点吗?如果没有,还有其他选择。
【问题讨论】:
标签: php expressionengine
我正在使用表达式引擎 2.x 并尝试为前端用户创建文件上传表单,上传的文件将存储在以登录用户 ID 命名的文件夹中。我们可以使用 saef 或 safecracker 来做到这一点吗?如果没有,还有其他选择。
【问题讨论】:
标签: php expressionengine
SafeCracker 捆绑了一个字段类型SafeCracker File,用于创建文件上传字段。字段类型利用您在控制面板中创建的任何 File Upload Directories。
默认情况下,所有上传的文件都将存储在文件上传目录首选项中指定的目录中。
为了将 SafeCracker 文件上传到以登录用户 ID 命名的子文件夹,您可以开发自定义插件,或利用 compatible fieldtype that works with SafeCracker -- 如果存在满足您的需求。
SafeCracker 的替代方法是使用Solspace Freeform Module。但是,即使这样做,您的文件上传仍将全部保存到同一个文件上传目标,而不是嵌套在子文件夹中。
【讨论】:
{exp:fileupload property='/path/'} 那将如何与 saef 交互。会不会基于提交点击。
在这种情况下,由于 SafeCracker 没有任何扩展挂钩,并且我知道没有允许此特定行为的附加组件,我会制作 SafeCracker 文件的副本并对其进行更改以添加此功能。否则,您只是从头开始使用自己的“上传文件”字段类型。
您需要查看 ft.safecracker_file.php 中的第 148 行,并添加一些代码来检查是否存在具有登录用户的屏幕名称的目录或您有什么 (@987654321 @),如果没有,则创建它,然后将该目录名称附加到上传路径:
$data = $this->EE->filemanager->upload_file($this->settings['safecracker_upload_dir'].'/'.$users_directory_name, $field_name);
我认为这应该让你开始。
【讨论】:
You have not specified any allowed file types.The filetype you are attempting to upload is not allowed.
$data = $this->EE->sc_filemanager->upload_file($this->settings['safecracker_upload_dir'].'/test/', $field_name); 所做的。我在测试之前创建了测试文件夹。但它给了我文件类型错误。如果我删除'./test/'那么它可以工作。
$this->settings['safecracker_upload_dir'] 不是目录路径,而是 EE 中预定义上传目录的整数 ID,这是 Filemanager 类的 upload_file 函数需要的。您可能需要为此深入挖掘并编写自己的字段类型。