Sujet fermé
Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5

[Résolu] CGSmartImage, udt et cache
#7

Bon voilà, c'est réglé en modifiant FEU.

la solution trouvée:

FEU crée une image en la nommant de la sorte: $uid_image.jpg
la chose à faire était qu'à chaque modif elle soit nommé: $uid_image$1.jpg
$1 étant incrémenté de 1 à chaque changement.

si l'image était vidé, on réinitialise le tout et au prochain upload, on recommence à $uid_image.jpg... puis $uid_image1.jpg...$uid_image2.jpg...etc

il fallait aussi que ça fonctionne si l'admin changeait l'image ou l'effacer depuis la partie admin.

donc les changement de script:

3 pages sont concernées:
  1. FrontEndUsers.module.php
  2. action.do_userchangesettings.php
  3. action.do_edituser3.php

FrontEndUsers.module.php
on récupère l'ancien nom de l'image
ligne 1239 (environ)


Code :
// avant changement
function ManageImageUpload($id, $fldprefix, $fldname, $uid)



//après changement
function ManageImageUpload($id, $fldprefix, $fldname, $uid, $oldval)

si ce nom existe on l'incrémente de 1
ligne 1286 (environ)

Code :
[== Indéfini ==]
// avant changement

$ext = strchr($file['name'],'.');
$destname = $uid.'_'.$fldname.$ext;




// après changement

if(isset($oldval)&& !empty($oldval)){
    
          function ajouteun($masque){
             return $masque[1].($masque[2]+1).$masque[3];
          }
      $destname = preg_replace_callback('`([0-9]_image)(\d+)?(\.[a-z])`','ajouteun',$oldval);
}
else{
      $ext = strchr($file['name'],'.');
          $destname = $uid.'_'.$fldname.$ext;
}

on efface l'ancienne image du serveur si elle existe
ligne 11299 (environ)

Code :
[== Indéfini ==]
// avant changement

    // Create the destination directory if necessary
    $destDir = $this->get_upload_dirname($uid);
    @mkdir($destDir);
    if( !is_writable( $destDir ) )
      {
    return array(false,$this->Lang('error_destinationnotwritable'));
      }

    @cms_move_uploaded_file($file['tmp_name'], cms_join_path($destDir,$destname));

    return array(true,$destname);
  }



// après changement

    // Create the destination directory if necessary
    $destDir = $this->get_upload_dirname($uid);
    @mkdir($destDir);
    if( !is_writable( $destDir ) )
      {
    return array(false,$this->Lang('error_destinationnotwritable'));
      }

    @cms_move_uploaded_file($file['tmp_name'], cms_join_path($destDir,$destname));
    
    if(isset($oldval)&& !empty($oldval)){
        @unlink(cms_join_path($destDir,$oldval));
    }

    return array(true,$destname);
  }


action.do_userchangesettings.php
on envoie le nom de l'image précédemment utilisé à la fonction ManageImageUpload()
ligne 289 (environ)

Code :
[== Indéfini ==]
// avant changement

$result = $this->ManageImageUpload($id, 'feu_input_', $propname, $uid);



// après changement

$result = $this->ManageImageUpload($id, 'feu_input_', $propname, $uid, $val );



action.do_edituser3.php
on récupère le nom de l'image précédemment utilisé et on l'envoie à la fonction ManageImageUpload()
ligne 309 (environ)

Code :
[== Indéfini ==]
// avant changement

// it's an uploaded file type

      $result = $this->ManageImageUpload($id,'input_', $k, $user_id);



// après changement

// it's an uploaded file type
      $oldval = trim($params['hidden_'.$k]);
      $result = $this->ManageImageUpload($id,'input_', $k, $user_id, $oldval );


voilà, comme ça à chaque nouvel upload d'image le nom change et s'incrémente de 1 aussi bien coté frontend que coté admin et du coup l'image est bien régénéré à chaque changement.

Pour CGSI l'utilisation du paramètre nobchache=1 marchait aussi mais obligeait à recrée une miniature à chaque affichage dont plus d'utilisation du cache du navigateur.
avec ces changement les images restent en cache tant qu'il n'y a pas de nouvel upload.

si quelqu'un voit des améliorations aux changements que j'ai fait, allez-y, je suis tout ouie!
Sujet fermé


Messages dans ce sujet

Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)