Forum Ametys

Forum de la communauté Ametys

You are not logged in.

#1 03/03/2017 10:37:08

vcotrez
Guest
Registered: 17/06/2016
Posts: 22

Supprimer download=true pour les liens des documents attachés ?

Bonjour,
Les liens de téléchargement vers les fichiers attachés aux articles (pdf, etc...) se terminent toujours par ?download=true.

Je souhaiterais supprimer cet ajout, exemple je voudrais que le lien

devienne

pour avoir un affichage du pdf directement dans le navigateur et éviter un téléchargement sur le disque local.

J'ai tenté de modifier dans httpd.conf les lignes suivantes sans succès, même commentées ça n'y fait rien :

RewriteCond    %{DOCUMENT_ROOT}/MON_SITE/$1$3     -f
RewriteCond    %{QUERY_STRING}         ^.*download=true.*$
RewriteRule    ^/(([^/]*/)*)([^/]+)$  %{DOCUMENT_ROOT}/MON_SITE/$1$3 [E=download:$3,L]

Y'a-t-il un moyen de modifier cela ?
Merci d'avance pour votre aide.

Offline

#2 03/03/2017 12:15:46

Laurence Aumeunier
Expert Team
Registered: 10/08/2010
Posts: 154

Re: Supprimer download=true pour les liens des documents attachés ?

Bonjour,

Non c'est plus simple que çà. C'est une question de rendu.
Pour afficher les liens de téléchargement, vous devez certainement utiliser le resolver Ametys pour résoudre le lien dans la XSL de rendu de vos articles.

Du genre:

<a href="{resolver:resolve(attachment/@type, attachment/@path, 'true')}" title="{attachment/@filename} ({attachment/@size})"><xsl:value-of select="attachment/@filename"/></a>

Le 3e argument de "resolver:resolve" permet de dire si on veut télécharger le fichier ou non. Il suffit donc d'enlever ce 3e argument ou de le passer à 'false'


Laurence Aumeunier
Ametys Expert

Offline

#3 03/03/2017 13:15:15

vcotrez
Guest
Registered: 17/06/2016
Posts: 22

Re: Supprimer download=true pour les liens des documents attachés ?

Oui j'utilise le resolver Ametys, en revanche je n'arrive pas à localiser le ou les fichiers à modifier.
Je n'ai pas surchargé les rendus graphiques des contenus, où se trouve ces fichiers dans l'arborescence svp ?

Offline

#4 03/03/2017 16:21:51

Laurence Aumeunier
Expert Team
Registered: 10/08/2010
Posts: 154

Re: Supprimer download=true pour les liens des documents attachés ?

Je n'avais pas compris où étaient vos pièces jointes ... En regardant sur votre site j'ai compris qu'elles étaient directement insérées dans le texte riche du contenu (et non pas dans une métadonnée spécifique).

Du coup, c'est le rendu des liens dans les textes riche qu'il faut surcharger (un peu moins simple) :

1) il faut commencer par surcharger le rendu graphique de vos articles dans votre charte


2) dans la XSL de surcharge, il faut surcharger le rendu des liens contenus dans les textes riches
Le template XSL à copier puis modifier est le suivant :

<xsl:template match="docbook:link">
        
        <xsl:variable name="href">
             <xsl:choose>
                <xsl:when test="not(@xlink:type) or @xlink:type = ''"><xsl:value-of select="@xlink:href"/></xsl:when>
                   <xsl:otherwise>
                       <xsl:variable name="hrefResolved" select="resolver:resolve(@xlink:type, @xlink:href, true())"/>
                       <xsl:choose>
                           <xsl:when test="$hrefResolved != ''"><xsl:value-of select="$hrefResolved"/></xsl:when>
                           <xsl:otherwise><xsl:text/><xsl:value-of select="$void"/><xsl:text/></xsl:otherwise>
                       </xsl:choose>
               </xsl:otherwise>
             </xsl:choose>
        </xsl:variable>
             
        <xsl:choose>
            <xsl:when test="starts-with($href,'mailto:')">
                <xsl:call-template name="mail-antispam">
                    <xsl:with-param name="mail" select="$href"></xsl:with-param>
                    <xsl:with-param name="class" select="@xrefstyle"></xsl:with-param>
                    <xsl:with-param name="title" select="@xlink:title"></xsl:with-param>
                    <xsl:with-param name="apply-templates" select="'true'"></xsl:with-param>
                </xsl:call-template>
            </xsl:when>
            
            <xsl:otherwise>
                <a>
                       <xsl:attribute name="href"><xsl:value-of select="$href"/></xsl:attribute>
                    
                    <xsl:call-template name="link-title-attribute">
                        <xsl:with-param name="href" select="$href"/>
                    </xsl:call-template>
                    
                    <xsl:call-template name="link-class-attribute">
                        <xsl:with-param name="href" select="$href"/>
                    </xsl:call-template>
                       
                       <xsl:if test="@xlink:show = 'new'">
                        <xsl:attribute name="target">_blank</xsl:attribute>
                    </xsl:if>
                       
                    <xsl:apply-templates/>
                </a>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>

