Php ExpressionEngine SAEF文件上载到特定目录

Php ExpressionEngine SAEF文件上载到特定目录,php,expressionengine,Php,Expressionengine,我正在使用ExpressionEngine 2.x并尝试为前端用户创建一个文件上载表单,其中上载的文件将存储在以登录用户ID命名的文件夹中。我们可以使用saef或安全钳来实现这一点吗。如果没有,还有其他选择 SafeCracker与fieldtype捆绑在一起,用于创建文件上载字段。fieldtype将利用您在控制面板中创建的任何字段 默认情况下,上载的所有文件将存储在文件上载目录首选项中指定的目录中 为了将SafeCracker文件上传到以登录用户ID命名的子文件夹中,您可以开发一个自定义附加

我正在使用ExpressionEngine 2.x并尝试为前端用户创建一个文件上载表单,其中上载的文件将存储在以登录用户ID命名的文件夹中。我们可以使用saef或安全钳来实现这一点吗。如果没有,还有其他选择

SafeCracker与fieldtype捆绑在一起,用于创建文件上载字段。fieldtype将利用您在控制面板中创建的任何字段

默认情况下,上载的所有文件将存储在文件上载目录首选项中指定的目录中

为了将SafeCracker文件上传到以登录用户ID命名的子文件夹中,您可以开发一个自定义附加组件,或者利用一个--如果存在的话--来满足您的需要


安全钳的另一种选择是使用安全钳。但是,即使这样做,您的文件上载仍将全部保存到相同的文件上载目标,并且不会嵌套在子文件夹中。

在这种情况下,因为SafeCracker没有任何扩展挂钩,而且据我所知,没有允许这种特定行为的附加组件,我会复制一份SafeCracker文件,并对其进行修改以添加此功能。否则,您只是从零开始使用自己的“上载文件”字段类型

您需要查看ft.safecracker_file.php中的第148行,并添加少量代码以检查是否存在具有登录用户的屏幕名称的目录(),如果不存在,则创建该目录,然后将该目录名称附加到上载路径:

$data = $this->EE->filemanager->upload_file($this->settings['safecracker_upload_dir'].'/'.$users_directory_name, $field_name);

我想这应该能让你开始了。

谢谢你,但你的回答对我没有帮助。如果我是一个附加组件,我就不会问这个问题。我们是否可以修改safecracker文件,让它查找safecracker标记中指定的上载目录。当存在允许您扩展ExpressionEngine功能的文件时,为什么要破解safecracker的代码或其捆绑字段类型?要实现所需的功能,最好的解决方案是编写插件或字段类型。让你开始吧。只是有点困惑这是怎么回事。你的意思是只为文件字段编写插件吗。假设我为文件上传创建了一个插件,它接受文件路径作为标记属性<代码>{exp:fileupload property='/path/'}这将如何与saef交互。这将是基于提交点击。这似乎是明智的解决方案。我会试试的,这不行。上载图像时,会出现错误
您没有指定任何允许的文件类型。您尝试上载的文件类型是不允许的。
您尝试上载什么类型的文件?您是否已启用XSS筛选?我试图上载gif文件。这就是我在测试
$data=$This->EE->sc_filemanager->upload_file($This->settings['safecracker_upload_dir']./test/,$field_name)时所做的工作。我在测试之前创建了测试文件夹。但它给了我文件类型错误。如果我删除了
'./test/'
,那么它就会工作。抱歉,我的错误
$this->settings['safecracker\u upload\u dir']
不是目录路径,而是EE中预定义上传目录的整数ID,这是Filemanager类“
upload\u file
函数所需的。您可能需要深入研究并为此编写自己的字段类型。