Upload
sitevision
View
226
Download
4
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
Egna mallar i moduler2
Magnus Lövgren
@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