We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 19741
    • 90 Posts
    Hallo Zusammen,

    ich beschäftige mich seit einigen Tagen mit MODx und bin ziemlich begeistert. Mittlerweile bin ich auf die Template Variablen (TV) gestossen und nutze eine Abwandlung von: http://modxcms.com/forums/index.php/topic,901.0.html für diverse JavaScripte und/oder CSS, die ich nur auf bestimmten Seiten einbinden muss.

    Dafür habe nach der o.g. Methode eine TV namens HeaderBlocks angelegt, die folgende Chunks zur Auswahl stellt:
    Tooltips =={{headerTooltip}}||Codehighlighter=={{headerCodehl}}||Thickbox=={{headerThickbox}}
    als Trennzeichen verwende ich \n

    HeaderBlocks selber wird im HEAD-Teil des Templates eingesetzt. Das Einfügen der Skripte etc. klappt soweit auch, aber nun möchte ich HeaderBlocks an einer anderen Stelle mittels Snippet auswerten und komme ich nicht darauf, wie ich herausbekommen kann, ob in der MultiSelect-Listbox die erste Option Tooltips =={{headerTooltip}} ausgewählt wurde.

    Meine Versuche mit $modx->getTemplateVarOutput schlugen bisher fehl (bei einfachen TV mit nur einem möglichen Wert ist das für mich PHP-DAU kein Problem).

    Ich hoffe, dass jemand von euch eine Lösung auf Lager hat.
      Bye,
      Mithrandir
      • 19741
      • 90 Posts
      N’Abend,

      das Problem besteht leider immer noch. Falls ich eine Lösung finde, werde ich es auf jeden Fall hier bekanntgeben. Also keine falsche Bescheidenheit - mein Dank wird euch ewig verfolgen.
        Bye,
        Mithrandir
        • 18830
        • 161 Posts
        Ist wohl nicht ganz das, was du suchst, aber mir scheint da ein Ansatz gegeben: eForm & TV
          • 19741
          • 90 Posts
          Hallo Mazso,

          danke für die Antwort, aber auch mit Abwandlungen des Codes komme ich bisher nicht weiter. :’(

          Entweder erhalte ich gar keine Ausgabe oder den String "Array". Muss ich den Wert mit explode() behandeln, wenn ja: Welches Trennzeichen setze ich da ein. Mittels ’’\n’’ etc. ging’s schon einmal nicht?
            Bye,
            Mithrandir
            • 18830
            • 161 Posts
            Ächz, bin ich auch überfragt, aber ich denke, die Richtung stimmt, das ganze zum explodieren zu bringen. wink Ich hab nur mal im Forum nach TV und array gesucht. Ich denke, in der englischsprachigen Community ist die Chance größer, auf eine Antwort zu stoßen.
              • 19667
              • 26 Posts
              Hallo Mithrandir,
              probier doch mal folgendes in deinem Snippet

              $a = $modx->getTemplateVar("HeaderBlocks");
              

              echo $a["elements"];

              Dann solltest du Wertpaare erhalten, die du suchst.
              So was wie k1==v1||k2==v2 und die kannst du dann splitten exploden wie du willst


              Tschuldigung. Da war ich wohl zu schnell.
              Die Werte der TV haben den Schlüssel ["value"] und Eingabeoptionswerte der TV haben den Schlüssel ["elements"]

              ["elements"] k1==v1||k2==v2
              ["value"] v1 (wenn das erste ausgewählt ist)

              Wenn du wieder mal den String "Array" erhältst, kannst du dir mit var_dump das gesamte Array ausgeben lassen. Hab ich auch gemacht. Woher sollte ich den Namen des Schlüssels kennen. Grins.

              $a = $modx->getTemplateVar("HeaderBlocks");
              var_dump($a);
              



                • 19741
                • 90 Posts
                Hallo 0x7B,

                ich hab’s mal ausprobiert. Funktioniert leider alles nicht, bzw. liefert mir in keiner Weise den Status der TV auf der Seite. Ebenso, wenn ich getTemplateVarOutput statt getTemplateVar verwende. sad

                Ich hab noch eine andere Idee: Ich müsste dem Snippet ja nur die TV als Wert übergeben, also:
                [[meinsnippet&w={{HeaderBlocks}}]]. Allerdings hat dann das Snippet (oder php) Schwierigkeiten mit dem Inhalt (entweder 1 oder 2 JavaScripte). Grummel.


                  Bye,
                  Mithrandir
                  • 19667
                  • 26 Posts
                  Hallo,

                  ich hätte da noch ne andere Idee..... und zwar ohne Chunks. Du müsstest dann Dateien auf den Server legen.

                  1.) Eine TV (aber ohne die Chunks bzw. die ChunksKlammern)
                  Tooltips ==js1||Codehighlighter==js2||Thickbox==js3

                  2.) Und ein Snippet welches dann die entsprechenden Dateien includiert.

                  $a = $modx->getTemplateVar("TV");
                  
                  $a = $a["value"];
                  
                  $a = explode("||" , $a);
                  
                  
                  for ($i=0;$i<count($a);$i++)
                  {
                  
                  
                  switch ($a[$i]) {
                  case "js1":
                    $modx->regClientStartupScript("http://t/mr/assets/js/js1.js");
                     break;
                  case "js2":
                     $modx->regClientStartupScript("http://t/mr/assets/js/js2.js");
                     break;
                  case "js3":
                    $modx->regClientStartupScript("http://t/mr/assets/js/js3.js");
                     break;
                  
                  }}


                  3. Dann könntest du an anderer Stelle auch die Werte der TV auslesen.
                    • 19667
                    • 26 Posts
                    Sorry. Schon wieder zu schnell. Grins. Nach dem Posten kommen immer die besten Ideen.

                    Man braucht die Dateien gar nicht auf den Server zulegen.

                    Anstatt
                     $modx->regClientStartupScript("http://t/mr/assets/js/js1.js");

                    geht auch
                    $c =  $modx->getChunk('chunkname'); 
                    $modx->regClientStartupScript($c);
                    

                      • 19741
                      • 90 Posts
                      Danke für die Tipps. Wird aber sicherlich ein wenig dauern, bis ich das ausprobiere (habe gerade etwas wenig Zeit). Also nicht böse sein, wenn das Feedback auf sich warten lässt.
                        Bye,
                        Mithrandir