A la ligne qui défini la variable "hrefResolved" il faudrait supprimer le troisième argument true().
Mais attention, en faisant cela vous enlever "?download=true" pour tous vos liens des textes riches (PDF ou non, pièces jointe ou autre)
A vous peut-être d'ajouter des règles dans la XSL pour enlever le 3e argument que si le type de lien (@link:type) est "content-attachment" ?
Ou autre solution pour ne pas modifier les liens de tous les articles, faire une nouvelle vue spécifique pour les articles utilisés uniquement pour le télchargement de PDF, et ne surcharger le rendu des liens que pour cette vue


Laurence Aumeunier
Ametys Expert

Offline

#5 13/03/2017 13:25:31

vcotrez
Guest
Registered: 17/06/2016
Posts: 22

Re: Supprimer download=true pour les liens des documents attachés ?

Bonjour,
Désolé pour ma réponse tardive et merci pour votre réponse.
Alors en suivant vos conseils j'ai surchargé ...\skins\cufr2\stylesheets\content\article\article-main.xsl pour modifier le rendu en affichage 'Vue complète' et j'obtiens l'erreur suivante :

org.apache.excalibur.xml.xslt.XSLTProcessorException: Exception when creating Transformer from file:/C:/Users/vcotrez/Documents/Développement/cms/Ametys_CMS/application/v1_0_0/cms/skins/cufr2/stylesheets/content/article/article-main.xsl at org.ametys.runtime.cocoon.ThreadSafeTraxProcessor._createTemplates(ThreadSafeTraxProcessor.java:470) at org.ametys.runtime.cocoon.ThreadSafeTraxProcessor._getTemplates(ThreadSafeTraxProcessor.java:256) at org.ametys.runtime.cocoon.ThreadSafeTraxProcessor.getTransformerHandlerAndValidity(ThreadSafeTraxProcessor.java:185) at org.apache.cocoon.transformation.TraxTransformer.setup(TraxTransformer.java:331) at org.ametys.runtime.cocoon.TraxTransformer.setup(TraxTransformer.java:50) at org.apache.cocoon.components.pipeline.AbstractProcessingPipeline.setupPipeline(AbstractProcessingPipeline.java:398) at org.apache.cocoon.components.pipeline.impl.AbstractCachingProcessingPipeline.setupPipeline(AbstractCachingProcessingPipeline.java:718) at org.apache.cocoon.components.pipeline.AbstractProcessingPipeline.preparePipeline(AbstractProcessingPipeline.java:501) at org.apache.cocoon.components.pipeline.AbstractProcessingPipeline.prepareInternal(AbstractProcessingPipeline.java:515) at org.apache.cocoon.components.source.impl.SitemapSource.init(SitemapSource.java:343) at org.apache.cocoon.components.source.impl.SitemapSource.<init>(SitemapSource.java:215) at org.apache.cocoon.components.source.impl.SitemapSourceFactory.getSource(SitemapSourceFactory.java:65) at org.apache.excalibur.source.impl.SourceResolverImpl.resolveURI(SourceResolverImpl.java:208) at org.apache.cocoon.components.CocoonComponentManager.resolveURI(CocoonComponentManager.java:558) at org.apache.cocoon.components.CocoonComponentManager.resolveURI(CocoonComponentManager.java:558) at org.apache.cocoon.environment.AbstractEnvironment.resolveURI(AbstractEnvironment.java:554) at org.apache.cocoon.environment.AbstractEnvironment.resolveURI(AbstractEnvironment.java:541) at org.apache.cocoon.environment.wrapper.MutableEnvironmentFacade.resolveURI(MutableEnvironmentFacade.java:299) at org.ametys.web.repository.PageGenerator._saxZoneItem(PageGenerator.java:514) at org.ametys.web.repository.PageGenerator._saxZoneItems(PageGenerator.java:380) at org.ametys.web.repository.PageGenerator._saxZone(PageGenerator.java:311) at org.ametys.web.repository.PageGenerator.generate(PageGenerator.java:233) at org.apache.cocoon.components.pipeline.AbstractProcessingPipeline.processXMLPipeline(AbstractProcessingPipeline.java:579) at org.apache.cocoon.components.pipeline.impl.AbstractCachingProcessingPipeline.processXMLPipeline(AbstractCachingProcessingPipeline.java:280) at org.apache.cocoon.components.pipeline.AbstractProcessingPipeline.process(AbstractProcessingPipeline.java:780) at org.apache.cocoon.components.source.impl.SitemapSource.toSAX(SitemapSource.java:414) at org.apache.cocoon.components.source.SourceUtil.toSAX(SourceUtil.java:101) at org.apache.cocoon.components.source.SourceUtil.parse(SourceUtil.java:321) at org.apache.cocoon.sitemap.ContentAggregator.generate(ContentAggregator.java:125) at org.apache.cocoon.components.pipeline.AbstractProcessingPipeline.processXMLPipeline(AbstractProcessingPipeline.java:579) at org.apache.cocoon.components.pipeline.impl.AbstractCachingProcessingPipeline.processXMLPipeline(AbstractCachingProcessingPipeline.java:280) at org.apache.cocoon.components.pipeline.AbstractProcessingPipeline.process(AbstractProcessingPipeline.java:481) at org.apache.cocoon.components.treeprocessor.sitemap.SerializeNode.invoke(SerializeNode.java:144) at org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:47) at org.apache.cocoon.components.treeprocessor.sitemap.MatchNode.invoke(MatchNode.java:108) at org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:69) at org.apache.cocoon.components.treeprocessor.sitemap.PipelineNode.invoke(PipelineNode.java:143) at org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:69) at org.apache.cocoon.components.treeprocessor.sitemap.PipelinesNode.invoke(PipelinesNode.java:93) at org.apache.cocoon.components.treeprocessor.ConcreteTreeProcessor.process(ConcreteTreeProcessor.java:236) at org.apache.cocoon.components.treeprocessor.ConcreteTreeProcessor.process(ConcreteTreeProcessor.java:178) at org.apache.cocoon.components.treeprocessor.TreeProcessor.process(TreeProcessor.java:254) at org.apache.cocoon.components.treeprocessor.sitemap.MountNode.invoke(MountNode.java:118) at org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:47) at org.apache.cocoon.components.treeprocessor.sitemap.MatchNode.invoke(MatchNode.java:108) at org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:69) at org.apache.cocoon.components.treeprocessor.sitemap.PipelineNode.invoke(PipelineNode.java:143) at org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:69) at org.apache.cocoon.components.treeprocessor.sitemap.PipelinesNode.invoke(PipelinesNode.java:93) at org.apache.cocoon.components.treeprocessor.ConcreteTreeProcessor.process(ConcreteTreeProcessor.java:236) at org.apache.cocoon.components.treeprocessor.ConcreteTreeProcessor.process(ConcreteTreeProcessor.java:178) at org.apache.cocoon.components.treeprocessor.TreeProcessor.process(TreeProcessor.java:254) at org.apache.cocoon.Cocoon.process(Cocoon.java:699) at org.apache.cocoon.servlet.CocoonServlet.service(CocoonServlet.java:1159) at org.ametys.runtime.servlet.RuntimeServlet._doService(RuntimeServlet.java:135) at org.ametys.runtime.servlet.RuntimeServlet.service(RuntimeServlet.java:92) at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:745) Caused by: org.apache.xpath.domapi.XPathStylesheetDOM3Exception: Le préfixe doit se convertir en espace de noms : docbook at org.apache.xpath.compiler.XPathParser.errorForDOM3(XPathParser.java:655) at org.apache.xpath.compiler.Lexer.mapNSTokens(Lexer.java:647) at org.apache.xpath.compiler.Lexer.tokenize(Lexer.java:365) at org.apache.xpath.compiler.Lexer.tokenize(Lexer.java:98) at org.apache.xpath.compiler.XPathParser.initMatchPattern(XPathParser.java:188) at org.apache.xpath.XPath.<init>(XPath.java:229) at org.apache.xalan.processor.StylesheetHandler.createMatchPatternXPath(StylesheetHandler.java:176) at org.apache.xalan.processor.XSLTAttributeDef.processPATTERN(XSLTAttributeDef.java:841) at org.apache.xalan.processor.XSLTAttributeDef.processValue(XSLTAttributeDef.java:1411) at org.apache.xalan.processor.XSLTAttributeDef.setAttrValue(XSLTAttributeDef.java:1601) at org.apache.xalan.processor.XSLTElementProcessor.setPropertiesFromAttributes(XSLTElementProcessor.java:343) at org.apache.xalan.processor.XSLTElementProcessor.setPropertiesFromAttributes(XSLTElementProcessor.java:268) at org.apache.xalan.processor.ProcessorTemplateElem.startElement(ProcessorTemplateElem.java:78) at org.apache.xalan.processor.StylesheetHandler.startElement(StylesheetHandler.java:626) at org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown Source) at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) at org.apache.xerces.parsers.XMLParser.parse(Unknown Source) at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source) at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source) at org.apache.excalibur.xml.impl.JaxpParser.parse(JaxpParser.java:315) at org.apache.excalibur.xmlizer.DefaultXMLizer.toSAX(DefaultXMLizer.java:128) at org.ametys.runtime.cocoon.ThreadSafeTraxProcessor._sourceToSAX(ThreadSafeTraxProcessor.java:485) at org.ametys.runtime.cocoon.ThreadSafeTraxProcessor._createTemplates(ThreadSafeTraxProcessor.java:428) ... 75 more

