# Koppla velocitymallar till fil

> **Fungerar inte sedan 2025.05.1**
>
> På grund av refaktorisering av renderingsramverket för Velocity fungerar inte längre kopplingen av velocitymallar till fil.\
> Läs mer i [Sitevisions release notes för 2025.05.1](https://developer.sitevision.se/archives/release-notes/release-notes/2025-05-15-release-notes-sitevision-2025-05-1#:~:text=a%20future%20release-,%5BSV%2D38452%5D,-Major%20refactor%20of).

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

```text
#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**

```text
#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.