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.
@+
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.
@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 » ?
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.
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();
}
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]
Bonjour
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
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…
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
Accédez au fichier que vous avez crée et laisser tourner la moulinette.
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.
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/ ›;