在管理控制器中上传 CSV 文件 - 自定义模块

Upload CSV File in Admin Controller - Custom module

我正在尝试创建一个带有 csv 文件上传器的管理控制器来像处理数组一样处理它。

我找不到有效的方法,我尝试使用 $this-> fields_form,但没有显示任何内容。

然后我用一个输入文件做了一个 tpl 文件,在 initContent 中调用,但我不知道如何在控制器中检索我的文件。

由于 csv 文件,我需要创建多个不同的 类 对象。

有人有一些可以帮助我的文档吗,我已经搜索过 prestashop dev doc、stack overflow 等,但我没有看到任何可以帮助我的东西(也许我没有搜索好方法?)

等待您的帮助!

更新:

更新:

刚刚找到上传文件的方法,但它是以 .tmp 格式上传的,无法作为 csv 文件处理,我如何将 tmp 文件转换为 csv 文件?

这是我的代码:

public function __construct()
    {
        parent::__construct();
        // Base
        $this->bootstrap = true; // use Bootstrap CSS
        $this->fields_options = array(
            'general' => array(
                'title' => $this->l('Upload DB'),
                'fields' => array(
                    'DB_BULB_DATA' => array(
                        'title' => $this->l('Upload DB'),
                        'type' => 'file',
                        'name' => 'DB_BULB_DATA'
                    ),
                ),
                'submit' => array('title' => $this->trans('Save', array(), 'Admin.Actions')),
            ),
        );
        if(isset($_FILES['DB_BULB_DATA'])){
            $headers = fgetcsv(fopen($_FILES['DB_BULB_DATA']['tmp_name'], "r+"));
            print_r($headers);
        }
    }

没有文件类型名称csvfile,需要使用filed类型文件,上传后hadel csv文件,检查文件扩展名,然后处理数据。

只是想知道怎么做,我觉得很傻

我只需要将我的 tmp 文件保存为 csv 文件就可以使用了。

完整代码如下:

    <?php


class Admin<YourModuleName>Upload<YourThings>DatabaseController extends ModuleAdminController
{
    public function __construct()
    {
        parent::__construct();
        // Base
        $this->bootstrap = true; // use Bootstrap CSS
        $this->name = "Admin<YourModuleName>Upload<YourThings>Database";
        $this->fields_options = array(
            'general' => array(
                'title' => $this->l('Upload DB'),
                'fields' => array(
                    'DB_<YourThings>_DATA' => array(
                        'title' => $this->l('Upload DB'),
                        'type' => 'file',
                        'name' => 'DB_<YourThings>_DATA'
                    ),
                ),
                'submit' => array('title' => $this->l('Save')),
            ),
        );
    }

    public function initContent()
    {
        parent::initContent();
        unset($_FILES);
    }

    public function postProcess()

    {
        $fileName = '<YourThings>Db.csv';
        if (!file_exists(_PS_MODULE_DIR_ . '<YourModuleName>/upload/' . $fileName)) {
            if (isset($_FILES['DB_<YourThings>_DATA'])) {
                $tmpPath = $_FILES['DB_<YourThings>_DATA']["tmp_name"];
                move_uploaded_file($tmpPath, _PS_MODULE_DIR_ . '<YourModuleName>/upload/' . $fileName);
                $uploadCsv = file(_PS_MODULE_DIR_ . '<YourModuleName>/upload/' . $fileName, FILE_SKIP_EMPTY_LINES);
                $Db = array_map("str_getcsv", $uploadCsv, array_fill(0, count($uploadCsv), ';'));
                $keys = array_shift($Db);
                foreach ($Db as $i => $row) {
                    $Db[$i] = array_combine($keys, $row);
                }
                print_r($Db);
            }
        } else {
            $uploadCsv = file(_PS_MODULE_DIR_ . '<YourModuleName>/upload/' . $fileName, FILE_SKIP_EMPTY_LINES);
            $Db = array_map("str_getcsv", $uploadCsv, array_fill(0, count($uploadCsv), ';'));
            $keys = array_shift($Db);
            foreach ($Db as $i => $row) {
                $Db[$i] = array_combine($keys, $row);
            }
            print_r($Db);
        }
        unset($_FILES['DB_<YourThings>_DATA']);
    }
}