You are not logged in.
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
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
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
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
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