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

Post on 02-Jul-2015

224 Views

Category:

Internet

4 Downloads

Preview:

Click to see full reader

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.

Transcript

Egna mallar i moduler2

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

”myObject””myOtherObject”

”Velocity Context”

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

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

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

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

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

StinaOlle

Velocity-kod Output

StinaStina

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

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

Operatorer/utvärdering

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

● Icke-existerande/null är ”false”

Egna mallar i moduler – 1. Velocity

Iteration - #foreach in #end

13

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

● Implicit #set

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

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

Children

Node

Node

PropertyType

STRINGBOOLEANLONGDOUBLEDATE...WEAKREFERENCE

Node

Properties

NodeType

Name Identifier

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ä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

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

24

$jcrSession

Egna mallar i moduler

25

$sitevisionUtils

Egna mallar i moduler

26

Properties

● Namn● PropertyType

$portlet har properties

● Noder har properties

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

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

top related