Plus d'images produits sur version 6.0.2

Bonsoir tout le monde,

Je viens de passer de la version 5 à la version 6.0.2 et je me rend compte que je n’ai plus d’images de mes produits…

j’ai testé la fonction : PRODUCT_USE_OLD_PATH_FOR_PHOTO et joué avec 0 et 1 mais cela ne change rien… quelqu’un aurait une idée ?

Cordialement

Bonjour
Oui j’ai constaté aussi. Maintenant il va falloir passer un jour sur le nouveau standard. On ne va pas maintenir cet ancien chemin longtemps.
Du coup pour mes clients anciens j’ai mis au point une moulinette pour mettre les images comme il faut. Je vais essayer de la mettre au propre.
@+

Bonjour :happy:
Voici de mon coté ce que j’ai fait afin de déplacer de l’ancien système de dossier au nouveau les photos produits :
https://github.com/Dolibarr/dolibarr/issues/7379#issuecomment-332497142

Bonjour philazerty et dolibarr95,

Merci pour vos deux propositions, dolibarr95 j’ai pris note de tes modifications, c’est un peu trop hard pour moi dans l’immédiat car j’utilise dolibarr en prod… je vais attendre encore un peu voir si philazerty me propose une solution plus « propre » mais dans tout les cas merci pour ta proposition.

Cordialement

Je vais essayer de m’y coller d’ici fin de semaine et de sortir un truc propre voir l’ajouter dans l’outil de migration v6

@dolibarr95 : on a la même méthode à part que j’ai fait un outil passe partout.

@+

:happy: oui effectivement ma version est un peu limitée :tongue:

Bonjour,

@dolibarr95
J’ai le même problème que vous après avoir fait une migration de la version 3.8.4 à la version 6.0.2. Plus d’images sur les produits…
Quand j’exectue le script présent sur Github, j’ai une erreur « Cette page ne fonctionne pas - HTTP ERROR 500 »

Je ne comprends pas d’où l’erreur peut venir, j’ai modifié le chemin et vérifier les droits sur le fichiers.

@philazerty : Ou en êtes vous dans le développement de votre « moulinette » ?

Merci beaucoup

Salut
Pour être honnête, pas eu le temps de m’y coller. Elle est restée en l’état comme pas eu besoin de nouveau.
@+

Bonjour,

Votre « moulinette » est un script à exécuter ? Est il possible de le joindre svp ?
J’ai 1383 images avec les version miniatures (_small / _mini), donc pas forcement envie de le faire à la main.

Merci

Bonjour :happy:
Le préfixe de ta table est llx_ ?
Peux tu me dire ce que dit le error_log ?

Sans oublier d’ajouter la configuration en haut de page du type :

include('../conf/conf.php');//chemin vers le fichier conf.php
$db = new mysqli($dolibarr_main_db_host, $dolibarr_main_db_user, $dolibarr_main_db_pass, $dolibarr_main_db_name);
if ($db->connect_errno) {
    printf("Échec de la connexion : %s\n", $db->connect_error.'<br>');
    die();
}
1 « J'aime »

Bonjour,

En ajoutant le bouton de code cela fonctionne parfaitement.
Il faut juste changer les chemins pour le fichier de conf.php ‹ /home/serveur/dossierdolibarr/htdocs/conf/conf.php › et le dossier produit ‹ /home/serveur/dossierdolibarr/dolibarr_documents/produit/ ›

Pour connaitre le chemin absolu de votre serveur

