Jump to content

Import de fichiers joints


Recommended Posts

Bonjour chers marchands et amis codeurs,

J'ai un problème avec l'import de fichiers attachés aux produits. En effet, j'ai ajouté plusieurs fichiers pdf avec le backoffice qui se trouvent maintenant dans le dossier download à la racine de mon site.

Mais je ne parviens pas à les associer automatiquement avec mes produits lors de l'import de ces derniers. J'ai bien vu qu'il y avait une colonne "URL du fichier", j'y ai donc rentré l'URL "https://nom_de_ma_boutique/download/nom_du_fichier" mais cela ne fonctionne pas. J'ai compris que Prestashop chiffrait le nom du fichier mais il faut bien que j'utilise le vrai nom du fichier pour l'importation... Comment faire ? Est-ce que cette colonne n'est pas fonctionnelle ou est-ce que je m'y prends mal ?

Pour info, j'utilise la dernière version de Prestashop (1.7.5)

Merci d'avance de votre aide !

PS : Si vous souhaitez avoir plus d'informations sur ma boutique, n'hésitez pas à me le faire savoir, j'ai peut-être été trop concis...

Link to comment
Share on other sites

Bonsoir,

Merci de prendre le temps de m'aider.

Il me semble que c'est ce que j'ai fais... les fichiers sont localisés dans le dossier download, j'ai donc écrit l'url exactement comme pour les images mais avec le dossier download. Par contre, les noms des fichiers sont chiffrés, mais je ne peux pas écrire le chiffrage dans l'url (ça n'a pas de sens pour le excel).

Mais je pense que j'ai trouvé le problème : la colonne URL du fichier est, je pense, destinée à l'url du fichier du produit virtuel (si la ligne du produit que j'importe ajoute un produit de type virtuel). Donc, rien à voir avec ce que je veux faire. Je pense que je vais partir sur un peu de codage dans le AdminImportController, puisque ça a l'air d'être encore une fonction non gérée par Prestashop...

Edited by Vintelec (see edit history)
Link to comment
Share on other sites

@Gerardo

Qu'est ce que tu racontes? C'est très gentil de vouloir aider, mais il faut savoir de ce dont tu parles

 

@Vintelec

Non l'url doit être accéssible par l'outils d'import en amont et le répertoire download est PAR DESIGN interdit d'être lu pour des raisons de sécurité.

Tu dois mettre tes fichiers dans un répertoire "public" pour que l'import puisse les "injecter"

Link to comment
Share on other sites

Non, je pense que vous vous trompez, j'ai déjà essayé cette méthode, sans succès.

Je pense que Prestashop, comme je l'ai dis précédemment, n'implémente tout simplement pas le processus d'association fichiers/produits (dans le cas des fichiers joints). En effet, la fonction qui permet cette association n'est pas utilisée dans le code d'import (AdminImportController.php). J'ai donc codé moi-même cette fonctionnalité :

A rajouter dans classes/Attachment.php, n'importe où entre deux fonctions :

     /**
     * Get attachment ID by name.
     *
     * @param string $name Attachment Name
     *
     * @return int Attachment ID
     */
    public static function getAttachmentIDByName($name)
    {
        return (int) Db::getInstance()->getValue('
            SELECT id_attachment
            FROM ' . _DB_PREFIX_ . 'attachment
            WHERE file_name = "' . $name . '"',false
        );
    }

et dans controllers/AdminImportController.php, dans la fonction productImportOne, après la ligne 1679 :

"AdminImportController::arrayWalk($info, array('AdminImportController', 'fillInfo'), $product);"

        //Product attachments
        if(!empty($info['file_url']))
        {
            $attachments = explode(",",$info['file_url']);
            $attachments_ids=array();
            foreach($attachments as $attachment)
                array_push($attachments_ids,Attachment::getAttachmentIDByName($attachment));
            Attachment::attachToProduct($info['id'],$attachments_ids);
        }

(on peut mettre le code plus loin mais attention de ne pas le mettre après le product->add(), sinon c'est trop tard, le produit a été ajouté !)

Voilà, et avec ça, pour moi ça marche niquel ! A condition bien sûr d'avoir ajouté le fichier dans le backoffice dans la catégorie "Fichiers" au préalable !

Merci quand même de m'avoir répondu 😀

Prestashop'ment vôtre.

Edited by Vintelec (see edit history)
Link to comment
Share on other sites

  • 1 year later...

Bonjour,

Cela m'intéresse beaucoup. J'ai intégré le code dans les fichiers correspondants.

Par contre dans le fichier d'importation, quelle colonne dans la liste déroulante lors de l'importation en BO doit correspondre à l'url du fichier qui se trouve dans download ?

J'ai essayé avec la colonne "url du fichier" mais ça n'a pas fonctionné.

En vous remerciant.

Link to comment
Share on other sites

  • 7 months later...

Désolé @Guillaume77, je n'avais pas vu votre réponse.

J'ai laissé de côté l'importation de fichiers depuis quelques temps donc mes souvenirs ne sont plus très frais.
Par contre, je suis sûr que cela marchait à l'époque avec ces modifications 🤔 ...
Mais je n'ai pas précisé qu'il faut taper le nom du fichier original (donc pas le nom chiffré dans le dossier download !) comme ceci :

"[nom_du_fichier].[extension]"

Ou s'il y en a plusieurs, on les sépare par une virgule.
Donc si on veut joindre les fichiers "datasheet.pdf" et "datasheet_bis.pdf" au produit, on choisit la colonne "url du fichier" et on entre :

datasheet.pdf, datasheet_bis.pdf

Encore une fois, on parle ici de fichiers joints/attachés à un produit et non pas à un fichier de produit virtuel ! J'espère qu'on parle bien de la même chose 😅

Si c'est encore d'actualité pour vous et que vous rencontrez des soucis, je reste à votre écoute !

Edited by Vintelec (see edit history)
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...