Jump to content

Formulaire d'upload custom ne fonctionne pas


Recommended Posts

Bonjour à tous,

Je suis en train de me former à la conception de modules, la j'essaye de faire (refaire) un cas classique ou on pourrait uploader un fichier vidéo.

Le module s'installe, ma base de donnée est créée, mais le formulaire n'est pas bon et rien n'est envoyé/uploadé

Voici le bout de code incriminé 

 

  public function getContent()
    {
        /**
         * If values have been submitted in the form, process.
         */
        if (((bool)Tools::isSubmit('submitDplus_videoproductModule')) == true) {
            //file upload code
            if (isset($_FILES['file_url']))
            {
                $target_dir = _PS_UPLOAD_DIR_;
                $target_file = $target_dir . basename($_FILES['file_url']["name"]);
                $uploadOk = 1;
                $imageFileType = pathinfo($target_file, PATHINFO_EXTENSION);
                
                // Check if file already exists
                if (file_exists($target_file)) {
                    echo "Sorry, file already exists.";
                    $uploadOk = 0;
                }
                // Allow certain file formats
                if($imageFileType != "mp4" ) {
                    echo "Seul le format mp4 sans piste audio est accepté";
                    $uploadOk = 0;
                }
                // Check if $uploadOk is set to 0 by an error
                if ($uploadOk == 0) {
                    echo "Sorry, your file was not uploaded.";
                }
                else {
                    if (move_uploaded_file($_FILES['file_url']["tmp_name"], $target_file))
                    {
                        echo "The file ". basename($_FILES['file_url']["name"]). " has been uploaded.";
                        $file_location = basename($_FILES['file_url']["name"]);
                        Db::getInstance()->insert(_DB_PREFIX_ . 'dplus_videoproduct', array(
                            'id_product' => (int)(Tools::getValue('DPLUS_VIDEOPRODUCT_ID_PRODUCT')),
                            'video_url' => $file_location,
                        ));
                    }
                    else {
                        echo "Sorry, there was an error uploading your file.";
                    }
                }
            }
            
        }
        $this->context->smarty->assign('module_dir', $this->_path);

        $output = $this->context->smarty->fetch($this->local_path.'views/templates/admin/configure.tpl');

        return $output.$this->renderForm();
    }

    /**
     * Create the form that will be displayed in the configuration of your module.
     */
    protected function renderForm()
    {
        $helper = new HelperForm();

        $helper->show_toolbar = false;
        $helper->table = $this->table;
        $helper->module = $this;
        $helper->default_form_language = $this->context->language->id;
        $helper->allow_employee_form_lang = Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG', 0);

        $helper->identifier = $this->identifier;
        $helper->submit_action = 'submitDplus_videoproductModule';
        $helper->currentIndex = $this->context->link->getAdminLink('AdminModules', false)
            .'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name;
        $helper->token = Tools::getAdminTokenLite('AdminModules');


        return $helper->generateForm(array($this->getConfigForm()));
    }

    /**
     * Create the structure of your form.
     */
    protected function getConfigForm()
    {
        return array(
            'form' => array(
                'legend' => array(
                'title' => $this->l('Settings'),
                'icon' => 'icon-cogs',
                ),
                'input' => array(
                    array(
                        'col' => 1,
                        'type' => 'text',
                        'desc' => $this->l('ID of the product you want to upload a video for'),
                        'name' => 'DPLUS_VIDEOPRODUCT_ID_PRODUCT',
                        'label' => $this->l('id product'),
                    ),
                    array(
                        'type' => 'file',
                        'desc' => $this->l('Post a video from the product you chosed'),
                        'name' => 'DPLUS_VIDEOPRODUCT_VIDEO',
                        'label' => $this->l('video'),
                    ),
                ),
                'submit' => array(
                    'title' => $this->l('Send'),
                    'name' => 'submitDplus_videoproductModule'
                ),
            ),
        );
    }

J'ai une erreur au niveau de la ligne `'id_product' => (int)(Tools::getValue('DPLUS_VIDEOPRODUCT_ID_PRODUCT')),`

Lorsque je vais sur la page de configuration (en dev mod) il me met aussitot une l'erreur suivante :

Quote

Undefined index: DPLUS_VIDEOPRODUCT_ID_PRODUCT

J'ai du mal à comprendre, les champs du formulaire de sont pas accessible depuis la fonction getContent ?

Et surtout, pourquoi mon fichier ne s'upload pas ? C'est lié à la même erreur ?

 

Merci d'avance pour votre aide !

Link to comment
Share on other sites

  • 2 weeks later...

Bonjour,

La version 7.3 de php n'est pas officiellement compatible avec Prestashop ( cf. https://github.com/PrestaShop/PrestaShop/issues/12461 )
Idéalement il faudrait déjà mieux utiliser php 7.2

Pour gérer l'upload tu peux utiliser la classe native

$uploader = new Uploader($name); //$name est à remplacer par le nom du champ 
$file = $uploader->setAcceptTypes('jpg') // Extensions supportées
->setMaxSize(Uploader::DEFAULT_MAX_SIZE) // Taille max
->setSavePath( _PS_MODULE_DIR_.$this->name.'/views/img/logo') //Chemin d'envoi
->process();


Cordialement,

  • Like 1
Link to comment
Share on other sites

7 minutes ago, hhennes said:

Dans la fonction getContent après la vérification du isSubmit ;)

Au passage à cet endroit tu peut vérifier si ton formulaire envoie bien des données de fichier
via le code suivant


dump($_FILES);

 

Nice ça fonctionne ^^

Merci beaucoup

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...