ݺߣ

ݺߣShare a Scribd company logo
Egna mallar i moduler - Magnus Lövgren - SiteVisiondagarna 2014
Egna mallar i moduler 
2
Magnus Lövgren 
magnus.lovgren@sitevision.se 
@magloven 
3 
Utvecklare - Sök & API
Egna mallar i moduler 
Agenda 
● Velocity 
● SiteVision API 
● Datamodell 
● Funktioner 
● Tillgängligt i mallen 
4
Egna mallar i moduler – 1. Velocity 
1. Velocity 
● $ 
● #set 
● #if / #elseif / #else / #end 
● #foreach #end 
● ## 
● #*... *# 
5 
http://help.sitevision.se/velocity
Egna mallar i moduler – 1. Velocity 
$ - referens 
● $<namn> 
● ${<namn>} 
6 
”Velocity Context” 
”myObject” 
”myOtherObject”
Egna mallar i moduler – 1. Velocity 
Access 
7 
$myObject.getName() 
$myObject.Name 
$myObject.name 
”myObject” 
$myObject.setName('Nisse') 
$myObject.setName("Nisse") 
$myObject.setName($myString) 
String getName() 
void setName(String aName) 
...
Egna mallar i moduler – 1. Velocity 
Output 
Velocity-kod Output 
<p> 
Sätter namnet till Anna 
$myObject.setName('Anna') 
</p> 
<p>Hej $myObject.name</p> 
8 
● Allt som är kvar efter evaluering 
<p> 
Sätter namnet till Anna 
</p> 
<p>Hej Anna</p>
Egna mallar i moduler – 1. Velocity 
Tilldelning - #set 
9 
#set ($name = 'Stina') 
#set ($age = 30) 
#set ($together = $name + ' är ' + $age + ' år') 
#set ($ageNextYear = $age + 1) 
#set ($retire = 65 - $age)
Egna mallar i moduler – 1. Velocity 
10 
● Fallgrop - Tilldelar INTE null 
Velocity-kod Output 
#set ($name = 'Stina' ) 
$name 
#set ($name = $obj.tryGetOlle()) 
$name 
Stina 
Olle 
Stina 
Stina
Egna mallar i moduler – 1. Velocity 
Selektion - #if #elseif #else #end 
11 
#if ($age <= 10) 
… 
#elseif ($age < 65) 
… 
#else 
... 
#end 
#if ($count > 0) 
... 
#end 
#if ($success) 
… 
#else 
... 
#end
Egna mallar i moduler – 1. Velocity 
12 
Operatorer/utvärdering 
● ! == ”not” 
● && == ”and” 
● || == ”or” 
● Icke-existerande/null är ”false” 
#if ($user && (!$user.active || $user.obsolete)) 
... 
#end
Egna mallar i moduler – 1. Velocity 
Iteration - #foreach in #end 
13 
● Implicit #set 
#foreach ($user in $userList) 
… 
$user.age 
#end
Egna mallar i moduler – 2. API 
2. SiteVision API 
● JCR 
● Datamodell 
● Utilities 
● Funktioner / modellhjälp 
14 
http://help.sitevision.se/api 
http://help.sitevision.se/javadoc
Egna mallar i moduler – 2. API:JCR 
API del 1 - JCR 
● Java Content Repository 
● JSR 283 (JSR 170) 
● Generell standard 
● Trädstruktur 
● SiteVision implementerar 
Level 1 (”Läs”) 
15
Egna mallar i moduler – 2. API:JCR 
Grundläggande koncept 
16 
Parent 
Name Identifier 
NodeType 
Children 
Node 
PropertyType 
Node 
STRING 
BOOLEAN 
LONG 
DOUBLE 
DATE 
... 
WEAKREFERENCE 
Node 
Properties 
Path
Egna mallar i moduler – 2. API:JCR 
Jobba med JCR 
● Träduppbyggnad? 
● Nod-typer? 
● Properties för resp. nod-typ? 
● Typ för resp. property? 
17 
http://help.sitevision.se/nodetypes
Egna mallar i moduler – 2. API:JCR 
18 
Träd 
sv:page (En sida) 
sv:pageContent 
sv:referenceLayout (Mittenspalt) 
sv:portlet (En textmodul) 
sv:layoutRepository 
sv:layout ("Absolut innehåll") 
sv:localImageRepository ("Bilder på sidan") 
sv:image 
sv:localFileRepository ("Filer på sidan") 
sv:file 
sv:pageCommentRepository ("Sidkommentarer") 
sv:pageComment 
sv:ratingRepository ("Betyg för sidan") 
sv:rating 
sv:metadataDefinitionRepository 
sv:metadata...Definition 
sv:page (En undersida) 
sv:pageContent
Egna mallar i moduler – 2. API:JCR 
Vanliga metoder 
● Parent: → Node.getParent() 
● Children: → Node.getNodes() 
● Lookup: → Node.getNode(RelativePathString) 
→ Session.getNodeByIdentifier(Identifier) 
● Property: → Node.getProperty(Name).get<TYP>() 
19
Egna mallar i moduler – 2. API:JCR 
Potentiella svårigheter 
● Hitta noder 
● Iterera ”rätt” noder 
● Hämta properties 
● RepositoryException 
20
Egna mallar i moduler – 2. API:Utilities 
API del 2 - Utilities 
● JCR-hjälp 
→ Genvägar 
→ Properties 
→ ... 
● Funktioner 
→ Skapa sida 
→ Lägg till medlem i grupp 
→ ... 
21
Egna mallar i moduler – 2. API:JCR/Utilities 
22 
javax.jcr.* 
JCR 
senselogic.* 
Utilities
Egna mallar i moduler 
3. Tillgängligt i den egna mallen 
23
Egna mallar i moduler 
$jcrSession 
24
Egna mallar i moduler 
$sitevisionUtils 
25
Egna mallar i moduler 
26 
Properties 
● Noder har properties 
● Namn 
● PropertyType 
$portlet har properties
Egna mallar i moduler 
Ex: Hämta Boolean-property 
● Via Node 
27 
#set ($use = $portlet.getProperty( 'useActiveFont' ).getBoolean()) 
● Via PropertyUtil 
#set ($propertyUtil = $sitevisionUtils.propertyUtil) 
... 
#set ($use = $propertyUtil.getBoolean($portlet, 'useActiveFont' ))
Egna mallar i moduler 
28 
Demo 
● Söklistningsmodulen
Egna mallar i moduler – 2. API:Utilities 
API-tips: JCR-utilities 
● PropertyUtil 
→ läsa properties 
● PortletContextUtil + ResourceLocatorUtil 
→ hitta noder 
● NodeIteratorUtil + NodeTreeUtil 
→ iterera och filtrera noder 
● NodeComparatorUtil + NodeFilterUtil 
→ sortera och filtrera noder/collections 
29
Egna mallar i moduler – 2. API:Utilities 
API-tips: Skript/Velocity-utilities 
● ScriptUtil 
→ underlätta 
● InstanceTypeUtil 
→ kontrollera typ 
● InstanceCreatorUtil 
→ skapa objekt 
30
Egna mallar i moduler – 2. API:Utilities 
API-tips: Renderings-utilities 
● LinkRenderer 
→ rendera länkar 
● ImageRenderer + ImageLinkRenderer 
→ rendera bilder 
● OutputUtil 
→ rendera annan modul 
● BuddyIconRenderer 
→ rendera profilbilds-miniatyren för en social identitet 
31

