31

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

Embed Size (px)

DESCRIPTION

I många av SiteVisions standardmoduler finns möjligheten att använda "egen mall" för att förändra renderingen av modulens resultat. Att göra en enkel justering av den HTML som finns i mallen är ofta trivialt men om logik-förändringar behöver göras så krävs kunskap om Velocity och SiteVisions publika API. Den här föreläsningen ger en introduktion till det som behövs för att kunna göra lite mer avancerade förändringar av egna mallar.

Citation preview

Page 1: Egna mallar i moduler - Magnus Lövgren - SiteVisiondagarna 2014
Page 2: Egna mallar i moduler - Magnus Lövgren - SiteVisiondagarna 2014

Egna mallar i moduler2

Page 3: Egna mallar i moduler - Magnus Lövgren - SiteVisiondagarna 2014

Magnus Lövgren

[email protected]

@magloven

3

Utvecklare - Sök & API

Page 4: Egna mallar i moduler - Magnus Lövgren - SiteVisiondagarna 2014

Egna mallar i moduler

Agenda● Velocity● SiteVision API

● Datamodell● Funktioner

● Tillgängligt i mallen

4

Page 5: Egna mallar i moduler - Magnus Lövgren - SiteVisiondagarna 2014

Egna mallar i moduler – 1. Velocity

1. Velocity● $● #set● #if / #elseif / #else / #end● #foreach #end

● ##● #*... *#

5

http://help.sitevision.se/velocity

Page 6: Egna mallar i moduler - Magnus Lövgren - SiteVisiondagarna 2014

Egna mallar i moduler – 1. Velocity

$ - referens● $<namn>● ${<namn>}

6

”myObject””myOtherObject”

”Velocity Context”

Page 7: Egna mallar i moduler - Magnus Lövgren - SiteVisiondagarna 2014

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)...

Page 8: Egna mallar i moduler - Magnus Lövgren - SiteVisiondagarna 2014

Egna mallar i moduler – 1. Velocity

Output

8

<p> Sätter namnet till Anna $myObject.setName('Anna')</p><p>Hej $myObject.name</p>

● Allt som är kvar efter evaluering

<p> Sätter namnet till Anna

</p><p>Hej Anna</p>

Velocity-kod Output

Page 9: Egna mallar i moduler - Magnus Lövgren - SiteVisiondagarna 2014

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)

Page 10: Egna mallar i moduler - Magnus Lövgren - SiteVisiondagarna 2014

Egna mallar i moduler – 1. Velocity

10

● Fallgrop - Tilldelar INTE null

#set ($name = 'Stina' )$name

#set ($name = $obj.tryGetOlle())$name

StinaOlle

Velocity-kod Output

StinaStina

Page 11: Egna mallar i moduler - Magnus Lövgren - SiteVisiondagarna 2014

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

Page 12: Egna mallar i moduler - Magnus Lövgren - SiteVisiondagarna 2014

Egna mallar i moduler – 1. Velocity

12

● ! == ”not”● && == ”and”● || == ”or”

Operatorer/utvärdering

#if ($user && (!$user.active || $user.obsolete)) ...#end

● Icke-existerande/null är ”false”

Page 13: Egna mallar i moduler - Magnus Lövgren - SiteVisiondagarna 2014

Egna mallar i moduler – 1. Velocity

Iteration - #foreach in #end

13

#foreach ($user in $userList) … $user.age#end

● Implicit #set

Page 14: Egna mallar i moduler - Magnus Lövgren - SiteVisiondagarna 2014

Egna mallar i moduler – 2. API

2. SiteVision API● JCR

● Datamodell● Utilities

● Funktioner / modellhjälp

14

http://help.sitevision.se/apihttp://help.sitevision.se/javadoc

Page 15: Egna mallar i moduler - Magnus Lövgren - SiteVisiondagarna 2014

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

Page 16: Egna mallar i moduler - Magnus Lövgren - SiteVisiondagarna 2014

Egna mallar i moduler – 2. API:JCR

Grundläggande koncept

16

Parent

Children

Node

Node

PropertyType

STRINGBOOLEANLONGDOUBLEDATE...WEAKREFERENCE

Node

Properties

NodeType

Name Identifier

Path

Page 17: Egna mallar i moduler - Magnus Lövgren - SiteVisiondagarna 2014

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

Page 18: Egna mallar i moduler - Magnus Lövgren - SiteVisiondagarna 2014

Egna mallar i moduler – 2. API:JCR

18

Trädsv:page (En sida)

sv:pageContentsv:referenceLayout (Mittenspalt)

sv:portlet (En textmodul)sv:layoutRepository

sv:layout ("Absolut innehåll")sv:localImageRepository ("Bilder på sidan")

sv:imagesv:localFileRepository ("Filer på sidan")

sv:filesv:pageCommentRepository ("Sidkommentarer")

sv:pageCommentsv:ratingRepository ("Betyg för sidan")

sv:ratingsv:metadataDefinitionRepository

sv:metadata...Definitionsv:page (En undersida)

sv:pageContent

Page 19: Egna mallar i moduler - Magnus Lövgren - SiteVisiondagarna 2014

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

Page 20: Egna mallar i moduler - Magnus Lövgren - SiteVisiondagarna 2014

Egna mallar i moduler – 2. API:JCR

Potentiella svårigheter● Hitta noder● Iterera ”rätt” noder● Hämta properties

● RepositoryException

20

Page 21: Egna mallar i moduler - Magnus Lövgren - SiteVisiondagarna 2014

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

Page 22: Egna mallar i moduler - Magnus Lövgren - SiteVisiondagarna 2014

Egna mallar i moduler – 2. API:JCR/Utilities

22

javax.jcr.*

JCR

senselogic.*

Utilities

Page 23: Egna mallar i moduler - Magnus Lövgren - SiteVisiondagarna 2014

Egna mallar i moduler

3. Tillgängligt i den egna mallen

23

Page 24: Egna mallar i moduler - Magnus Lövgren - SiteVisiondagarna 2014

Egna mallar i moduler

24

$jcrSession

Page 25: Egna mallar i moduler - Magnus Lövgren - SiteVisiondagarna 2014

Egna mallar i moduler

25

$sitevisionUtils

Page 26: Egna mallar i moduler - Magnus Lövgren - SiteVisiondagarna 2014

Egna mallar i moduler

26

Properties

● Namn● PropertyType

$portlet har properties

● Noder har properties

Page 27: Egna mallar i moduler - Magnus Lövgren - SiteVisiondagarna 2014

Egna mallar i moduler

● Via Node

27

#set ($use = $portlet.getProperty( 'useActiveFont' ).getBoolean())

● Via PropertyUtil

#set ($propertyUtil = $sitevisionUtils.propertyUtil)...#set ($use = $propertyUtil.getBoolean($portlet, 'useActiveFont' ))

Ex: Hämta Boolean-property

Page 28: Egna mallar i moduler - Magnus Lövgren - SiteVisiondagarna 2014

Egna mallar i moduler

28

Demo● Söklistningsmodulen

Page 29: Egna mallar i moduler - Magnus Lövgren - SiteVisiondagarna 2014

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

Page 30: Egna mallar i moduler - Magnus Lövgren - SiteVisiondagarna 2014

Egna mallar i moduler – 2. API:Utilities

API-tips: Skript/Velocity-utilities● ScriptUtil

underlätta→● InstanceTypeUtil

kontrollera typ→● InstanceCreatorUtil

skapa objekt→

30

Page 31: Egna mallar i moduler - Magnus Lövgren - SiteVisiondagarna 2014

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