我想在成员名称中的文件管理器中分离注册成员的目录

I want to separate directory of register member in filemanager within member name

我的问题是文件管理器显示目录文件夹中的所有图像,这是违反政策的,因为 reg.成员可以看到目录文件夹的所有图像,所以我想解决这个问题。

我想尝试用会员名建立一个目录,上传照片到那个目录,只给那个会员显示。

我的opencart版本是2.1.0.2

显然,如果文件管理器显示在前端,则意味着您已经将其文件从各自的管理文件夹复制到目录文件夹。

默认文件管理器代码是为管理员编写的,因此它显示所有文件,但对于您的成员,您必须添加条件,以便他们只能访问允许的文件夹,就像您说的那样。
为此,请编辑您的 catalog > controller > common > filemanager.php 文件并搜索此代码

if (isset($this->request->get['directory'])) {
    $directory = rtrim(DIR_IMAGE . 'catalog/' . str_replace(array('../', '..\', '..'), '', $this->request->get['directory']), '/');
} else {
    $directory = DIR_IMAGE . 'catalog';
}

$directory 变量负责显示这些文件夹。所以更新后你可以限制你的成员。
现在你说的是,基于名称会很好,但我建议名称和成员 ID 组合会很好,因为相同的名称会导致错误!!
现在您必须获取存储这些信息的当前登录会员表单 table 的详细信息。喜欢

$memberDetails = $this->db->query("your query")->row;
//Assuming $memberDetails have min 2 indexes -> ['id', 'name']

因此您的 filemanager.php 更新代码将是

if (isset($this->request->get['directory'])) {
    $directory = rtrim(DIR_IMAGE . 'catalog/' . $memberDetails['id'] . $memberDetails['name'] . '/' . str_replace(array('../', '..\', '..'), '', $this->request->get['directory']), '/');
} else {
    $directory = DIR_IMAGE . 'catalog'. $memberDetails['id'] . $memberDetails['name'];
}
//added member details after catalog folder.

这样你也可以添加上传和删除的条件

注意 - 未测试但会起作用:)

好的,我得到解决方案

在 filemanager.tpl

中设置变量

$('#button-upload').on('click', 函数() { .. var user_id='session->data['user_id']?>'; ..

在 ControllerCommonFileManager 中

我编辑上传功能

public 函数上传() {

    if(!file_exists(DIR_IMAGE . 'catalog/user/' . $this->session->data['user_id']))
        mkdir(DIR_IMAGE . 'catalog/user/' . $this->session->data['user_id'] , 0777);
    $path = DIR_IMAGE . 'catalog/user/' . $this->session->data['user_id'];

    $this->load->language('common/filemanager');

    $json = array();

    /* // Check user has permission
    if (!$this->user->hasPermission('modify', 'common/filemanager')) {
        $json['error'] = $this->language->get('error_permission');
    } */

    // Make sure we have the correct directory
    if (isset($this->request->get['directory'])) {
        $directory = rtrim(DIR_IMAGE . 'catalog/user/' . str_replace(array('../', '..\', '..'), '', $this->request->get['directory']), '/');
    } else {
        $directory = DIR_IMAGE . 'catalog';
    }
    $directory = $path;

    // Check its a directory
    if (!is_dir($directory)) {
        $json['error'] = $this->language->get('error_directory');
    }

    if (!$json) {
        if (!empty($this->request->files['file']['name']) && is_file($this->request->files['file']['tmp_name'])) {
            // Sanitize the filename
            $filename = basename(html_entity_decode($this->request->files['file']['name'], ENT_QUOTES, 'UTF-8'));

            // Validate the filename length
            if ((utf8_strlen($filename) < 3) || (utf8_strlen($filename) > 255)) {
                $json['error'] = $this->language->get('error_filename');
            }

            // Allowed file extension types
            $allowed = array(
                'jpg',
                'jpeg',
                'gif',
                'png'
            );

            if (!in_array(utf8_strtolower(utf8_substr(strrchr($filename, '.'), 1)), $allowed)) {
                $json['error'] = $this->language->get('error_filetype');
            }

            // Allowed file mime types
            $allowed = array(
                'image/jpeg',
                'image/pjpeg',
                'image/png',
                'image/x-png',
                'image/gif'
            );

            if (!in_array($this->request->files['file']['type'], $allowed)) {
                $json['error'] = $this->language->get('error_filetype');
            }

            // Check to see if any PHP files are trying to be uploaded
            $content = file_get_contents($this->request->files['file']['tmp_name']);

            if (preg_match('/\<\?php/i', $content)) {
                $json['error'] = $this->language->get('error_filetype');
            }

            // Return any upload error
            if ($this->request->files['file']['error'] != UPLOAD_ERR_OK) {
                $json['error'] = $this->language->get('error_upload_' . $this->request->files['file']['error']);
            }
        } else {
            $json['error'] = $this->language->get('error_upload');
        }
    }

    if (!$json) {
        move_uploaded_file($this->request->files['file']['tmp_name'], $directory . '/' . $filename);

        $json['success'] = $this->language->get('text_uploaded');
    }

    $this->response->addHeader('Content-Type: application/json');
    $this->response->setOutput(json_encode($json));
}