Ankündigung

Einklappen
Keine Ankündigung bisher.

Länderliste Mehrfachauswahl als formatiertes HTML ausgeben

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

  • Länderliste Mehrfachauswahl als formatiertes HTML ausgeben

    Geschätzte Community, ich stehe gerade mit nachfolgendem Problem an:

    Ich habe eine Verwaltung von Landesvertretungen aufgebaut. Ein Vertreter kann für mehrere Länder zuständig sein (Attributtyp Länderauswahl mit aktivierter Mehrfachauswahl). Jetzt kriege ich es nicht hin die PHP-Abfrage mit HTML Ausgabe korrekt einzubinden. Auf der Seite sollte dann stehen Land 1 | Land 2 | Land 3.

    Wenn ich das Feld direkt ausgebe, erhalte ich z.B. a:2:{i:0;s:2:"au";i:1;s:2:"nz";} Dieses Array kann ich mit nachfolgendem Snippet auflösen.
    <?php $objLaender = unserialize($entry->field('land')->value());
    if(is_array($objLaender) && !empty($objLaender)):
    {
    foreach($objLaender as $Land): ?>
    <?php echo $Land; ?>
    <?php
    endforeach;
    }
    endif?>

    Wie sollte die Abfrage richtig geschrieben werden?

    Besten Dank für eure Inputs.

  • #2
    In contao unbedingt deserialize nutzen. Nur das ist gegen Object-injection gesichert.

    Die lesbaren Ländernamen finden sich in Contaos \Contao\System::getCountries() Methode.
    https://github.com/contao/contao/blo...ystem.php#L500

    Alternativ einfach das Attribut mit ->html() ausgeben und es wird entsprechend "vorgebaut".

    http://www.premium-contao-themes.com

    Kommentar


    • #3
      Vielen Dank für den Hinweis mit deserialize(), werde ich mir zu Herzen nehmen.

      Wieso liefert mir <?php echo $entry->field('land')->html(); ?> keine Ausgabe? Im field('land') steht die Mehrfach-Länderauswahl.

      Wenn ich das Array deserialize() und jedes Element mit <?php echo $Land->html(); ?> ausgeben will, führt dies zu einem Fehler.

      Kommentar


      • #4
        ->html() durchläuft das eingestellte Template in den Attribut-Einstellungen. Dort ggf. auf das default Template einstellen.

        Du zerlegst ja oben nur einen Array (bezeichnung $objLaender wäre eher $arrLaender). Darin ist nur der Ländercode. Das ist kein Objekt, sondern ein String.
        Wenn deine Variable $Land nicht von einer der Template-Klassen von CC erbt oder besteht, existiert dafür keine ->html() Methode.
        Folgende Methoden stehen in einem CC-Liste/Leser Template zur Verfügung: https://forum.premium-contao-themes....late-variablen

        Code:
        [COLOR=#333333][SIZE=11px]$arrLaender = \deserialize($entry->field('land')->value());
        [COLOR=#8735A5]$arrCountries[/COLOR][COLOR=#000000] = \Contao\System::[/COLOR][COLOR=#3F6E7D]getCountries[/COLOR][COLOR=#000000]();[/COLOR]
        [COLOR=#0045AA]foreach[/COLOR][COLOR=#000000]([/COLOR]$arrLaender[COLOR=#000000] as [/COLOR][COLOR=#8735A5]$k[/COLOR][COLOR=#000000])[/COLOR]
        [COLOR=#000000]{[/COLOR]
        [COLOR=#000000]echo $arrCountries[$k]; // lesbarer Laendername
        }[/COLOR][/SIZE][/COLOR]
        Zuletzt geändert von Tim; 21.10.2020, 08:34.
        http://www.premium-contao-themes.com

        Kommentar


        • #5
          Danke dir, habe die HTML-Ausgabe wie gefordert hinbekommen.

          Gruss Dani

          Kommentar


          • #6
            Als Default Template im Attribut geht's dann auch mit html in der Ausgabe.

            Bei mir als customelement_attr_country.html5:


            Code:
            <?php
            /**
             * Custom elements Country as unsorted lsit
             */
            
            $arrLaender = \deserialize($this->rawValue);
            $arrCountries = \Contao\System::getCountries();
            foreach($arrLaender as $k)
            {
            echo $arrCountries[$k]; // lesbarer Laendername
            }
            ?>

            Kommentar

            Lädt...
            X