Modifitation de l'affichage de date

cancel
Showing results for 
Search instead for 
Did you mean: 
narcomed
Active Member

Modifitation de l'affichage de date

Version Alfresco: alfresco-4.2.c
OS: Centos 6.4

Bonjour j'aimerais savoir si nous pouvons modifier la date d'affichage sur Alfresco Share

*Voir le lien ici*
http://imgur.com/bACpN46

[img]http://imgur.com/bACpN46[/img]

Je voudrais faire en sorte qu'il affiche automatiquement la date exact au lieu d'une date relative.  Je n'ai pas vraiment trouvé d'explication a ce propos.  Merci grandement

1 Reply
cleseach
Active Member II

Re: Modifitation de l'affichage de date

Bonjour,

La réponse est "oui".
Les informations qui sont affichées dans la liste des documents sont issues de la combinaison d'un "metadata template" et d'un "renderer" : cf. http://docs.alfresco.com/4.0/topic/com.alfresco.enterprise.doc/concepts/doclib-client-side-template-....

La configuration par défaut de Share nous indique (extrait):
<!–
         Custom Metadata Templates for the Document Library Browse View

         Use view="simple" or view="detailed" to limit the display to one particular view.
      –>
      <metadata-templates>
         <!– Default (fallback) –>
         <template id="default">
            <line index="10" id="date">{date}{size}</line>
            <line index="20" id="description" view="detailed">{description}</line>
            <line index="30" id="tags" view="detailed">{tags}</line>
            <line index="40" id="categories" view="detailed" evaluator="evaluator.doclib.metadata.hasCategories">{categories}</line>
            <line index="50" id="social" view="detailed">{social}</line>
         </template>


On voit donc que pour la ligne "date", le renderer "date" et le renderer "size" vont être appelé.
Ces renderers sont définis dans le fichier "documentlist.js". Pour la date :

         this.registerRenderer("date", function(record, label)
         {
            var jsNode = record.jsNode,
               properties = jsNode.properties,
               html = "";

            var dateI18N = "modified", dateProperty = properties.modified.iso8601;
            if (record.workingCopy && record.workingCopy.isWorkingCopy)
            {
               dateI18N = "editing-started";
            }
            else if (dateProperty === properties.created.iso8601)
            {
               dateI18N = "created";
            }

            html = '<span class="item">' + label + this.msg("details." + dateI18N + "-by", $relTime(dateProperty), Alfresco.DocumentList.generateUserLink(this, properties.modifier)) + '</span>';

            return html;
         });


La partie responsable de la mise en forme de la date (format "relatif") est :
$relTime(dateProperty)

Pour un format date "exact", il faudrait avoir :
$date(dateProperty)


Vous comprenez donc maintenant que le but du jeu va être de remplacer le renderer utilisé pour la date.
Pour cela, nous allons commencer par écrire le renderer suivant :

(function()
{
   /**
    * Alfresco Slingshot aliases
    */
   var $html = Alfresco.util.encodeHTML,
       $date = function $date(date, format) { return Alfresco.util.formatDate(Alfresco.util.fromISO8601(date), format); };

   if (Alfresco.DocumentList)
   {    
        YAHOO.Bubbling.fire("registerRenderer",
        {
           propertyName: "customdate",
           renderer: function description_renderer(record, label)
           {
            var jsNode = record.jsNode,
               properties = jsNode.properties,
               html = "";

            var dateI18N = "modified", dateProperty = properties.modified.iso8601;
            if (record.workingCopy && record.workingCopy.isWorkingCopy)
            {
               dateI18N = "editing-started";
            }
            else if (dateProperty === properties.created.iso8601)
            {
               dateI18N = "created";
            }

            html = '<span class="item">' + label + this.msg("details." + dateI18N + "-by", $date(dateProperty), Alfresco.DocumentList.generateUserLink(this, properties.modifier)) + '</span>';

            return html;
          }
      });
   }
})();

Ce code doit être placé dans un dossier de la webapp Share, par exemple "share/extension/components/documentlibrary/date-renderer.js", et référencé dans share-config-custom.xml :

<config evaluator="string-compare" condition="DocLibCustom">
  <dependencies>
    <js src="/extension/components/documentlibrary/date-renderer.js" />
  </dependencies>
</config>


La dernière étape est d'utiliser ce nouveau renderer en remplacement du précédent. La section suivante est à placer dans share-config-custom.xml :

<config evaluator="string-compare" condition="DocumentLibrary">
  <metadata-templates>
    <template id="default">
      <line index="10" id="date">{customdate}{size}</line>
    </template>
  </metadata-templates>
</config>


Avec tout ceci, vous devriez atteindre votre objectif.

Cordialement,
Charles Le Seac'h