簡體   English   中英

在管理控制器中上傳 CSV 文件 - 自定義模塊

[英]Upload CSV File in Admin Controller - Custom module

我正在嘗試創建一個帶有 csv 文件上傳器的管理控制器來像數組一樣處理它。

我找不到一種有效的方法來做到這一點,我嘗試使用 $this-> fields_form,但沒有顯示任何內容。

然后我做了一個帶有輸入文件的 tpl 文件,在 initContent 中調用,但我不知道如何在控制器中檢索我的文件。

由於 csv 文件,我需要創建我制作的不同類的多個對象。

有人有一些可以幫助我的文檔嗎,我已經搜索過 prestashop 開發文檔、堆棧溢出等,但我沒有看到任何可以幫助我的東西(也許我沒有找到好的方法?)

等待你們的幫助!

更新 :

更新 :

剛剛找到了一種上傳文件的方法,但它是作為 .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 ,您需要使用文件類型文件,然后上傳后對 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']);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM