MSXFAQ-Script:TGMenu
Hallo Frontpage Anwender, ich pflege diese Webseite mit über 700 statischen Seiten auf meinem Notebook mit FrontPage 2003 und bieten den Besuchern für eine einfache Navigation das Tigramenu links oben an. Die Struktur der Webseite pflege ich dabei in der Frontpage Navigation. Hier eine Momentaufnahme:
Sie können sicher verstehen, dass ich die Definition für TGMenu nicht von Hand erstellen will, sondern mir mit etwas VBA eine Routine geschrieben habe, die anhand der Frontpage Navigation eine Definition für Tigramenu erstellt. Der Code hierfür stelle ich hier kostenfrei bereit. Erwarten Sie aber bitte keinen umfangreichen Support.
Get the Code
Hier ist der benötigte Code:
' Frontpage VBA Macro to create a menu definition file für TigraMenu v2.0
' see http://www.softcomplex.com/products/tigra_menu/
' (c) 2005 Frank Carius http://www.msxfaq.de
Option Explicit
Const OUTPUT_FILE As String = "menu_items.js"
' name of the item definition file in the current web
Const menuiconhtm = "<img border=""0"" src=""/images/icon-menuhtm.gif""
align=""middle"">"
Const menuiconfld = "<img border=""0"" src=""/images/icon-menufld.gif""
align=""middle"">"
Sub TGMenu()
'Main procedure to build the tigra menu based on the fronpage
navigation structure
Call Logging(1, "BuildTGMenu: gestartet")
If ActiveWeb Is Nothing Then
Call
Logging(4, "BuildTGMenu: FEHLER: Kein Web geöffnet")
MsgBox "Please
open a web first to build the menu file !", vbOKOnly Or vbCritical
Exit Sub
End If
Open ActiveWeb.RootFolder.Name + "\" + OUTPUT_FILE für Output
As #1
Print #1, "var MENU_ITEMS = ["
Print #1, BuildTGSubMenu(ActiveWeb.RootNavigationNode, 0)
Print #1, "];"
Close #1
Call Logging(1, "BuildTGMenu: beendet")
End Sub
Function BuildTGSubMenu(ByRef node As NavigationNode, level As Integer) As
String
Dim childNode As NavigationNode
If node Is ActiveWeb.RootNavigationNode Then ' handle
special case rootnode
für Each childNode In node.Children
BuildTGSubMenu = BuildTGSubMenu & BuildTGSubMenu(childNode, level + 1)
' process child navigation nodes
Next
Else
If node.InNavBars Then
' ignore excluded pages
Call
Logging(2, "BuildTGMenu: Verarbeite:" + MakeRel(ActiveWeb, node.URL))
If
node.Children.count = 0 Then
BuildTGSubMenu = Space(level * 4) + "['" + menuiconhtm +
HTMLUmlaut(node.Label) + "','/" & MakeRel(ActiveWeb, node.URL) + "',null"
BuildTGSubMenu = BuildTGSubMenu + "]," + vbCrLf
' close submenu
Else
BuildTGSubMenu = Space(level * 4) + "['" + menuiconfld +
HTMLUmlaut(node.Label) + "','/" & MakeRel(ActiveWeb, node.URL) + "',null"
BuildTGSubMenu = BuildTGSubMenu + "," + vbCrLf
' close line partially
für Each childNode In node.Children
BuildTGSubMenu = BuildTGSubMenu & BuildTGSubMenu(childNode, level + 1)
' process child navigation nodes
Next
BuildTGSubMenu = BuildTGSubMenu & Space(level * 4) + "]," + vbCrLf
' close parent menu if not top level menu
End If
End If
End If
End Function
Function HTMLUmlaut(ByVal s As String) As String
'Encode german umlauts, not all special characters are
handled currently
s = Replace(s, "&", "&")
s = Replace(s, "<", "<")
s = Replace(s, ">", ">")
s = Replace(s, """", """)
s = Replace(s, "ä", "ä")
s = Replace(s, "ö", "ö")
s = Replace(s, "ü", "ü")
s = Replace(s, "ä", "Ä")
s = Replace(s, "ö", "Ö")
s = Replace(s, "Ü", "Ü")
s = Replace(s, "ß", "ß")
s = Replace(s, " ", " ")
HTMLUmlaut = s
End Function
Sie können den Code einfach über die Zwischenablage übernehmen oder alternativ die BAS-Datei in einem ZIP-Archiv hier herunter laden.
tgmenu.bas.zip (1k)
Makro einbinden und starten
Um nun ihre persönliche "menu_items.js zu erhalten, gehen Sie wie folgt vor:
- Sicherheitskopie
Legen Sie zuerst eine Kopie ihrer bisherigen menu_items.js an. Software kann fehlerhaft sein. - Starten Sie Frontpage und öffnen Sie ihr Web
- Prüfen Sie die Navigation
Kontrollieren Sie, ob sie in Frontpage die Navigation nach ihren Wünschen definiert haben. Diese Navigation ist die Grundlage des Menüs. - Binden Sie den Code ein.
Dazu starten Sie den Editor über das Menü "Extras - Makros - Visual Basic Editor". Alternativ können Sie auch ALT-F11 drücken. Importieren Sie dann den Code über die Zwischenablage oder importieren Sie die BAS-Datei. - CONST anpassen
Kontrollieren sie die "CONST"-Definitionen am Anfang des Code. Sie bestimmen den Pfad der Ausgabedatei und die Icons vor den einzelnen Menüs. Wenn Sie keine Bilder benötigen, sollten Sie die Strings auf "" setzen. - Logging anpassen
Ich verwende weiterhin eine Funktion aus Global, um die Aktivität zu protokollieren. Wenn Sie diese nicht einbinden wollten, dann sollten Sie die entsprechenden Zeilen auskommentieren oder durch ein debug.print ersetzen. - Makro ausführen
Nun ist es nur noch ein kleiner Schritt, das Makro mit dem Namen "BuildTGMenu" über den Editor oder über Frontpage selbst auszuführen. Nach dem Durchlauf sollten Sie in ihrem Web eine Datei "menu_items.js" finden. Eventuell müssen Sie die Ansicht in Frontpage mit "Ansicht - Aktualisieren" oder die Funktionstaste F5 aktualisieren. - Testen
Wenn Sie die erforderlichen Codezeilen in ihren HTML-Seiten eingebunden haben und JavaScript im Browser aktiviert ist, dann sollten Sie nun das aktuelle Menü sehen.
Wenn ihre Einbindung von Tigramenu selbst fehlerfrei ist, sollten Sie nun auch ein Menü im Browser haben.
Frühere Version
ACHTUNG: Die nun folgende Information dient eher der Belustigung und Verdeutlichung, wie viel schlechter VBScript ist, wenn es passende VBA-Objekte gibt.
Ich möchte nicht verbergen, dass ich auch einmal in eine Sackgasse gelaufen bin. Ich hatte in der Frontpage Newsgroups nach einem Weg gefragt, wie ich schnell die Seiten finden kann, die ich in der Navigation vergessen haben, worauf Christoph Schneegans lapidar geantwortet hat "Das ist ein Dreizeiler". Auf meine Rückfrage hatte ich dann eben diesen Dreizeiler und das hat mich aufgerüttelt.
Ich habe vorher nämlich versucht, per VBScript selbst die Frontpage Navigationsdatei (Siehe FrontPage Struktur) auszulesen und basierend darauf dann meine Javascript Definition zu erstellen. Heraus gekommen ist ein Skript mit über 180 Zeilen und keineswegs schnell oder leicht überschaubar. Ehe sie nun das Skript herunterladen, auspacken und gleich aufrufen, sollten Sie wissen:
- NUTZEN SIE DIESES SKRIPT NICHT PRODUKTIV
- Basisverzeichnis anpassen
Sie müssen im Skript das Basisverzeichnis ihrer Webseite anpassen !. Ich denke nicht, dass sich ihre Webseite unter C:\inetpub\wwwroot\www.msxfaq.de befindet. - Tigra Menu einbinden
Auch wenn Sie mit dem Skript die Definition erstellt haben, müssen Sie den noch das Tigramenü herunterladen und in ihre Webseiten einbinden - Webseite muss auf der Wurzel starten
Da die Definition später für jede Seite gleich ist, muss die Adressierung mit absoluten Pfaden erfolgen, d.h. \verzeichnis\datei.htm und nicht mit ..\verzeichnis\datei. Dies bedeutet, dass ihr Web auch wirklich die "Wurzel" sein muss, d.h. ein Startpunkt bei http://www.firma.tld\unterweb ist nicht möglich, es sei denn Sie passen das Skript an, dass vor jede URL eben noch "/unterweb" eingefügt wird. - CSCRIPT
Rufen Sie das Programm mit CSCRIPT auf, da der Fortschritt mit wscript.echo ausgegeben wird und die damit massenhaft Bestätigungsfenster wegklicken müssen.
Das Skript wird von mir kostenfrei aber auch ohne Support angeboten. Der Quelltext ist offen und kann von jedermann auf eigene Bedürfnisse angepasst und verbreitet werden, so lange die Quelle (Mein Name und URL auf diese Seite) erkennbar bleibt.
Sie "müssen" im Skript die Variable für das Basisverzeichnis anpassen !. Die Ausgabe der durchgeführten Befehle erfolgt auf dem Bildschirm. Das Ergebnis landet in der Datei "menu_items.js".