Array in localconfig abspeichern

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • Pxcon
    Contao-Nutzer
    • 12.12.2011
    • 5

    #1

    Array in localconfig abspeichern

    Hallo zusammen,

    Ich habe mir für Contao ein eigenes Modul geschrieben, dass Konfigurationseinstellungen im Backend für meinen Webservice erlaubt. Soweit auch alles wunderbar, da es zu 99% nur einfache strings, integer oder boolean sind. Diese lassen sich alle einfach über die Bordmittel realisieren und ich kann sie via DCA "file" auch problemlos in die localconfig schreiben und in meinen Templates benutzen.

    Jedoch habe ich mit den verbleibenden Feldern ein Problem, bzw. ich weiß nicht wie ich es realisieren kann, da diese als Array vorliegen müssen/sollen.

    Mein Wunsch wäre es, das in der localconfig so etwas rauskommt:

    PHP-Code:
    $GLOBALS['TL_CONFIG']['Ansprechpartner'] = array(313 => 'Herr Muster, Tel. 01234-123456',314 => 'Frau Muster, Tel. 01234-123456') 
    
    Als Maske für das Backend bin ich bereits auf den textwizard im Extension-Repository gestossen. Jedoch wird natürlich alles beim Speichern serialisiert.

    Ist es möglich, dass ich entweder ein einfaches Textfeld so umbiege, das es mir den gewünschten Eintrag schreibt (also einfach 1:1 abspeichert ohne einen String draus zu machen), oder via Save callback? Insbesondere toll wäre es, wenn das alles auch mit dem textwizard funktionieren würde, da die Liste auch erweiterbar sein soll.

    Da ich sowohl von PHP als auch Contao noch nicht allzuviel Ahnung habe, würde ich mich sehr freuen wenn ihr mir weiterhelfen könnt

    Danke im Voraus
    Zuletzt geändert von Pxcon; 12.12.2011, 10:44.
  • lindesbs
    AG CMS-Garden
    Contao-Urgestein
    • 05.06.2009
    • 4157

    #2
    Dafuer nutzt man die Framework Funktionen serialize und deserialize.

    Es ist zwar nicht mehr so schoen lesbar in der localconfig, aber es funktioniert.


    z.B. : $GLOBALS['TL_CONFIG']['inactiveModules'] = 'a:1:{i:0;s:13:"addExtraCEDIV";}';
    von Willi Voltz aus PR 500: Henry George sagte einmal: »Kultur ist Zusammenarbeit.«


    Contao-Hosting: begeisterter Uberspace-Nutzer

    Kommentar

    • Pxcon
      Contao-Nutzer
      • 12.12.2011
      • 5

      #3
      Das textwizard plugin für's Backend serialisiert die Einträge selbständig, hier ein Bsp.:

      PHP-Code:
      $GLOBALS['TL_CONFIG']['textTest'] = 'a:2:{i:0;s:4:"test";i:1;s:5:"test2";}'; 
      
      Wie komme ich jetzt in meinem Template wieder an die Daten ran!? Problem ist auch, das der Key von Bedeutung ist.

      Es muss also z.B. unter 313 der Value liegen. Es darf nicht ein von vorne aufgefülltes Array sein.

      (Es ist eh schon eine wilde Konstruktion, da ein WSDL Service auf einem anderen Server läuft, der mit einem Proxy kommuniziert der alles umbastelt und mir dann ein PHP Objekt liefert das ich in den Templates in Contao nutze)

      Kommentar

      • lindesbs
        AG CMS-Garden
        Contao-Urgestein
        • 05.06.2009
        • 4157

        #4
        Code:
        $arrData = deserialize($GLOBALS['TL_CONFIG']['textTest']);
        Und du hast Dein Array
        von Willi Voltz aus PR 500: Henry George sagte einmal: »Kultur ist Zusammenarbeit.«


        Contao-Hosting: begeisterter Uberspace-Nutzer

        Kommentar

        • Pxcon
          Contao-Nutzer
          • 12.12.2011
          • 5

          #5
          Ok, soweit alles klar! Danke schonmal dafür

          Aber wie oben bereits gefragt, ist es möglich so gezielt Key/Value Paare zu bilden!?

          Dann wären alle meine Wünsche erfüllt

          Kommentar

          • lindesbs
            AG CMS-Garden
            Contao-Urgestein
            • 05.06.2009
            • 4157

            #6
            Ja klar, schau mal :
            Code:
            $arrData = array(
            			'314' => "Wert 1",
            			'341' => "Wert 2",
            			'14' => "Wert 3",
            			'32' => "Wert 4",
            			
            		);
            		$this->Config->update("\$GLOBALS['TL_CONFIG']['meinTestArray']",serialize($arrData));

            und als Ergebniss hast du dann


            Code:
            $GLOBALS['TL_CONFIG']['meinTestArray'] = 'a:4:{i:314;s:6:"Wert 1";i:341;s:6:"Wert 2";i:14;s:6:"Wert 3";i:32;s:6:"Wert 4";}';
            Welches Du dann mittels deserialize wieder abgreifen kannst
            von Willi Voltz aus PR 500: Henry George sagte einmal: »Kultur ist Zusammenarbeit.«


            Contao-Hosting: begeisterter Uberspace-Nutzer

            Kommentar

            • Pxcon
              Contao-Nutzer
              • 12.12.2011
              • 5

              #7
              Sehr schön!

              Ich bin mir aber grad nicht sicher ob ich das richtig sehe, aber so könnte ich es nur via Code realisieren, oder!?

              Angenommen wir haben den textwizard (sehr ähnlich dem listwizard), und ich wollte nur mithilfe des Backends gezielt Key/Value Paare bilden, ginge das überhaupt!?

              Was mir spontan einfallen würde, wären zwei Wizards die quasi parallel arbeiten. Dann sollte es ja eigentlich möglich sein aus Array "A/Key" und Array "B/Value" ein zusammengeführtes Array zu serialisieren. Geht sowas in dem onsave callback!?

              Da keine "normalen" Nutzer diese Einstellungen jemals zu Gesicht bekommen werden ist die Usability dieser speziellen Einstellung nicht so wichtig (wir haben es bisher immer von Hand in der .php Datei gemacht ;P).

              Kommentar

              • Pxcon
                Contao-Nutzer
                • 12.12.2011
                • 5

                #8
                So, einen Tag später läuft alles wie ich es will...

                Habe es genau wie von meiner Idee her beschrieben realisiert.

                In einer Funktion die vom onsubmit_callback aufgerufen wird lass ich einfach die beiden Arrays durchlaufen und bastel mir ein Neues.
                Das wird dann wiederum serialisiert in die localconfig geschrieben

                Letzte Frage: Ist es möglich ein Feld (in diesem Fall ein Textfeld bzw. textwizard) von einem anderen abhängig zu machen!?
                Also wenn von Feld "A" z.B. ein zweites angelegt wird im Backend, dann soll automatisch auch von Feld "B" ein zweites Angelegt werden.

                Danke schonmal für die Hilfe!

                Kommentar

                Lädt...