PHP Konstanten in XSL Dateien verwenden?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • PHP Konstanten in XSL Dateien verwenden?

    Hallo

    ich bin derzeit dabei meine Scripte auf XML/XSLT umzustellen. Jedoch habe nun mal eine Frage bzgl. Konstanten in XSL Dateien.

    Wenn ich nun ein Script habe, welches in deutsch und englisch vorhanden ist, könnte ich es über mehrere Wege lösen:

    - Ich lege für jede Sprache eine eigene XSL Dateie an - was jedoch nicht sehr sinnig ist
    - Ich lege für jede Sprache eine eigene XML-Datei mit übersetzungen an, welche dann jedoch jedesmal geparst werden müsste.
    - Ich lege eine Datei mit Konstanten der Übersetzungen an.

    Auf den dritten Punkt bezieht sich nun auch meine Frage: Kann ich PHP-Kostanten innerhalb meiner XSL Dateien verwenden? Und wenn ja, wie?

    Wobei was haltet ihr allgemein von meiner Idee mit den Konstanten? Weil eigentlich wäre eine XML-Datei mit den übersetzungen sinnvoller jedoch auch rechenintensiver oder?

  • #2
    Kann ich PHP-Kostanten innerhalb meiner XSL Dateien verwenden?
    formal gesehen ja - allerdings muss man sagen, dass es der xsl engine völlig egal ist - in werte umwandeln kann sie natürlich nur php, aber auch nur mittels banaler str_replace() o.ä., als wären sie platzhalter einer template-engine. bis dahin werden sie wie strings behandelt.

    es würde sich anbieten, folgende struktur aufzubauen:

    1. php initiiert die konstanten (die übersetzung kommt aus dateien oder aus der db).

    2. php liest die xsl-datei wie eine ganz normale textdatei ein.

    3. php parse-t den inhalt der xsl-datei und ersetzt die platzhalter durch die werte der konstanten (hier evtl. get_defined_constants()).

    4. php wendet den entstandenen xsl-string an einer xml-datei an mittels der xslt-engine und macht die ausgabe.

    ob das performant ist, lässt sich schwer beurteilen, das hängt von dem anwendungsgebiet ab.

    Kommentar


    • #3
      Es geht um einen Shop, welcher nun auf XML/XSLT umgestellt werden soll. Derzeit wird der Shop nur in deutscher Sprache genutzt - aber man kann ja nie wissen und ich möchte auch gerne für die Zukunft gerüstet sein

      Das ganze sollte natürlich möglichst performant arbeiten. Aber ansonsten wüsste ich nicht, wie man es machen könnte.

      Ich könnte natürlich eine XML Datei machen, welche nur die Übersetzungen besitzt. Diese hänge ich dann beim laden der eigentlichen XML-Datei ein und daraus holt sich dann XSLT die Daten.

      Wie schauts da mit der Geschwindigkeit aus?

      Kommentar


      • #4
        Ich würde eine Lösung mit registerPHPFunctions() vorziehen (vorrausgesetzt du benutzt PHP5. Bin mir nicht sicher, ob ein ähnliches Feature in PHP4 besteht).

        Das rumgefrickel mit RegEx's und/oder strpos/substr-Manipulationen kann man so einfach umgehen.
        Wenn du dann eine Funktionen namens getLangString() lässt diese sich aus XSL heraus aufrufen.
        "Ach was soll's? Dann bau ich mir halt meinen eigenen Vergnügungspark mit Blackjack und Nutten." - Bender

        Kommentar


        • #5
          Original geschrieben von Nezzar
          Ich würde eine Lösung mit registerPHPFunctions() vorziehen (vorrausgesetzt du benutzt PHP5. Bin mir nicht sicher, ob ein ähnliches Feature in PHP4 besteht).

          Das rumgefrickel mit RegEx's und/oder strpos/substr-Manipulationen kann man so einfach umgehen.
          Wenn du dann eine Funktionen namens getLangString() lässt diese sich aus XSL heraus aufrufen.
          Also ich möchte PHP5 schon einsetzen - alleine wegen dem besseren XML/XSLT Support. Wie sollte ich diese Funktion dann richtig einsetzen?

          Weil so wie ich es verstehe, könnte ich dann eine Funktion aufrufen, welche mir die übersetzung liefert. Ginge so oder?

          Vielleicht noch einer eine Meinung zu der Situation mit dem XML einhängen etc.

          Kommentar


          • #6
            hab mich gerade noch an eine sache erinnert: du kannst die übersetzungen tatsächlich in eine externe xml datei ablegen, und zwar in form von entities. dann wäre die einzige sache, die du mit php anpassen müsstest (je nach sprache) - der pfad zu dieser datei. das wäre viel performanter, denn die ersetzung würde auf der xml-engine ebene erfolgen.

            hier noch ein paar lektüren, auf die schnelle:

            http://www.xml.com/pub/a/2001/03/14/trxml10.html
            http://www.xml.com/pub/a/98/08/xmlqna1.html#EXTENT
            http://www.infos24.de/xmle/handbuch/...fuehrung.htm#3

            Kommentar


            • #7
              Das mit den Entities hört sich nett an - die könnte ich dann wirklich aus der Datenbank ziehen und in eine datei schreiben lassen und ablegen. Damit ich sie dann nicht permanent in jede Datei schreiben muss, werde ich sie beim parsen wohl einhängen und Ruhe ist

              Also die Methode würde mich doch ansprechen - meine jedoch mal gelesen zu haben, dass DTDs nicht mehr sehr zeitgemäß sind. Ist das Schwachsinn oder stillt das

              Kommentar


              • #8
                Die Idee mit den Entities hat noch einen anderen Vorteil: Wenn du die Sachen wirklich nur einmal (oder periodisch, z.B. einmal wöchentlich) in die DTD schreibst, entfällt ein Zugriff auf die Datenquelle (nicht, das es sooo viel ausmacht, aber jedes bisschen hilft ).
                "Ach was soll's? Dann bau ich mir halt meinen eigenen Vergnügungspark mit Blackjack und Nutten." - Bender

                Kommentar

                Lädt...
                X