Voici mon fichier article-main.xsl :

<?xml version="1.0" encoding="UTF-8"?>
<!--
   Copyright 2012 Anyware Services

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
   -->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
                            xmlns:i18n="http://apache.org/cocoon/i18n/2.1" 
                            xmlns:ametys="org.ametys.web.transformation.xslt.AmetysXSLTHelper"
                            exclude-result-prefixes="ametys">

    <xsl:import href="plugin:web://stylesheets/content/article/article-main.xsl"/>    
    <xsl:import href="article.xsl"/>    
    
    <!-- Surcharge des templates du type de contenu -->
    <xsl:template match="docbook:link">
            
        <xsl:variable name="href">
             <xsl:choose>
                <xsl:when test="not(@xlink:type) or @xlink:type = ''"><xsl:value-of select="@xlink:href"/></xsl:when>
                   <xsl:otherwise>
                       <xsl:variable name="hrefResolved" select="resolver:resolve(@xlink:type, @xlink:href)"/>
                       <xsl:choose>
                           <xsl:when test="$hrefResolved != ''"><xsl:value-of select="$hrefResolved"/></xsl:when>
                           <xsl:otherwise><xsl:text><xsl:value-of select="$void"/></xsl:text></xsl:otherwise>
                       </xsl:choose>
               </xsl:otherwise>
             </xsl:choose>
        </xsl:variable>
             
        <xsl:choose>
            <xsl:when test="starts-with($href,'mailto:')">
                <xsl:call-template name="mail-antispam">
                    <xsl:with-param name="mail" select="$href"></xsl:with-param>
                    <xsl:with-param name="class" select="@xrefstyle"></xsl:with-param>
                    <xsl:with-param name="title" select="@xlink:title"></xsl:with-param>
                    <xsl:with-param name="apply-templates" select="'true'"></xsl:with-param>
                </xsl:call-template>
            </xsl:when>
            
            <xsl:otherwise>
                <xsl:text><a></xsl:text>
                    <xsl:attribute name="href"><xsl:value-of select="$href"/></xsl:attribute>
                    
                    <xsl:call-template name="link-title-attribute">
                        <xsl:with-param name="href" select="$href"/>
                    </xsl:call-template>
                    
                    <xsl:call-template name="link-class-attribute">
                        <xsl:with-param name="href" select="$href"/>
                    </xsl:call-template>
                       
                    <xsl:if test="@xlink:show = 'new'">
                        <xsl:attribute name="target">_blank</xsl:attribute>
                    </xsl:if>
                       
                    <xsl:apply-templates/>
                <xsl:text></a></xsl:text>
            </xsl:otherwise>
        </xsl:choose>
        
    </xsl:template>
    
</xsl:stylesheet>

Peut être avez-vous une idée sur l'origine de cette erreur ?
Je vous remercie

Offline

#6 23/03/2017 14:47:58

Laurence Aumeunier
Expert Team
Registered: 10/08/2010
Posts: 154

Re: Supprimer download=true pour les liens des documents attachés ?

Bonjour,

L' erreur est la suivante :

Caused by: org.apache.xpath.domapi.XPathStylesheetDOM3Exception: Le préfixe doit se convertir en espace de noms : docbook

Il manque la déclaration du namespace "docbook" puisqu'il est utilisé ici :

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
                            xmlns:i18n="http://apache.org/cocoon/i18n/2.1" 
                            xmlns:ametys="org.ametys.web.transformation.xslt.AmetysXSLTHelper"
                            xmlns:docbook="http://docbook.org/ns/docbook"
                            exclude-result-prefixes="ametys docbook">

Laurence Aumeunier
Ametys Expert

Offline

Board footer

Powered by FluxBB