Recherche

Sommaire

Pages enfant
  • Les contentViews

Vous regardez une version antérieure (v. /wiki/display/PROJESUPECM/Les+contentViews) de cette page.

afficher les différences afficher l'historique de la page

« Afficher la version précédente Vous regardez la version actuelle de cette page. (v. 2) afficher la version suivante »

Principe

Depuis les versions 5.4 de Nuxeo est apparue la notion de ContentViews.

Un contentView est un ensemble de paramètres qui permet de générer une liste d'objets (typiquement des documents) ainsi que de définir la façon dont ces derniers s'affichent.

On y définit donc :

  • Une requête NXQL permettant de générer la liste de documents. Cette requête recevra toujours comme paramètre contextuel l'identifiant du conteneur (l'endroit depuis lequel elle est exécutée).
  • La façon dont les résultats seront affichés
  • Un tri par défaut et une pagination
  • Des actions liées (copier / coller, suppression ...)
  • Des options de cache.

Les documents de type "conteneurs" (workspaces, folders, sections) sont associées à des contentViews qui gérent la façon dont s'affiche leur contenu.

Si l'on regarde le fichier ecm-types-contrib.xml du composant org.nuxeo.ecm.platform.types, on trouve la définition suivante pour les workspaces :

<type id="Workspace">
<label>Workspace</label>
[...]
Définition du layout heading (titre), utilisé quel que soit le mode et donc tout le temps présent :
     <layouts mode="any">
       <layout>heading</layout>
      </layouts>

Definition des layouts utilisés lorsque l'on modifie un workspace (formulaire de modification)
      <layouts mode="edit">
        <layout>heading</layout>
        <layout>dublincore</layout>
     </layouts>

Définition  des contentViews utilisés pour l'affichage des contenus du workspace (category=content)
      <contentViews category="content">
        <contentView>document_content</contentView>
 </contentViews>

Définition des contentViews utilisés pour l'affichage du contenus de  la corbeille (documents supprimés).
      <contentViews category="trash_content">
       <contentView>document_trash_content</contentView>
      </contentViews>
</type>

si l'on regarde maintenant un extrait du fichier définissant le contentView "document_content", celui-ci se présente ainsi :

<contentView name="document_content">
   <title>label.contentview.document_content</title>
      <translateTitle>true</translateTitle>
      <showTitle>false</showTitle>

      DEFINITION DE LA REQUETE PERMETTANT D'OBTENIR LA LISTE DE DOCUMENTS :
       <coreQueryPageProvider>
        <property name="coreSession">#{documentManager}</property>
        <whereClause docType="AdvancedSearch">
          <predicate parameter="ecm:fulltext" operator="FULLTEXT">
            <field schema="advanced_search" name="fulltext_all" />
          </predicate>
          <predicate parameter="dc:title" operator="FULLTEXT">
            <field schema="advanced_search" name="title" />
          </predicate>
          <predicate parameter="dc:modified" operator="BETWEEN">
            <field schema="advanced_search" name="modified_min" />
            <field schema="advanced_search" name="modified_max" />
          </predicate>

        DEBUT DE LA REQUETE NXQL, LE ? EST REMPLACE PAR LE PARAMETRE CONTEXTUEL #{currentDocument.id}
        On récupére donc tous les documents fils qui n'ont pas le facet hiddenInNavigation et qui ne sont pas à l'état supprimé.
          <fixedPart>
            ecm:parentId = ? AND ecm:isCheckedInVersion = 0 AND
            ecm:mixinType !=
            'HiddenInNavigation' AND ecm:currentLifeCycleState
            != 'deleted'
          </fixedPart>
        </whereClause>
        <parameter>#{currentDocument.id}</parameter>
       PARAMETRAGE DE TRI PAR DEFAUT (ici le titre du document) et nombre de documents (pagination) affichés par défaut.
        <sort column="dc:title" ascending="true" />
        <pageSize>20</pageSize>
      </coreQueryPageProvider>

      DEFINIT LE LAYOUT DU FORMULAIRE DE RECHERCHE PERMETTANT DE FILTRER LES RESULTATS
      <searchLayout name="document_content_filter"
        filterDisplayType="quick" />
      <showFilterForm>true</showFilterForm>

      AFFICHE LE SELECTEUR PERMETTANT DE CHANGER LA PAGINATION
       <showPageSizeSelector>true</showPageSizeSelector>
      <useGlobalPageSize>true</useGlobalPageSize>

      DETERMINE LES EVENEMENTS DEVANT ENGENDRER UN RAFRAICHISSEMENT DE LA REQUETE
      <refresh>
        <event>documentChanged</event>
        <event>documentChildrenChanged</event>
      </refresh>
      <cacheKey>#{currentDocument.id}</cacheKey>
      <cacheSize>10</cacheSize>

      DEFINITION DES LAYOUTS UTILISES POUR LA PRESENTATION DES RESULTATS
      <resultLayouts>
        <layout name="document_listing_ajax" title="document_listing"
          translateTitle="true" iconPath="/icons/document_listing_icon.png"
          showCSVExport="false" showPDFExport="false" showSyndicationLinks="true" />
        <layout name="document_listing_ajax_compact_2_columns" title="document_listing_compact_2_columns"
          translateTitle="true" iconPath="/icons/document_listing_compact_2_columns_icon.png"
          showCSVExport="false" showPDFExport="false" showSyndicationLinks="true" />
        <layout name="document_listing_ajax_icon_2_columns" title="document_listing_icon_2_columns"
          translateTitle="true" iconPath="/icons/document_listing_icon_2_columns_icon.png"
          showCSVExport="false" showPDFExport="false" showSyndicationLinks="true" />
      </resultLayouts>

      <selectionList>CURRENT_SELECTION</selectionList>
      <actions category="CURRENT_SELECTION_LIST" />

    </contentView>

Explication par l'exemple :

Notre objectif ici va être de ne plus affiché le champ "etat" du document dans les différents listings.

  • Aucune étiquette