Bonjour,
La méthode itPub.getTemplatePath("query", true); retourne le chemin du gabarit choisit pour cette instance de publication avec l'usage "query".
Exemple:
- MonArticle > usage: query > doArticleQueryDisplay.jsp
Si aucun gabarit n'a été précisé pour cette instance la méthode retourne le gabarit par défaut. (Déterminé de différentes manières)
La méthode channel.getTypeEntry(itPub.getClass()).getTemplateFile(nomGabarit, nomUsage) n'existe pas. Il faut faire:
channel.getTypeEntry(itPub.getClass()).getTemplateEntry(fullname).getPath()
Note technique: Le paramètre fullname correspond à la String usage+"."+name.
Sachant que vous travaillez sur tous les type (en faisant getTypeEntry(itPub.getClass())). Il est important de déclarer dans chacun des type un gabarit avec le nom recherché.
Exemple:
- Article > name: test1> path: doTest1ArticleQueryTemplate.jsp > usage: Query
- Article > name: test2> path: doTest2ArticleQueryTemplate.jsp > usage: Query
- SmallNews > name: tes1t > path: doTest1SmallNewsQueryTemplate.jsp > usage: Query
Ce qui veux dire: 10 Types x 5 affichages = 50 Gabarits !
Nous venons d'évoquer la solution, mais quelle est le problème en amont que vous essayez de résoudre ?
Si l'objectif est de dire:
- J'ai une Portlet Query/Foreach
- Je précise sur cette instance que je souhaite avoir un affichage "Test1" et sur une autre instance un affichage "Test2"
Alors la solution est peut-être plus simple:
Solution 1: Créer des gabarits d'affichage de PortletQuery/Foreach ou de PortletQuery/ForeachDetails
- Dans ces gabarits faire un look commun à tous vos types
- Titre, Catégories, Abstract, Photo sont des champs communs des Publications
- Si quelques champs divergent encore.
- Vous pouvez faire hériter vos types d'un Type abstrait commun
- Ou faire des
If () dans la JSP
C'est ce qui est fait par la PortletQuery/ForeachDetails qui propose des looks commun à tous les types au lieu d'inclure le gabarit d'affichage de chaque type. Le gros avantage est d'avoir un affichage homogène quelque soit ne nombre de types. 5 affichages = 5 gabarits de PortletQueryForeachDetails.
Solution 2: Créer des usages test1, test2, ...
Dans le gabarit de la PortletQuery/Foreach préciser que vous travaillez sur l'usage test1, test2, ...
<%@ include file='/jcore/doInitPage.jsp' %>
<%@ include file='/jcore/portal/doPortletParams.jsp' %>
<%
PortletQueryForeach box = (PortletQueryForeach) portlet;
jcmsContext.setTemplateUsage("test1");
%>
<%@ include file='doQuery.jsp' %>
<%@ include file='doSort.jsp' %>
<%@ include file='doForeachHeader.jsp' %>
<jsp:include page='<%= "/"+itPub.getTemplatePath(jcmsContext) %>' flush='true' />
<%@ include file='doForeachFooter.jsp' %>
<%@ include file='doPager.jsp' %>
Et pour chaque type déclarer un gabarit pour cet usage:
<?xml version="1.0" encoding="UTF-8"?>
<templates version="5.0">
<template name="custom" usage="test1" file="doArticleTest1Display.jsp">
<label xml:lang="en">Test1 template</label>
<label xml:lang="fr">Gabarit custom</label>
</template>
<template name="custom" usage="test2" file="doArticleTest2Display.jsp">
<label xml:lang="en">Test2 template</label>
<label xml:lang="fr">Gabarit custom</label>
</template>
<template name="default" usage="full" file="doArticleFullDisplay.jsp">
<label xml:lang="en">Default template</label>
<label xml:lang="fr">Gabarit par defaut</label>
<description xml:lang="en">The default template for this publication</description>
<description xml:lang="fr">Le gabarit par defaut pour cette publication</description>
</template>
</templates>
Vous faites ensuite votre look dans doArticleTest1Display.jsp, doArticleTest2Display.jsp, doSmallnewsTest1Display.jsp, ...
Conclusion
La solution 1 est la plus adaptée si vos types divergent peu. J'imagine que c'est le cas étant donné que vous souhaitez présenter tous les résultats dans une même boite.
Le name d'un gabarit est une information technique. Vous souhaitez utiliser un gabarit en fonction du contexte (un paramètre de la PQF) dans ce cas "l'usage" est plus adapté (en liste, résultat de recherche, ...) et c'est dans ce sens que l'API a été pensée.