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