Modifier le fichier

Intégration d'une fiche

Les fiches de K-Sup sont servies par défaut par le ContentHandler, celui-ci va récupérer les viewPreparer de type template afin de retrouver la liste des templates de fiche disponibles pour le template de site courant.

Le template va représenter la structure globale de la page, celui-ci défini les types de vue présents à la racine de la vue principale (exemple : head, header, ..., body, ..., footer).

Création d'un template de fiche

Par défaut, le template de fiche est défini globalement pour l'ensemble des fiches (via le template du site), il est possible de définir un template de fiche spécifique pour un type de contenu.

  1. Création d'un viewPreparer qui hérite de AbstractContentViewPreparer
public class ArticleTemplateViewPreparer extends AbstractContentViewPreparer<ArticleTemplateViewModel> {
    
    @Override
    public boolean accept(ContentContext context) {
        return context.getContent() instanceof ArticleBean;
    }

    @Override
    public ArticleTemplateViewModel prepare(FrontContext context, final Map<String, List<IViewPreparer>> preparers) {
        return super.prepare(context, preparers);
    }
}
  1. Création du viewModel, l'id du viewModel des fiches est par défaut mainViewModel (défini dans MainViewModel).
public class ArticleTemplateViewModel extends AbstractContentViewModel {

}
  1. Définition du bean viewPreparer avec le type template
<bean id="articleTemplateViewPreparer" class="com.kosmos.preparer.ArticleTemaplateViewPreparer">
    <property name="order" value="-100" />
    <property name="type" value="template" />
    <property name="view" value="/WEB-INF/jsp/article.jsp" />
    <property name="expectedViewTypes">
        <list>
            <value>head</value>
            <value>header</value>
            <value>body</value>
            <value>footer</value>
            <value>autologin</value>
        </list>
    </property>
</bean>
  1. Création de la jsp principale qui effectue l'insertion des sous-vues
<%@ page trimDirectiveWhitespaces="true" errorPage="/WEB-INF/jsp/error/exception.jsp" %>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%--@elvariable id="headViewModel" type="com.kosmos.core.model.fragments.HeadViewModel"--%>
<%--@elvariable id="headerViewModel" type="com.kosmos.core.header.HeaderViewModel"--%>
<%--@elvariable id="bodyViewModel" type="com.kosmos.body.BodyViewModel"--%>
<%--@elvariable id="footerViewModel" type="com.kosmos.footer.FooterViewModel"--%>

<!DOCTYPE html>
<html>
<c:if test="${not empty headViewModel.view}">
    <jsp:include page="${headViewModel.view}"/>
</c:if>
<body class="k-body">
<c:if test="${not empty headerViewModel.view}">
    <jsp:include page="${headerViewModel.view}"/>
</c:if>
<jsp:include page="${bodyViewModel.view}"/>
<c:if test="${not empty footerViewModel.view}">
    <jsp:include page="${footerViewModel.view}"/>
</c:if>
</body>
</html>

Création d'un contenu de fiche

  1. Création d'un viewPreparer qui hérite de AbstractContentViewPreparer
public class ArticleContentViewPreparer<V extends ArticleContentViewModel> extends AbstractContentViewPreparer<V> {

    @Override
    public boolean accept(final FrontContext context) {
        return ContentContext.of(context).getContent() instanceof ArticleBean;
    }

    @Override
    public V prepare(final FrontContext frontContext, final Map<String, List<IViewPreparer>> preparers) {
        final V viewModel = super.prepare(frontContext, preparers);
        final ContentContext contentContext = ContentContext.of(frontContext);
        final ArticleBean bean = contentContext.getContent();
        viewModel.setPublicationDate(PublicationDateProcessor.process(contentContext.getMetatag().getMetaDateMiseEnLigne(), bean.getDateModification()));
        viewModel.setDate(prepareDate(bean));
        ...
        return viewModel;
    }
}
  1. Création du viewModel (l'id du viewModel des fiches est par défaut mainViewModel (défini dans MainViewModel))
public class ArticleContentViewModel extends AbstractContentViewModel {

    private String corps;

    private String resume;

    private String dateCreation;

    private String dateUpdate;

    private String sousTitre = StringUtils.EMPTY;

    private Set<String> thematiques = new HashSet<>();
    
    ...
}
  1. Définition du bean viewPreparer avec le type content
<bean id="articleContentViewPreparer" class="com.kosmos.preparer.ArticleContentViewPreparer">
    <property name="type" value="content"/>
    <property name="view" value="/WEB-INF/jsp/article-content.jsp"/>
</bean>
  1. Création de la jsp d'affichage du contenu
<%@ page trimDirectiveWhitespaces="true" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="kuik" uri="kuik" %>
<%@ taglib prefix="kore" uri="kore" %>

<%--@elvariable id="mainViewModel" type="com.kosmos.article.ArticleContentViewModel"--%>
<%--@elvariable id="contentBoxViewModel" type="com.kosmos.content.box.ContentBoxViewModel"--%>

<div class="l-col-9°md l-col-12">
    <article class="grid">
        <c:if test="${not empty mainViewModel.topics}">
            <ul class="list list--inlined l-col-12">
                <c:forEach items="${mainViewModel.topics}" var="thematique">
                    <li class="list__item"><kuik:cartouche size="xl"><c:out value="${thematique}"/></kuik:cartouche></li>
                </c:forEach>
            </ul>
...
  1. Répéter les étapes 1 à 4 pour créer les sous-vues qui composeront la page