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 !

Share this post


Link to post
Share on other sites

  • 2 weeks later...

Je peux faire un template bien sur avec un formulaire, pas de soucis. Mais ce que je souhaite c'est apprendre à faire fonctionner helper form. J'y arrive avec des données textuel par exemple, mais pas avec des files

Edited by Vico_b (see edit history)

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Ok, je ne savais pas pour la version de php merci

Nikel l'objet, je fais ça au sein de ma fonction renderForm ou c'est à l'exécution ? (getContent)

Merci pour ce step up :)

Share this post


Link to post
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

Share this post


Link to post
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
 Share

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More