Forum Ametys

Forum de la communauté Ametys

You are not logged in.

#1 16/10/2018 10:49:46

APitrou
Guest
Registered: 22/06/2016
Posts: 44

[Résolu] Tester la présence d'un fichier joint à une page via ajax

Bonjour,
je souhaite tester la présence d'un fichier joint d'une page dans un template.
Je me suis résolu à passer par du jquery car il n'y a pas possibilité à ma connaissance de tester si une pièce jointe est présente sur une page dans le xsl d'un te mplate.

Voici mon code :

           $j.ajax({
                url:'<xsl:value-of select="$absolute-site-uri-prefix" />/<xsl:value-of select="$lang" />/<xsl:value-of select="ametys:pagePath()" />/_attachments/visuel-gauche.png',                
                type:'HEAD',
                error: function()
                { 
                    $j(".interieur-gauche").css("background-image","url('<xsl:value-of select="ametys:skinURL('um_img/page_interieure/blason-interieur.png')" />')");                     
                },
                success: function()                   
                {
                    $j(".interieur-gauche").css("background-image","url('<xsl:value-of select="$absolute-site-uri-prefix" />/<xsl:value-of select="$lang" />/<xsl:value-of select="ametys:pagePath()" />/_attachments/visuel-gauche.png')");
                }
            });

Cela fonctionne sur mon bo en preview et en live, mais pas sur le front : il passe toujours par error.

Je précise que j'ai un serveur en back et un serveur en front dissocié.

J'ai fouillé et je ne trouve pas, j'ai creusé la piste du reverse proxy sous apache mais je ne trouve rien de tangible.

Auriez-vous des éléments susceptible de m'aider s'il vous plaît ?

Bonne journée

          AxelP

Last edited by APitrou (17/10/2018 12:02:24)

Offline

#2 16/10/2018 11:05:31

Raphaël Franchet
Expert Team
From: Toulouse
Registered: 10/08/2010
Posts: 1,117

Re: [Résolu] Tester la présence d'un fichier joint à une page via ajax

Le code js me parait correcct, il faudrait analyser les logs liés à l'erreur.

Ne serait-il pas plus judicieux de passer par un contenu pour insérer cette image ? vous profiteriez de l'héritage des zones dans les sous-pages....


Raphael Franchet
Expert Ametys

Offline

#3 16/10/2018 11:25:06

APitrou
Guest
Registered: 22/06/2016
Posts: 44

Re: [Résolu] Tester la présence d'un fichier joint à une page via ajax

Merci de votre réponse :
Voici le type de page impacté :

Dans la partie bleu à gauche il y a le picto de l'université par défaut et je veux faire apparaitre le picto de la section (celui du menu gauche). Mais je veux m'éviter de créer un gabarit par section de page intérieure.
Si j'impose la pièce jointe, en cas d'oubli le visuel gauche n'apparait pas.
Je voulais effectuer un test pour être sur et avoir un comportement par défaut.

Selon vous, je devrais donc placer une zone gauche et placer sur chaque page l'image, pourquoi pas.
Après avec mon architecture, je ne bénéficierai pas de l'héritage car le premier niveau est souvent une page vierge et les second niveau sont des pages "hub" avec un autre gabarit.

Last edited by APitrou (16/10/2018 11:25:22)

Offline

#4 16/10/2018 17:58:10

APitrou
Guest
Registered: 22/06/2016
Posts: 44

Re: [Résolu] Tester la présence d'un fichier joint à une page via ajax

Donc une petite information supplémentaire, ajax relance un 302 found.
Je vais essayer de faire un test sur un complete avec le code pour créer une conditionnelle.

Un article qui résume le problème :

Offline

#5 17/10/2018 11:53:44

APitrou
Guest
Registered: 22/06/2016
Posts: 44

Re: [Résolu] Tester la présence d'un fichier joint à une page via ajax

En creusant, j'ai appris plusieurs chose. Lors de l'utilisation d'un reverse proxy sous apache, jquery.ajax ne peut pas passer par la fonction "success" car détectant une redirection, il renvoit un code 302 et passera automatiquement par "error".
De là il faut passer obligatoirement par complete et filtrer le xhr.status 200 et le reste...

complete : function(xhr) { 
                        switch(xhr.status){
                            case 200 :
                                $j(".interieur-gauche").css("background-image","url('<xsl:value-of select="$absolute-site-uri-prefix" />/<xsl:value-of select="$lang" />/<xsl:value-of select="ametys:pagePath()" />/_attachments/visuel-gauche.png')");
                                break;
                            default :
                                $j(".interieur-gauche").css("background-image","url('<xsl:value-of select="ametys:skinURL('um_img/page_interieure/blason-interieur.png')" />')");
                                }
                    }
                }); 

Mais attention si vous avez une redirection customiser (erreur-404.html par exemple) sur vos différents code d'erreur (404, etc...), il renverra un code 200 car il trouve bien une page même si il ne s'agit pas de celle souhaitée.
De là j'ai fait une exception dans apache pour les contenus de type image.

<LocationMatch "\.(png|jpeg|jpg|gif)$">
             ErrorDocument 404  default
        </LocationMatch>

Voici la solution complète , tout d'abord la partie en js :

<script type="text/javascript" >
            $j(window).load(function()
            {           
                $j.ajax({
                    type:'GET',
                    dataType:'image/png',
                    url:'<xsl:value-of select="$absolute-site-uri-prefix" />/<xsl:value-of select="$lang" />/<xsl:value-of select="ametys:pagePath()" />/_attachments/visuel-gauche.png',
                    xhrFields: {withCredentials: true},                
                    complete : function(xhr) { 
                        switch(xhr.status){
                            case 200 :
                                $j(".interieur-gauche").css("background-image","url('<xsl:value-of select="$absolute-site-uri-prefix" />/<xsl:value-of select="$lang" />/<xsl:value-of select="ametys:pagePath()" />/_attachments/visuel-gauche.png')");
                                break;
                            default :
                                $j(".interieur-gauche").css("background-image","url('<xsl:value-of select="ametys:skinURL('um_img/page_interieure/blason-interieur.png')" />')");
                                }
                    }
                }); 
            });
        </script>

et après dans apache :

ProxyErrorOverride On
        ErrorDocument 400 http://www.univ-lemans.fr/fr/erreurs/erreur-400.html
        ErrorDocument 401 http://www.univ-lemans.fr/fr/erreurs/erreur-401.html
        ErrorDocument 403 http://www.univ-lemans.fr/fr/erreurs/erreur-403.html
        ErrorDocument 404 http://www.univ-lemans.fr/fr/erreurs/erreur-404.html
        <LocationMatch "\.(png|jpeg|jpg|gif)$">
             ErrorDocument 404  default
        </LocationMatch>

Je passe le post en résolu.

Last edited by APitrou (17/10/2018 12:02:09)

Offline

Board footer

Powered by FluxBB