More Related Content

Egna mallar i moduler - Magnus Lövgren - SiteVisiondagarna 2014

  • 2. Egna mallar i moduler 2
  • 3. Magnus Lövgren magnus.lovgren@sitevision.se @magloven 3 Utvecklare - Sök & API
  • 4. Egna mallar i moduler Agenda ● Velocity ● SiteVision API ● Datamodell ● Funktioner ● Tillgängligt i mallen 4
  • 5. Egna mallar i moduler – 1. Velocity 1. Velocity ● $ ● #set ● #if / #elseif / #else / #end ● #foreach #end ● ## ● #*... *# 5 http://help.sitevision.se/velocity
  • 6. Egna mallar i moduler – 1. Velocity $ - referens ● $<namn> ● ${<namn>} 6 ”Velocity Context” ”myObject” ”myOtherObject”
  • 7. Egna mallar i moduler – 1. Velocity Access 7 $myObject.getName() $myObject.Name $myObject.name ”myObject” $myObject.setName('Nisse') $myObject.setName("Nisse") $myObject.setName($myString) String getName() void setName(String aName) ...
  • 8. Egna mallar i moduler – 1. Velocity Output Velocity-kod Output <p> Sätter namnet till Anna $myObject.setName('Anna') </p> <p>Hej $myObject.name</p> 8 ● Allt som är kvar efter evaluering <p> Sätter namnet till Anna </p> <p>Hej Anna</p>
  • 9. Egna mallar i moduler – 1. Velocity Tilldelning - #set 9 #set ($name = 'Stina') #set ($age = 30) #set ($together = $name + ' är ' + $age + ' år') #set ($ageNextYear = $age + 1) #set ($retire = 65 - $age)
  • 10. Egna mallar i moduler – 1. Velocity 10 ● Fallgrop - Tilldelar INTE null Velocity-kod Output #set ($name = 'Stina' ) $name #set ($name = $obj.tryGetOlle()) $name Stina Olle Stina Stina
  • 11. Egna mallar i moduler – 1. Velocity Selektion - #if #elseif #else #end 11 #if ($age <= 10) … #elseif ($age < 65) … #else ... #end #if ($count > 0) ... #end #if ($success) … #else ... #end
  • 12. Egna mallar i moduler – 1. Velocity 12 Operatorer/utvärdering ● ! == ”not” ● && == ”and” ● || == ”or” ● Icke-existerande/null är ”false” #if ($user && (!$user.active || $user.obsolete)) ... #end
  • 13. Egna mallar i moduler – 1. Velocity Iteration - #foreach in #end 13 ● Implicit #set #foreach ($user in $userList) … $user.age #end
  • 14. Egna mallar i moduler – 2. API 2. SiteVision API ● JCR ● Datamodell ● Utilities ● Funktioner / modellhjälp 14 http://help.sitevision.se/api http://help.sitevision.se/javadoc
  • 15. Egna mallar i moduler – 2. API:JCR API del 1 - JCR ● Java Content Repository ● JSR 283 (JSR 170) ● Generell standard ● Trädstruktur ● SiteVision implementerar Level 1 (”Läs”) 15
  • 16. Egna mallar i moduler – 2. API:JCR Grundläggande koncept 16 Parent Name Identifier NodeType Children Node PropertyType Node STRING BOOLEAN LONG DOUBLE DATE ... WEAKREFERENCE Node Properties Path
  • 17. Egna mallar i moduler – 2. API:JCR Jobba med JCR ● Träduppbyggnad? ● Nod-typer? ● Properties för resp. nod-typ? ● Typ för resp. property? 17 http://help.sitevision.se/nodetypes
  • 18. Egna mallar i moduler – 2. API:JCR 18 Träd sv:page (En sida) sv:pageContent sv:referenceLayout (Mittenspalt) sv:portlet (En textmodul) sv:layoutRepository sv:layout ("Absolut innehåll") sv:localImageRepository ("Bilder på sidan") sv:image sv:localFileRepository ("Filer på sidan") sv:file sv:pageCommentRepository ("Sidkommentarer") sv:pageComment sv:ratingRepository ("Betyg för sidan") sv:rating sv:metadataDefinitionRepository sv:metadata...Definition sv:page (En undersida) sv:pageContent
  • 19. Egna mallar i moduler – 2. API:JCR Vanliga metoder ● Parent: → Node.getParent() ● Children: → Node.getNodes() ● Lookup: → Node.getNode(RelativePathString) → Session.getNodeByIdentifier(Identifier) ● Property: → Node.getProperty(Name).get<TYP>() 19
  • 20. Egna mallar i moduler – 2. API:JCR Potentiella svårigheter ● Hitta noder ● Iterera ”rätt” noder ● Hämta properties ● RepositoryException 20
  • 21. Egna mallar i moduler – 2. API:Utilities API del 2 - Utilities ● JCR-hjälp → Genvägar → Properties → ... ● Funktioner → Skapa sida → Lägg till medlem i grupp → ... 21
  • 22. Egna mallar i moduler – 2. API:JCR/Utilities 22 javax.jcr.* JCR senselogic.* Utilities
  • 23. Egna mallar i moduler 3. Tillgängligt i den egna mallen 23
  • 24. Egna mallar i moduler $jcrSession 24
  • 25. Egna mallar i moduler $sitevisionUtils 25
  • 26. Egna mallar i moduler 26 Properties ● Noder har properties ● Namn ● PropertyType $portlet har properties
  • 27. Egna mallar i moduler Ex: Hämta Boolean-property ● Via Node 27 #set ($use = $portlet.getProperty( 'useActiveFont' ).getBoolean()) ● Via PropertyUtil #set ($propertyUtil = $sitevisionUtils.propertyUtil) ... #set ($use = $propertyUtil.getBoolean($portlet, 'useActiveFont' ))
  • 28. Egna mallar i moduler 28 Demo ● Söklistningsmodulen
  • 29. Egna mallar i moduler – 2. API:Utilities API-tips: JCR-utilities ● PropertyUtil → läsa properties ● PortletContextUtil + ResourceLocatorUtil → hitta noder ● NodeIteratorUtil + NodeTreeUtil → iterera och filtrera noder ● NodeComparatorUtil + NodeFilterUtil → sortera och filtrera noder/collections 29
  • 30. Egna mallar i moduler – 2. API:Utilities API-tips: Skript/Velocity-utilities ● ScriptUtil → underlätta ● InstanceTypeUtil → kontrollera typ ● InstanceCreatorUtil → skapa objekt 30
  • 31. Egna mallar i moduler – 2. API:Utilities API-tips: Renderings-utilities ● LinkRenderer → rendera länkar ● ImageRenderer + ImageLinkRenderer → rendera bilder ● OutputUtil → rendera annan modul ● BuddyIconRenderer → rendera profilbilds-miniatyren för en social identitet 31