]> juplo.de Git - maven-thymeleaf-skin/commitdiff
Projekt-Seite erstellt: Velocity-Template - Einlesen der Daten überarbeitet
authorKai Moritz <kai@juplo.de>
Fri, 8 Jul 2016 07:04:46 +0000 (09:04 +0200)
committerKai Moritz <kai@juplo.de>
Mon, 11 Jul 2016 16:55:59 +0000 (18:55 +0200)
Die Verarbeitung der Menüdaten wurde so überarbeitet, dass automatisch
erzeugte Seiten in dem explizit in der site.xml definierten Menü
überschrieben werden können. Dabei/dadurch wird dann der Name der Seite
überschrieben. Ggf. der Seite untergeordnete Unterseiten bleiben erhalten.
Außerdem bleibt die Seite auch weiterhin in anderen Untermenüs unter dem
alten Namen erhalten, falls sie in einem Untermenü eingetragen war.

Umsetzung:
Die Daten werden zunächst in eine Map eingelesen. Dabei werden die
unbenannten Menüs (dies sind in der Regel die von der Hand definierten
Menüs) zuletzt eingelesen. Wenn die selbe URI in mehreren Menüs definiert
ist, werden zuvor eingelesenen Einträge überschrieben. Dabei werden aber die
zuvor erkannten Kind-Knoten erhalten.

src/site/template.vm

index 4fda7f52f32c2071ce82df2c12507de6c40bba28..c91a1b20e8f156ee8c1e228b1425958d47176d61 100644 (file)
@@ -2,26 +2,68 @@
 <!-- Generated by Apache Maven Doxia Site Renderer#if( $doxiaSiteRendererVersion ) $doxiaSiteRendererVersion#end at $dateFormat.format( $currentDate ) -->
 
 
-## Automatisch generierte Seiten einlesen
 #set ( $pages = $project.getClass().forName('java.util.LinkedHashMap').newInstance() )
-#macro ( buildPages $items )
-  #foreach ( $item in $items )
-    #set ( $currentItemHref = $PathTool.calculateLink( $item.href, $relativePath ) )
-    #set ( $currentItemHref = $currentItemHref.replaceAll( '\\', '/' ) )
-    #set ( $sinkhole = $pages.put( $item.name, $currentItemHref ) )
-    #if ( !$item.items.empty )
-      #buildPages ( $item.items )
+#set ( $stack = $project.getClass().forName('java.util.LinkedList').newInstance() )
+#macro ( buildPages $menu )
+
+  #set ( $currentItemHref = $PathTool.calculateLink( $item.href, $relativePath ) )
+  #set ( $currentItemHref = $currentItemHref.replaceAll( '\\', '/' ) )
+
+  #if ($currentItemHref)
+    #set( $sinkhole = $stack.peek().childs.put($currentItemHref, $menu.name) )
+  #end
+
+  #set ( $page = $project.getClass().forName('java.util.LinkedHashMap').newInstance() )
+  #set ( $sinkhole = $page.put("name", $menu.name) )
+  #set ( $sinkhole = $page.put("uri", $currentItemHref) )
+  #set ( $sinkhole = $page.put("childs", $project.getClass().forName('java.util.LinkedHashMap').newInstance()) )
+  #set ( $sinkhole = $stack.push( $page ) )
+
+  #foreach ( $item in $menu.items )
+    #buildPages ( $item )
+  #end
+
+  #set ( $page = $stack.pop() )
+  #if ( $page.uri != "" )
+
+    #if ( $pages.containsKey($page.uri) )
+      #set ( $childs = $pages.get($page.uri).childs )
+      #set ( $sinkhole = $page.put("childs", $childs) )
+
+      <!-- OVERWRITING PAGE - uri: $page.uri, name: "$page.name", childs: $page.childs -->
+    #else
+
+      <!-- NEW PAGE --------- uri: $page.uri, name: "$page.name", childs: $page.childs -->
     #end
+
+    #set ( $sinkhole = $pages.put($page.uri, $page) )
+    #set ( $sinkhole = $page.remove("uri") )
+
+  #else
+
+    <!-- DONE WITH MENUE ---- #if($page.name)$page.name#else(no name)#end -->
   #end
 #end
+
+
+## Seiten einlesen
 #foreach ( $menu in $decoration.body.menus )
   ## Nur benannte Menüs werden berücksichtigt
   #if ($menu.name)
-    #buildPages ( $menu.items )
+    #buildPages ( $menu )
   #end
 #end
+#foreach ( $menu in $decoration.body.menus )
+  ## Nur unbenannte Menüs werden berücksichtigt
+  #if (!($menu.name))
+    #buildPages ( $menu )
+  #end
+#end
+
 <!-- $pages -->
 
+
+
 #set ( $crumbs = $project.getClass().forName('java.util.LinkedHashMap').newInstance() )
 #macro ( searchBreadcrumbTrail $items )
   #set ( $sep = '' )