2017-05-15 5 views
0

Ich hoffe, dass dies nur ein einfaches Problem für jemanden sein sollte, der regelmäßig Benutzermakros für Konfluenz schreibt.Confluence Benutzermakro für die Woche des Jahres

Ich möchte einfach nur die Woche des Jahres auf der Seite anzeigen. Ich habe den Benutzer-Makro mit den üblichen Metadaten erstellt und enthalten die folgenden nur für jetzt das aktuelle Datum:

## @noparams 
<div>$content.currentDate</div> 

Die Version der Einmündung ist 5.9.8 und ich habe die documentation gesucht, um zu versuchen und alle Methoden finden für die Eigenschaft 'currentDate', aber es ist nicht dokumentiert, dass das currentDate-Feld sogar für das ContentEntityObject ($ content) existiert. Ich habe versucht, '$ content.currentDate.get (3)' zu verwenden, da ich glaube, dass Java die Woche des Jahres zurückgibt, aber dann gibt Confluence nur den gesamten Block als reinen Text wieder.

Antwort

0

Der Zugriff auf Java-Objekte kann in der Geschwindigkeit kompliziert werden.

Theoretisch , wenn Sie könnten Zugang SimpleDateFormat, Sie so etwas tun würde ...

@noparams 
#set($dow = new SimpleDateFormat("EEEE").format($content.currentDate())) 
<div>$dow</div> 

Aber leider SimpleDateFormat ist nicht leicht von Geschwindigkeit.

Wenn clientseitige Rendering akzeptabel ist, dann ist es viel einfacher - einfach rollen Sie Ihre eigenen JavaScript:

@noparams 
<div class="dow"></div> 
<script> 
    (function() { 
     var days = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday']; 
     Date.prototype.getDayName = function() { 
      return days[ this.getDay() ]; 
     }; 
    })(); 

    AJS.toInit(function ($) { 
    $('.dow').text((new Date()).getDayName()); 
    }); 
</script> 
+0

Enthält Confluence die Geschwindigkeitswerkzeuge, z. B. DateTool? –

+0

Sehr nützliche Antwort. Schade, dass ich in der Makroumgebung nicht auf moment.js zugreifen kann. Ich habe deine Antwort kombiniert mit der einen [http://stackoverflow.com/questions/6117814/get-week-of-year-in-javascript-like-in-php] verwendet, um zu bekommen, was ich brauchen. Es gab jedoch ein paar Probleme: 1. Ich musste das HTTP wie beschrieben [hier] aktivieren (https://confluence.atlassian.com/confkb/how-to-use-javascript-in-confluence-313458839.html) 2. Ich musste das Makro an der Unterseite der Seite setzen, als das Schreiben des Textes erschien, um den folgenden Text in der Seite zu überschreiben, der einmal – sebpinski

+0

Hoppla genannt wurde, bemerkte gerade, dass Sie ** Woche des Jahres ** * nicht sagten * **Wochentag**. – dvdsmpsn

0

Aufbauend auf @dvdsmpsn mein Makro zur Verfügung gestellt hat sieht derzeit wie folgt aus:

## @noparams 

<div id='weeknumber'></div> 

<script> 
function getWeekNumber(d) { 
    d.setHours(0,0,0,0); 
    d.setDate(d.getDate() + 4 - (d.getDay()||7)); 
    var yearStart = new Date(d.getFullYear(),0,1); 
    var weekNo = Math.ceil((((d - yearStart)/86400000) + 1)/7); 
    return weekNo; 
} 

AJS.toInit(function ($) { 
    $('#weeknumber').text(getWeekNumber(new Date())); 
    }); 
</script> 

Es gibt ein paar Ärgernisse:

  1. Moment ist bereits in Konfluenz geladen, aber ich kann nicht scheinen zu acces s es aus der Makro-Umgebung
  2. Die HTML-Makro-Umgebung musste aktiviert sein, um die Verwendung von Javascript zu ermöglichen.
  3. Das Makro musste an der Basis der Confluence-Seite verwendet werden, da seine Verwendung den folgenden Text zu überschreiben schien, der im schreibgeschützten Format geschrieben wurde (nachdem die jQuery-Methode ausgeführt wurde)
Verwandte Themen