Koppla velocitymallar till fil
Med att “koppla velocitymallar till fil” menas filer som synkas upp till filarkivet kan används av en Sitevision modul där man har möjlighet att ställa in egna mallar.
För detta behövs två delar: rendering och själva mallen.
Renderingen är ett stycke kod som laddar in mallen från en fil i webbplatsens filarkiv och renderar denna i modulen.
Mallen som finns i modulen kan sparas ner i en egen fil.
På detta sätt kan man underlätta utveckling samt återanvända mallar i flera instanser av en modul.
Generell
Sökvägen, $path
, pekar ut var i filarkivet velocity filen ligger.
Den $context
som sätt kan skilja från modul till modul, vanligt är det att $portlet
används men det får man utläsa från modulen standardmall.
#set ($path = "System/snippets/path/to/template.vm")
#set ($response = $request.getAttribute('sitevision.context.render').response)#set ($writer = $response.writer)
#set ($nodeTreeUtil = $sitevisionUtils.nodeTreeUtil)#set ($resourceLocatorUtil = $sitevisionUtils.resourceLocatorUtil)#set ($fileUtil = $sitevisionUtils.fileUtil)#set ($velocityRenderer = $sitevisionUtils.velocityRenderer)
#set ($templateFile = $nodeTreeUtil.getNode($resourceLocatorUtil.getFileRepository(), $path))
#if ($templateFile) #set ($template = $fileUtil.getContentAsString($templateFile)) #set ($context = $velocityRenderer.getVelocityContext($request, $writer)) $context.put('portlet', $portlet) $velocityRenderer.render($context, $template)#else <p style="color: red; margin: 0;">Template file not found: $path</p>#end
Sökmoduler
Sökvägen, $path
, pekar ut var i filarkivet velocity filen ligger.
För sökmodulerna kan man förenkla inläsningen lite och slippa sätta context själv.
#set ($path = "System/snippets/path/to/template.vm")
#set ($nodeTreeUtil = $sitevisionUtils.nodeTreeUtil)#set ($resourceLocatorUtil = $sitevisionUtils.resourceLocatorUtil)#set ($scriptUtil = $sitevisionUtils.scriptUtil)#set ($fileUtil = $sitevisionUtils.fileUtil)
#set ($templateFile = $nodeTreeUtil.getNode($resourceLocatorUtil.getFileRepository(), $path))
#if ($templateFile) #set ($template = $fileUtil.getContentAsString($templateFile)) $velocityEvaluator.evaluate($template)#else <p style="color: red; margin: 0;">Template file not found: $path</p>#end
Mallar som kan ändras för sök:
did_you_mean.vm
error.vm
facets_and_sorting.vm
hit_count.vm
hits.vm
pagination.vm
search_form.vm
Skapa kopplingarna i sökmodulen:
- Dubbelklicka på sök-modulen.
- Välj Avancerat.
- Skrolla ner till Mallar
- För varje “Använd egen mall för ***” kopiera innehållet, skapa upp en fil och lägg till renderingskoden i dess ställe. Dvs:
- För “Använd egen mall för sökträffar” ska snippeten
hits.vm
in. - För “Använd egen mall för uppdelning av träffar” ska
pagination.vm
in.
- För “Använd egen mall för sökträffar” ska snippeten
- Gör detta för samtliga snippets.
När allt är korrekt uppsatt är det bara att spara ändringarna i en kod-fil, då kommer ändringarna att slå igenom automatiskt för sök-modulen.