<?php echo $_SERVER['SCRIPT_FILENAME']; ?\> Merci beaucoup pour votre aide. ;) ---- [code] <?php include('/home/serveur/dossierdolibarr/htdocs/conf/conf.php');//chemin vers le fichier conf.php $db = new mysqli($dolibarr_main_db_host, $dolibarr_main_db_user, $dolibarr_main_db_pass, $dolibarr_main_db_name); if ($db->connect_errno) { printf("Échec de la connexion : %s\n", $db->connect_error.'
'); die(); } $dir = '/home/serveur/dossierdolibarr/dolibarr_documents/produit/';//old path for($i=0;$i<10;$i++){//first level of directory (eg /home/server/data/produit/1) for($e=0;$e<10;$e++){//second level of directory (eg /home/server/data/produit/1/8) $idliste = scandir($dir.$i.'/'.$e.'/');//list of all in this directory foreach($idliste as $id){//list files and directories inside $dir.$i.'/'.$e.'/' if(is_numeric($id)){ //third level of directory (eg /home/server/data/produit/1/8/15781) if(is_dir($dir.$i.'/'.$e.'/'.$id.'/photos/')){//check directory photos (eg /home/server/data/produit/1/8/15781/photos) $contenu = scandir($dir.$i.'/'.$e.'/'.$id.'/photos/');//list of all in this directory $sql = "SELECT"; $sql .= " p.ref"; $sql .= " FROM llx_product AS p"; $sql .= " WHERE p.rowid = ".$id; $resql = $db->query($sql); if ($resql ){ if( $resql->num_rows == 1 ){//this product exists in database $obj = $resql->fetch_object(); foreach($contenu as $fichiers){//for each element of this directory if(is_file($dir.$i.'/'.$e.'/'.$id.'/photos/'.$fichiers)){//only files not directory print 'change this file :'.$dir.$i.'/'.$e.'/'.$id.'/photos/'.$fichiers.' in '.$dir.$obj->ref.'/'.$fichiers.'
'; if(!is_dir($dir.$obj->ref.'/')){//if directory doesn't exist create it mkdir($dir.$obj->ref.'/', 0755); } rename($dir.$i.'/'.$e.'/'.$id.'/photos/'.$fichiers, $dir.$obj->ref.'/'.$fichiers );//faster than copy and paste }elseif($fichiers == 'thumbs'){//list of all in thumbs $icones = scandir($dir.$i.'/'.$e.'/'.$id.'/photos/thumbs/'); foreach($icones as $icone){ if(is_file($dir.$i.'/'.$e.'/'.$id.'/photos/thumbs/'.$icone)){ print 'change this file :'.$dir.$i.'/'.$e.'/'.$id.'/photos/thumbs/'.$icone.' in '.$dir.$obj->ref.'/thumbs/'.$icone.'
'; if(!is_dir($dir.$obj->ref.'/thumbs/')){//if directory doesn't exist create it mkdir($dir.$obj->ref.'/thumbs/', 0755); } rename($dir.$i.'/'.$e.'/'.$id.'/photos/thumbs/'.$icone, $dir.$obj->ref.'/thumbs/'.$icone );//faster than copy and paste } } } } } } } } } } } ?>[/code]

Super ! :wink:

Je me permet de UP le message pour voir si philazerty a autre chose à proposer ? :wink:

Bonsoir,

Le script de dolibarr95 fonctionne très bien, que voulez vous de plus ?

Bonjour :happy:
Ce qui serait bien c’est que lors de l’install ou upgrade il y ait un choix pour passer au nouveau système de fichier afin d’activer ou pas ce genre de code.
Ou dans la configuration de Dolibarr que ce genre d’option existe.

Bonjour,

Pouvez vous m’expliquer en detail comment faire pour la manip car j’y connais rien en php et autre.

Fred

Bonjour :happy:
Avant tout il existe des pro qui peuvent vous faire ça en toute sécurité pour vraiment pas cher du tout si vous préférez: consulter cette liste
Je n’en suis pas un…

[b]/!\ Avant tout sauvegardez vos données /![/b]

puis :whistle:

dans un fichier php vide (avec notepad) à la racine de votre Dolibarr (ex: monsite.com/erp/dolibarr/monnouveaufichier.php)
ajoutez ces lignes

include('conf/conf.php');//chemin vers le fichier conf.php
$db = new mysqli($dolibarr_main_db_host, $dolibarr_main_db_user, $dolibarr_main_db_pass, $dolibarr_main_db_name);
if ($db->connect_errno) {
    printf("Échec de la connexion : %s\n", $db->connect_error.'<br>');
    die();
}

copier le contenu du code proposé ici à la suite de ce fichier

renseignez cette variable $dir correctement en y précisant le chemin d’accès a votre dossier photo.

vérifiez que votre préfixe de base de donnée est llx_ sinon changez par le bon dans la ligne $sql .= " FROM llx_product AS p";

ps un fichier php débute toujours pas <?php et fini par ?>

allumer un cierge :tongue:

Accédez au fichier que vous avez crée et laisser tourner la moulinette.

Bonjour,

Un grand merci a dolibarr95 pour ces explications.
J’ai voulu faire un teste sur mon dolibarr « virtuel » (en local) avant de lancer la machine.

Juste une remarque j’ai indiqué le chemin des photos mais il rajoute un 0 à la fin de « product » donnant :
…/product0/0/…
J’aurai préféré product/0/0 qui est le vrai chemin.

Je voulais connaitre votre avis la dessus avant de lancer en production le script.

Frédéric

Bonjour :happy:
de-rien

En fait la variable $dir représente le chemin d’accès au images produits.
L’ancienne méthode de dossier est la suivante :
$dir suivi d’une séquence composée de l’id du produit
exemple pour l’id 987 (reférence produit AMPOULE)

$dossierphoto = $dir . '7/8/987/photos/';
ce qui évitait d’avoir plein de dossier en vrac

La nouvelle est la suivante :
$dir suivi de la ref du produit
exemple pour l’id 987 (reférence produit AMPOULE)

$dossierphoto = $dir . 'AMPOULE/';
dans ton cas si le dossier se nomme product0 ou product45 ce la ne change rien juste defini la variable
$dir = ‹ /chemin/complet/product0/ ›;

:wink: