Jump to content

Actualisation des images


Recommended Posts

Bonjours à tous(tes),

 

J'utilise prestashop sur 2 boutiques avec des modules gratuits et des payants et globalement j'en suis bien satisfait (mais qui ne pourrait l'être avec une solution aussi puissante et gratuite!!!).

 

J'ai un souci avec 2 modules que j'ai installé:

--le module JQuery Nivo Slider v2.0 par Prestashopic.com

--le module Block Advertising Home v1.0 par DapurPixel

 

En fait je pense que de vous citer les module sen question n'a pas d'importance mais au cas ou jeles mets quand même si cela peut nous aider.

 

Mon problème c'est que lorsque je change les images dans ces 2 modules (chose que je fais toutes les 2 semaines) elles ne s'actualisent pas chez tout le monde.

Même chez moi par exemple. Une fois la modif d'images faites je me connecte à mon site avec Firefox et là pas de prob je vois la dernière version de l'image. Sous chrome par contre il faut que je fasse F5 pour que cela marche.

 

Que faudrait il faire pour forcer le navigateur des clients à aller charger mon image et pas celle enregistré dans leur cache?

 

J'ai essayer de renommer les fichiers mais ca ne marche pas . Pareil j'ai vidé le cache "compil" et "cache" dans smarty....

 

Merci si cous pouvez m'aiguiller je commence à sécher.

 

Romain

Mon site: www.vindartiste.net/degustation-vin (désolé il faut s'inscrire mais il n'y à pas de confirmation)

 

 

 

Link to comment
Share on other sites

C'est bête je me rends compte que j'ai renommé le fichier avant de l'envoyer sans penser que le module le renomme lui même....

Merci pour la propo mais je ne vois pas comment cela peut régler mon problème:

Voici ce que je vois sous firefox (vers.25.0.1)

firefox.jpg

 

et ce que je vois sous chrome (vers. Version 31.0.1650.57 m)

chrome.jpg

 

 

......

Link to comment
Share on other sites

l'image est la même mais le texte change, avec ce module il n'y a pas moyen de mettre du texte avec l'image ? on ne peut mettre que l'image c'est bien ça ?

 

Sinon il faudrait que le module enregistre le nom de votre image au lieu de renommer l'image... comme le nom reste est identique le navigateur internet garde en mémoire la première image.

Link to comment
Share on other sites

Oui seul le texte change.

On ne peut pas mettre de texte dans le modue. Seulement une image.

 

Ce que je ne comprends pas c'est pourquoi cela marche bien chez certaines personnes et pas chez d'autres sachant qu'à priori aucune de ces personnes n'a modifié les paramètres de son navigateur.

 

J'ai contacté les crétateurs du modules mais ils sont en azerbaidjan apparament....

 

Qq aurait une idée?

Link to comment
Share on other sites

Bon j'ai trouvé un moyen de contourner le prob mais en modifiant des fichiers.

Si quelqu'un à une solution plus propre je suis preneur.

 

Pour ceux que ca pourrait intéressé voici les manips.

--Dans le module "slideric" modifier le fichier "frlinks.xml" en changeant le nom des images.

Par exemple "fr0.jpg" devient "image1.jpg"

 

--Renommer directement dans le dossier du module le nom de l'image de la même manière (on renome "fr0.jpg" en "image1.jpg")

 

Ca à marché direct sur chrome (il faut tout même changer de page et revenir).

Link to comment
Share on other sites

Bonjour

 

La solution "propre" est extrèmement simple: Il vous suffit de:

  1. vider* le cache Smarty de Prestashop (cache/smarty/cache)
  2. vider* les fichiers "Compile" de Prestashop (cache/smarty/compile)
  3. vider le cache de votre navigateur (CTRL+MAJ+DEL)
  4. faire un petit nettoyage* du répertoire "img/tmp" ne devrait pas faire de tort. ;)

(*) pour les points 1,2 et 4, ne conserver que le fichier "index.php"

 

De cette manière, les nouvelles bannières peuvent être uploadées par FTP en gardant le même nom (qui est un numéro chez NivoSlider)

 

Ciao

 

Takio

Link to comment
Share on other sites

désolé Takio mais ta solution ne correspond à ce problème, il souhaite changer régulièrement les images du slider mais les clients ne voient pas changer ces images car elles restent dans la mémoire de leur navigateur. Et il parait peu envisageable de demander à tous les clients de vider leur cache navigateur quand ils viennent sur la boutique.

Link to comment
Share on other sites

Par exemple pour cette image :

fr2.jpg

 

son nom est fr2.jpg si vous la supprimez et en remettez une nouvelle, vous "retombez" sur le même nom (fr2.jpg) ?

 

Si vous voulez que je supprime l'image (comme le site est "privé") n'hésitez pas à le dire

Mince un concurrent!!!!... je parle du vin

 

Je viens d'avoir un problème un peu similaire. Impossible de modifier mon image de backroung. Après plusieurs tentatives infructueuses. et différents testes, il c'est avéré que sur safari tout fonctionne normalement et que sur chrome il aura fallu 4 jours...

Impossible de vérifier avec Firefox, problème de barre de navigation (Ama... c'est incrusté et c'est difficile de l'enlever)

 

Bien que la conclusion soit rapide, il s'agirai du navigateur...

 

cdt

Link to comment
Share on other sites

 Oui il s'agit bien comme problème de la manière dont le navigateur se comporte sur un site déjà visité  au préalable. Cela va dépendre des réglages de ce navigateur mais il faut trouver une solution pour imposer au navigateur d'aller chercher la nouvelle image.

 

Pour l'instant à part l'actualisation forcée (méthode risquée j'ai pu le constater) ou changer à chaque fois le nom des images (et encore parfois cela ne marche pas....) je n'ai pas de pistes....

 

C'est un problème si basique et pourtant si compliqué apparament je trouve ca fou!!!!!

 

J'ai aussi essayer d'inclure (dans mes pages html, pas la boutique) un code pour dire au navigateur de ne pas enregistrer la page mais cela ne semble pas fonctionner...

Link to comment
Share on other sites

 

C'est un problème si basique et pourtant si compliqué apparament je trouve ca fou!!!!!

 

 

oui et le pire, c'est que ce problème pourrait être réglé très facilement, il faudrait juste que le module enregistre le nom de l'image au lieu de la renommer en 1.jpg 2.jpg...

Link to comment
Share on other sites

Bonjour,

 

la technique à utiliser pour voire afficher toujours la dernière version de l'image est assez simple mais tout fois obligé à modifier le module en question.

 

Dans les anciennes versions de Presstashop, le logo était codé ainsi pour toujours avoir la dernière version ainsi au lieu d'appeler l'image dans le tpl ainsi :

<img class="logo" src="{$img_ps_dir}logo.jpg" alt="{$shop_name|escape:'htmlall':'UTF-8'}" {if $logo_image_width}width="{$logo_image_width}"{/if} {if $logo_image_height}height="{$logo_image_height}" {/if} />

Prestashop a décidé de rajouter un timestamp :

?{$img_update_time}
<img class="logo" src="{$img_ps_dir}logo.jpg?{$img_update_time}" alt="{$shop_name|escape:'htmlall':'UTF-8'}" {if $logo_image_width}width="{$logo_image_width}"{/if} {if $logo_image_height}height="{$logo_image_height}" {/if} />

Ce qui permet de rappeler toujours une image avec la bonne version.

 

Le mieux est de récupérer l'horodatage du fichier lors de l'appel de son affichage pour mettre toujours le même timestamp et ainsi conserver la mise en cache si l'image n'est pas modifiée.

Link to comment
Share on other sites

Bonjour et merci de chercher à m'aider mais c'est un peut trop flou pour un non-devellopeur comme moi!!!

 

Comme mon prob vient d'un module je ne parlerais que de fichiers provenant de ce module.

Désolé si c'est un peut long mais j'ai mis tous les fichiers que je pense avoir un rapport avec tout ca (mai speut être que j'en oublie!!!)

 

Voici le code du .tpl:

 

{literal}
<script type="text/javascript" src="{/literal}{$this_path}{literal}js/jquery.nivo.slider.pack.js"></script>
<link rel="stylesheet" type="text/css" href="{/literal}{$this_path}{literal}css/nivo-slider.css" />
        <!-- SLIDER --------------------------------------------------------------------------------------------------------------------------------------->
<div id="slide_holder">     
    <div id="slider">
        {/literal}
        {foreach from=$xml->link item=home_link name=links}
        {literal}
            <a href='{/literal}{$home_link->url}{literal}'><img src='{/literal}{$this_path}{$home_link->img}{literal}'alt="" /></a>
        {/literal}
        {/foreach}
        {literal}
    </div>
</div>    
<script type="text/javascript">
$(window).load(function() {
    $('#slider').nivoSlider({
        effect:'random', //Specify sets like: 'fold,fade,sliceDown'
        slices:9,
        animSpeed:500, //Slide transition speed
        pauseTime:7000,
        startSlide:0, //Set starting Slide (0 index)
        directionNav:true, //Next & Prev
        directionNavHide:true, //Only show on hover
        controlNav:true, //1,2,3...
        controlNavThumbs:false, //Use thumbnails for Control Nav
          controlNavThumbsFromRel:false, //Use image rel for thumbs
        controlNavThumbsSearch: '.jpg', //Replace this with...
        controlNavThumbsReplace: '_thumb.jpg', //...this in thumb Image src
        keyboardNav:true, //Use left & right arrows
        pauseOnHover:true, //Stop animation while hovering
        manualAdvance:false, //Force manual transitions
        captionOpacity:0.8, //Universal caption opacity
        beforeChange: function(){},
        afterChange: function(){},
        slideshowEnd: function(){} //Triggers after all slides have been shown
    });
});

</script>
 
<!-- SLIDER --------------------------------------------------------------------------------------------------------------------------------------->

{/literal}

 

et le code du .xml qui est appelé aussi:

 

<?xml version='1.0' encoding='utf-8' ?>
<links>
    <link>
        <url>http://www.vindartiste.net/degustation-vin/4-vente-de-vin-en-cours</url>
        <img>fr0.jpg</img>
    </link>
    <link>
        <url>http://www.vindartiste.net/degustation-vin/4-vente-de-vin-en-cours</url>
        <img>fr1.jpg</img>
    </link>
    <link>
        <url>http://www.vindartiste.net/degustation-vin/5-cave-vin-d-artiste</url>
        <img>fr2.jpg</img>
    </link>
    <link>
        <url>http://www.vindartiste.net/degustation-vin/content/6-ecole</url>
        <img>fr3.jpg</img>
    </link>
</links>
 

 

le code du fichier frontcontroller.php:

 

<?php
/*
* 2007-2011 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/osl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to [email protected] so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
*  @author PrestaShop SA <[email protected]>
*  @copyright  2007-2011 PrestaShop SA
*  @version  Release: $Revision: 1.4 $
*  @license    http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
*  International Registered Trademark & Property of PrestaShop SA
*/

class FrontController extends FrontControllerCore
{
    public function displayHeader()
    {
        global $css_files, $js_files;

        if (!self::$initialized)
            $this->init();

        // P3P Policies (http://www.w3.org/TR/2002/REC-P3P-20020416/#compact_policies)
        header('P3P: CP="IDC DSP COR CURa ADMa OUR IND PHY ONL COM STA"');

        /* Hooks are volontary out the initialize array (need those variables already assigned) */
        self::$smarty->assign(array(
            'time' => time(),
            'static_token' => Tools::getToken(false),
            'token' => Tools::getToken(),
            'logo_image_width' => Configuration::get('SHOP_LOGO_WIDTH'),
            'logo_image_height' => Configuration::get('SHOP_LOGO_HEIGHT'),
            'priceDisplayPrecision' => _PS_PRICE_DISPLAY_PRECISION_,
            'content_only' => (int)(Tools::getValue('content_only'))
        ));
        self::$smarty->assign(array(
            'HOOK_HEADER' => Module::hookExec('header'),
            'HOOK_TOP' => Module::hookExec('top'),
            'HOOK_LEFT_COLUMN' => Module::hookExec('leftColumn'),
            'HOOK_FILTERBY_CENTER' => Module::hookExec('filterbyCenter'),
            'HOOK_SLIDER' => Module::hookExec('slider')
        ));

        if ((Configuration::get('PS_CSS_THEME_CACHE') OR Configuration::get('PS_JS_THEME_CACHE')) AND is_writable(_PS_THEME_DIR_.'cache'))
        {
            // CSS compressor management
            if (Configuration::get('PS_CSS_THEME_CACHE'))
                Tools::cccCss();

            //JS compressor management
            if (Configuration::get('PS_JS_THEME_CACHE'))
                Tools::cccJs();
        }
        
        self::$smarty->assign('css_files', $css_files);
        self::$smarty->assign('js_files', array_unique($js_files));
        self::$smarty->display(_PS_THEME_DIR_.'header.tpl');
    }
}

 

et celui du slideric.php

 

 

<?php
/** Modulo JQuerySlider Galery **/
/** www.tiendasvirtuales.com.ve **/

class slideric extends Module
{
    /** @var max image size */
     protected $maxImageSize = 307200;

     function __construct()
     {
          $this->name = 'slideric';
        $this->tab = 'front_office_features';
          $this->version = '2.0';
        $this->author = 'Prestashopic.com';

        /* The parent construct is required for translations */
         parent::__construct();

        $this->page = basename(__FILE__, '.php');
         $this->displayName = $this->l('JQuery Nivo Slider');
         $this->description = $this->l('Slide the images with choosen languages | Prestashopic.com');
     }

    function install()
    {
        if (!parent::install() || !$this->_createBackup())
            return false;
            $hooked = Db::getInstance()->ExecuteS('SELECT * FROM `'._DB_PREFIX_.'hook` WHERE name = "slider"');
        if (!is_array($hooked) || sizeof($hooked) == 0)
            Db::getInstance()->Execute('INSERT INTO `'._DB_PREFIX_.'hook` (
            `id_hook` ,`name` ,`title` ,`description` ,`position`)
            VALUES (NULL , "slider", "sliderHome", "slider hompage", "1");');
        if (!$this->registerHook('slider') )
            
            return false;
        return true;
    }

private function _createBackup() {
        
    @copy(_PS_MODULE_DIR_ . $this->name . '/FrontController.php', _PS_ROOT_DIR_ . '/override/classes/FrontController.php');
        return true;
    }

    function putContent($xml_data, $key, $field)
    {
        $field = htmlspecialchars($field);
        if (!$field)
            return 0;
        return ("\n".'        <'.$key.'>'.$field.'</'.$key.'>');
    }

     function getContent()
     {
        global $cookie;
        /* Languages preliminaries */
        $defaultLanguage = intval(Configuration::get('PS_LANG_DEFAULT'));
        $languages = Language::getLanguages();
        $iso = Language::getIsoById($defaultLanguage);
        $isoUser = Language::getIsoById(intval($cookie->id_lang));
 
                
          /* display the module name */
          $this->_html = '<h2>'.$this->displayName.' '.$this->version.'</h2>';

          /* update the editorial xml */
          if (isset($_POST['submitUpdate']))
          {
            // Generate new XML data
               $newXml = '<?xml version=\'1.0\' encoding=\'utf-8\' ?>'."\n";
            $newXml .= '<links>'."\n";
            $i = 0;
            foreach ($_POST['link'] as $link)
            {
                $newXml .= '    <link>';
                foreach ($link AS $key => $field)
                {
                    if ($line = $this->putContent($newXml, $key, $field))
                        $newXml .= $line;
                }
                
                /* upload the image */
                if (isset($_FILES['link_'.$i.'_img']) AND isset($_FILES['link_'.$i.'_img']['tmp_name']) AND !empty($_FILES['link_'.$i.'_img']['tmp_name']))
                {
                    Configuration::set('PS_IMAGE_GENERATION_METHOD', 1);
                    if ($error = checkImage($_FILES['link_'.$i.'_img'], $this->maxImageSize))
                        $this->_html .= $error;
                elseif (!$tmpName = tempnam(_PS_TMP_IMG_DIR_, 'PS') OR !move_uploaded_file($_FILES['link_'.$i.'_img']['tmp_name'], $tmpName))
                    return false;
                elseif (!imageResize($tmpName, dirname(__FILE__).'/'.$isoUser.$i.'.jpg'))
                    $this->_html .= $this->displayError($this->l('An error occurred during the image upload.'));
                unlink($tmpName);
                }
                if ($line = $this->putContent($newXml, 'img', $isoUser.$i.'.jpg'))
                    $newXml .= $line;
                $newXml .= "\n".'    </link>'."\n";
                $i++;
            }
            $newXml .= '</links>'."\n";

            /* write it into the editorial xml file */
            if ($fd = @fopen(dirname(__FILE__).'/'.$isoUser.'links.xml', 'w'))
            {
                if (!@fwrite($fd, $newXml))
                    $this->_html .= $this->displayError($this->l('Unable to write to the editor file.'));
                if (!@fclose($fd))
                    $this->_html .= $this->displayError($this->l('Can\'t close the editor file.'));
            }
            else
                $this->_html .= $this->displayError($this->l('Unable to update the editor file.<br />Please check the editor file\'s writing permissions.'));
          }

         /* display the editorial's form */
          $this->_displayForm();

          return $this->_html;
     }

     private function _displayForm()
     {
        global $cookie;
        /* Languages preliminaries */
        $defaultLanguage = intval(Configuration::get('PS_LANG_DEFAULT'));
        $languages = Language::getLanguages();
        $iso = Language::getIsoById($defaultLanguage);
        $isoUser = Language::getIsoById(intval($cookie->id_lang));
        

          /* xml loading */
          $xml = false;
          if (file_exists(dirname(__FILE__).'/'.$isoUser.'links.xml'))
              if (!$xml = @simplexml_load_file(dirname(__FILE__).'/'.$isoUser.'links.xml'))
                  $this->_html .= $this->displayError($this->l('Your links file is empty.'));
                $this->_html .= '<br />
        <form method="post" action="'.$_SERVER['REQUEST_URI'].'" enctype="multipart/form-data">
            <fieldset style="width: 900px;">
        <legend><img src="'.$this->_path.'logo.gif" alt="" title="" /> '.$this->displayName.'</legend>';
        $i = 0;
        foreach ($xml->link as $link)
        {
              $divLangName = 'title'.$i.'¤cpara'.$i;
      $this->_html .= '<h4>'.$this->l('Slider #').$i.'</h4>';
            $this->_html .= '<div class="clear"></div>';
            $this->_html .= '

            <fieldset style="width:870px">
          <h5><label>'.$this->l('Image Size (50%)').'</label></h5>
                <div class="margin-form">
                    <img src="'.$this->_path.$isoUser.$i.'.jpg" alt="" title="" style="width:50%; height:50%;" /><br />
                    <input type="file" name="link_'.$i.'_img" />
                </div>
                <h5><label>'.$this->l('URL').'</label></h5>
                <div class="margin-form">
                    <input type="text" name="link['.$i.']" size="64" value="'.($xml ? stripslashes(htmlspecialchars($xml->link[$i]->url)) : '').'" />
                </div>
            </fieldset>';

            $i++;
        }
        
        $this->_html .= '
                    <div class="margin-form clear">
            <div class="clear pspace"></div>
            <div class="margin-form">
                 <input type="submit" name="submitUpdate" value="'.$this->l('Save').'" class="button" />
            </div>
          </div>
                    
                </fieldset>
            </form>';
     }

    function hookslider($params)
     {
        global $cookie;
        /* Languages preliminaries */
        $defaultLanguage = intval(Configuration::get('PS_LANG_DEFAULT'));
        $languages = Language::getLanguages();
        $iso = Language::getIsoById($defaultLanguage);
        $isoUser = Language::getIsoById(intval($cookie->id_lang));

          if (file_exists(dirname(__FILE__).'/'.$isoUser.'links.xml'))
              if ($xml = simplexml_load_file(dirname(__FILE__).'/'.$isoUser.'links.xml'))
              {
                   global $cookie, $smarty;
                $smarty->assign(array(
                    'xml' => $xml,
                    'this_path' => $this->_path
                ));
                return $this->display(__FILE__, 'slideric.tpl');
            }
        return false;
     }
 
}

?>

 

Qu'est ce que je devrais modifier à votre avis?

Link to comment
Share on other sites

  • 7 months later...

Salut.

 

Comme solution j'ai fini par utiliser la "technique" suivante. C'est pas l'idéal mais cela fonctionne:

 

-uploader dans le répertoire du module slideric la ou les nouvelles images avec un nom différent de la foie précédente.

-Modifier le fichier xml contenant les liens (frlinks.xml dans mon cas) en changeant le nom des images entre les balises <img> avec celui des fichiers précédament uploadé.

 

Comme les noms sont différents la navigateur sera obligé d'aller chercher les nouvelles images.

 

Du coup je ne passe plus par le BO pour changer les images puisque je le fais en FTP pour l'upload + la modif du "code" du fichier XML.

 

J'éspère que ca t'aidera.

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...