Announcement

Collapse
No announcement yet.

Dynamische Generierung von (globalen) Variablen möglich?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Dynamische Generierung von (globalen) Variablen möglich?

    Guten Morgen Zusammen,

    ich habe hier eine interessante XSLT Problemstellung:

    Ich folgendes machen:

    Ich habe Texte (20 Stück) in einer Datenbank liegen. Statische Texte. Die verwende ich in meinem Stylesheet. Diese Texte würde ich gerne in Variablen ablegen zu Beginn der Verarbeitung von meinem Stylesheet damit ich dann im Verlauf meines Stylesheets nur die Variablen aufrufen muss.

    Ziel ist es die Stylesheets für Mehrsprachigkeit fit zu bekommen. Ich haue zu Beginn die Texte in der richtigen Sprache in die immer gleich benannten Variablen rein. Somit brauch im Stylesheet nur die Variablen aufzurufen (wenig Code) und zu Beginn sorge ich dafür, dass die Texte in der richtigen Sprache in die einzelnen Variablen geschoben werden.

    Frage: Wie mache ich das möglichst elegant?

    Meine Hoffnung war es nur eine Datenbank Abfrage absetzen zu müssen und dann die Variablenname (steht in der DB) dynamisch erstellen zu können und den zugehörigen Wert in der richtigen Sprache dann gleich in der Variable zu speichern. Die misslingt mir allerdings, da ich die Datenbankabfragen in einem Template ausführen muss und wenn ich dort eine Variable erstelle ist sie ja nur in diesem Template verfügbar.

    Bleibt mir also nur der Weg über das Konstrukt:

    Code:
    <xsl:variable name="language" select="de" />
    
    <xsl:variable name="ErsterText">
    	<xsl:call-template name="getValueStatischerText">	
    		<xsl:with-param name="key" select="ErsterText"/>
    		<xsl:with-param name="language" select="$language"/>
    	</xsl:call-template>
    </xsl:variable>
    
    ...
    
    <xsl:variable name="ZweiterText">
    	<xsl:call-template name="getValueStatischerText">	
    		<xsl:with-param name="key" select="ZweiterText"/>
    		<xsl:with-param name="language" select="$language"/>
    	</xsl:call-template>
    </xsl:variable>
    
    <!-- and so on ... 20 x -->
    ...
    
    <xsl:template name="getValueStatischerText">
    	<xsl:param name="key" />
    	<xsl:param name="language" />
    	<!--
    		Select value from statische_text where language = $language and key = $key;
    	-->
    	
    	<xsl:value-of select=" value FromDatabaseResultSet "/>
    	
    </xsl:template>
    Dann habe ich 20 SQL Abfragen.

    Was denkt ihr? Jemand kapiert was ich will? Seht ihr evtl. eine einfachere Möglichkeit, die ich vielleicht übersehen habe?

    Oder denkt ihr das obige Code Konstrukt ist das maximum was ich rausholen kann?

    Viele Grüße
    Krusty

  • #2
    Hallo!

    Unterstützt die Datenbank einen XML-Export? Dann könnte man mittels der document-Funktion die Sprach-XML-Datei laden, in eine Variable ablegen und dann bspw. mittels XPath die jeweiligen Texte lesen: $lang-file/de/msg11/text()

    Viele Grüße

    Martin
    Martin Szugat
    www.aboutxml.de

    Comment


    • #3
      Gute Idee. Export sollte auch unterstüzt werden, aber dann habe ich wieder was neues im Stylesheet und muss dafür sorgen das der XML Export auf jeden Fall klappt. Und immer wieder neue Sachen einzubauen ist nicht das wahre ... bzw. wird unübersichtlich.

      Aber danke für die Idee. Kann ich vielleicht mal an anderer Stelle einsetzen.

      Comment

      Working...
      X