Hoppa till innehåll

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.

template_renderer.vm
#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.

template_renderer.vm
#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:

  1. Dubbelklicka på sök-modulen.
  2. Välj Avancerat.
  3. Skrolla ner till Mallar
  4. 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.
  5. 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.