Problem mit Ausgabe der Taxonomie-Array

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • Nina
    Contao-Urgestein
    • 04.06.2009
    • 4755

    #1

    Problem mit Ausgabe der Taxonomie-Array

    Ich habe versucht ein Array aus Taxonomie im catalog_reader auszugeben und Icons zuzuweisen (wie im Wiki beschrieben). Irgendwie will das aber nicht (Warning: Invalid argument supplied for foreach ). Hat jemand eine Idee, wo es hakt?

    Code:
    <?php if (count($this->entries)): ?>
      <div class="layout_full">
        <?php foreach ($this->entries as $entry): ?>
          <div class="item<?php echo $entry['class'] ? ' '.$entry['class'] : ''; ?>">
          <?php if($entry['linkEdit']): ?><?php echo $entry['linkEdit']; ?><?php endif; ?>   
          
      
          <?php if ($entry['data']['barrierefreiheit']['value']): ?>    
            <div id="barrierefreiheit"> 
              <p> 
                <?php
                $icons=array(
                  // Schema: 'id' => 'zu generierender Code',
                  '0' => '<img src="tl_files/bilder/icons/0.png" width="40" height="40" alt="55" title="">',
                  '1' => '<img src="tl_files/bilder/icons/1.png" width="40" height="40" alt="56" title="">', 
                  '2' => '<img src="tl_files/bilder/icons/2.png" width="40" height="40" alt="57" title="">',
                  '3' => '<img src="tl_files/bilder/icons/3.png" width="40" height="40" alt="58" title="">',
                  '4' => '<img src="tl_files/bilder/icons/4.png" width="40" height="40" alt="59" title="">',
                  '5' => '<img src="tl_files/bilder/icons/5.png" width="40" height="40" alt="60" title="">',
                  '6' => '<img src="tl_files/bilder/icons/6.png" width="40" height="40" alt="61" title="">',
                  '7' => '<img src="tl_files/bilder/icons/7.png" width="40" height="40" alt="62" title="">',
                  '8' => '<img src="tl_files/bilder/icons/8.png" width="40" height="40" alt="63" title="">',
                  '9' => '<img src="tl_files/bilder/icons/9.png" width="40" height="40" alt="64" title="">',
                  '10' => '<img src="tl_files/bilder/icons/10.png" width="40" height="40" alt="65" title="">',
                  '11' => '<img src="tl_files/bilder/icons/11.png" width="40" height="40" alt="66" title="">',
                  '12' => '<img src="tl_files/bilder/icons/12.png" width="40" height="40" alt="67" title="">',
                  '13' => '<img src="tl_files/bilder/icons/13.png" width="40" height="40" alt="80" title="">'
                );
                foreach($entry['data']['barrierefreiheit']['value'] as $info)
                  echo $icons[$info['id']];
                ?>
              </p>
           </div>
          <?php endif; ?>
                  
    
    
         </div>
        <?php endforeach; ?>
      </div>
      
    <?php else: ?>
      <p class="info"><?php echo $this->noItemsMsg; ?></p>
    <?php endif; ?>
  • psren
    Contao-Urgestein
    • 07.04.2010
    • 2733

    #2
    Ersetze mal
    PHP-Code:
    <?php if ($entry['data']['barrierefreiheit']['value']): ?>
    durch
    PHP-Code:
    <?php if (is_array($entry['data']['barrierefreiheit']['value'])): ?>
    und schau was dann passiert?!

    Hat jedes item $entry['data']['barrierefreiheit']?

    Wenn ich euch helfen konnte könnt ihr euch gerne mal
    meine Amazon Wunschliste anschauen. Dankeschön.

    Kommentar

    • Nina
      Contao-Urgestein
      • 04.06.2009
      • 4755

      #3
      Zitat von psren Beitrag anzeigen
      Ersetze mal ... und schau was dann passiert?!?
      Dann wird nix mehr angezeigt (aber auch kein Fehler mehr)

      Zitat von psren Beitrag anzeigen
      Hat jedes item $entry['data']['barrierefreiheit']?
      Dieses Array ist nur eines von mehreren Datenfeldern, wenn du das wissen wolltest. Ich habe das Template hier nur von den Aufrufen der anderen Datenfelder befreit, da die alle laufen. Die anderen Felder rufe ich einfach nach dem Schema auf:
      Code:
      <?php if ($entry['data']['beschreibung']['value']): ?>  
      ... <?php echo $entry['data']['beschreibung']['value']; ?> ... 
      <?php endif; ?>
      Aber da will ich auch nicht etwa ein Array auseinanderklöppeln und mit Icons versehen, sondern einfach nur ausgeben, was da ist

      Kommentar

      • psren
        Contao-Urgestein
        • 07.04.2010
        • 2733

        #4
        Wenn bei
        PHP-Code:
        <?php if (is_array($entry['data']['barrierefreiheit']['value'])): ?>
        ganichts kommt ist $entry['data']['barrierefreiheit']['value'] kein Array.

        Somit geht darauf auch kein foreach:
        PHP-Code:
        foreach($entry['data']['barrierefreiheit']['value'] as $info)
        {
            echo $icons[$info['id']];
        } 
        
        Also mach mal statt deiner foreach-schleife ein
        PHP-Code:
        var_dump($entry['data']['barrierefreiheit']['value']); 
        
        und schau mal was für einen Datentyp deine Variablen haben.

        Wenn ich euch helfen konnte könnt ihr euch gerne mal
        meine Amazon Wunschliste anschauen. Dankeschön.

        Kommentar

        • Nina
          Contao-Urgestein
          • 04.06.2009
          • 4755

          #5
          Du hast recht, ich hatte eine Ebene zu hoch angesetzt. Korrekt ist $entry['data']['barrierefreiheit']['value']['ref']
          Wenn ich da dann aber deine Anweisung aus deinem ersten Thread umschreibe:
          Code:
          <?php if ($entry['data']['barrierefreiheit']['value']['ref'])): ?>
          erhalte ich:
          Code:
          Parse error: syntax error, unexpected ')' in /is/htdocs/XX/templates/XX/catalog_full_reader.html5 on line 61
          Das ist genau die Reihe, in der ich deine Ergänzung eingefügt habe.

          Kommentar

          • psren
            Contao-Urgestein
            • 07.04.2010
            • 2733

            #6
            Du hast da eine Klammer ) vom is_array() vergessen :-)
            Ich nehme an dann klappt es ;-)


            Also aus:
            PHP-Code:
            <?php if ($entry['data']['barrierefreiheit']['value']['ref'])): ?>
            mache
            PHP-Code:
            <?php if ($entry['data']['barrierefreiheit']['value']['ref']): ?>
            oder eben
            PHP-Code:
            <?php if (is_array($entry['data']['barrierefreiheit']['value']['ref'])): ?>
            Viele Grüße
            Patrick
            Zuletzt geändert von psren; 26.06.2012, 18:11.

            Wenn ich euch helfen konnte könnt ihr euch gerne mal
            meine Amazon Wunschliste anschauen. Dankeschön.

            Kommentar

            • Nina
              Contao-Urgestein
              • 04.06.2009
              • 4755

              #7
              Leider ändert das aber nichts am ursprünglichen Problem. Es ist weiterhin die Meldung "Warning: Invalid argument supplied for foreach()". Aktueller Stand:

              Code:
              <?php if (count($this->entries)): ?>
                <div class="layout_full">
                  <?php foreach ($this->entries as $entry): ?>
                    <div class="item<?php echo $entry['class'] ? ' '.$entry['class'] : ''; ?>">
              
                    <?php if($entry['linkEdit']): ?><?php echo $entry['linkEdit']; ?><?php endif; ?>   
              
                    <?php if ($entry['data']['barrierefreiheit']['value']['ref']): ?>  
                      <div id="barrierefreiheit"> 
                        <h2>...</h2>
              
                        <p> 
              <?php
              $icons=array(
                // Schema: 'id' => 'zu generierender Code',
                '0' => '<img src="tl_files/bilder/icons/Blinde_Menschen.png" width="40" height="40" alt="55" title="">',
                '1' => '<img src="tl_files/bilder/icons/Blinde_Menschen.png" width="40" height="40" alt="56" title="">', 
                '2' => '<img src="tl_files/bilder/icons/Blinde_Menschen.png" width="40" height="40" alt="57" title="">',
                '3' => '<img src="tl_files/bilder/icons/Blinde_Menschen.png" width="40" height="40" alt="58" title="">',
                '4' => '<img src="tl_files/bilder/icons/Blinde_Menschen.png" width="40" height="40" alt="59" title="">',
                '5' => '<img src="tl_files/bilder/icons/Blinde_Menschen.png" width="40" height="40" alt="60" title="">',
                '6' => '<img src="tl_files/bilder/icons/Blinde_Menschen.png" width="40" height="40" alt="61" title="">',
                '7' => '<img src="tl_files/bilder/icons/Blinde_Menschen.png" width="40" height="40" alt="62" title="">',
                '8' => '<img src="tl_files/bilder/icons/Blinde_Menschen.png" width="40" height="40" alt="63" title="">',
                '9' => '<img src="tl_files/bilder/icons/Blinde_Menschen.png" width="40" height="40" alt="64" title="">',
                '10' => '<img src="tl_files/bilder/icons/Blinde_Menschen.png" width="40" height="40" alt="65" title="">',
                '11' => '<img src="tl_files/bilder/icons/Blinde_Menschen.png" width="40" height="40" alt="66" title="">',
                '12' => '<img src="tl_files/bilder/icons/Blinde_Menschen.png" width="40" height="40" alt="67" title="">',
                '13' => '<img src="tl_files/bilder/icons/Blinde_Menschen.png" width="40" height="40" alt="80" title="">'
              );
              foreach($entry['data']['barrierefreiheit']['value']['ref'] as $info)
                echo $icons[$info['id']];
              ?>
                        </p>
              
                     </div>
                    <?php endif; ?>
              
              
              
                   </div>
                  <?php endforeach; ?>
                </div>
                
              <?php else: ?>
                <p class="info"><?php echo $this->noItemsMsg; ?></p>
              <?php endif; ?>

              Kommentar

              • psren
                Contao-Urgestein
                • 07.04.2010
                • 2733

                #8
                Mhh... mach mal nochmal den var_dump und schau nach ob es sich wirklich immer um einen Array handelt.
                Du kannst auch über $this->dumpTemplateVars() nachschauen was für Datentypen deine jeweiligen Variblen haben (ist aber nicht so explizit und ja, ich weiß dass du das weißt, aber vllt stolpert jemand anders noch hierüber :-))

                Wenn ich euch helfen konnte könnt ihr euch gerne mal
                meine Amazon Wunschliste anschauen. Dankeschön.

                Kommentar

                • Tim G
                  Contao-Urgestein
                  • 13.02.2010
                  • 2212

                  #9
                  Klappts?
                  http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.

                  Kommentar

                  • Nina
                    Contao-Urgestein
                    • 04.06.2009
                    • 4755

                    #10
                    Wenn ich
                    Code:
                    var_dump($entry['data']['barrierefreiheit']['value']['ref']);
                    eingebe, erhalte ich als Ergebnis
                    Code:
                    string(1) "I"
                    .

                    Im VarDump sieht der Abschnitt so aus:

                    Code:
                    ["barrierefreiheit"]=>
                            array(5) {
                              ["label"]=>
                              string(16) "Barrierefreiheit"
                              ["type"]=>
                              string(4) "tags"
                              ["raw"]=>
                              string(20) "55,57,59,63,66,67,80"
                              ["value"]=>
                              string(283) "Informationen/Materialien in leichter Sprache vorhanden, Informationen als Audio-Dateien vorhanden, Die Räume sind rollstuhlgerecht, Barrierefreie Toiletten vorhanden, Beratung in leichter Sprache möglich, Beratung in Gebärdensprache möglich, Aufsuchende Angebote für Betroffene"
                              ["ref"]=>
                              array(7) {
                                [0]=>
                                array(7) {
                                  ["id"]=>
                                  string(2) "55"
                                  ["pid"]=>
                                  string(2) "54"
                                  ["tstamp"]=>
                                  string(10) "1339490721"
                                  ["sorting"]=>
                                  string(3) "128"
                                  ["type"]=>
                                  string(0) ""
                                  ["alias"]=>
                                  string(54) "informationenmaterialien-in-leichter-sprache-vorhanden"
                                  ["name"]=>
                                  string(55) "Informationen/Materialien in leichter Sprache vorhanden"
                                }
                                [1]=>
                                array(7) {
                                  ["id"]=>
                                  string(2) "57"
                                  ["pid"]=>
                                  string(2) "54"
                                  ["tstamp"]=>
                                  string(10) "1339490747"
                                  ["sorting"]=>
                                  string(3) "384"
                                  ["type"]=>
                                  string(0) ""
                                  ["alias"]=>
                                  string(41) "informationen-als-audio-dateien-vorhanden"
                                  ["name"]=>
                                  string(41) "Informationen als Audio-Dateien vorhanden"
                                }
                                [2]=>
                                array(7) {
                                  ["id"]=>
                                  string(2) "59"
                                  ["pid"]=>
                                  string(2) "54"
                                  ["tstamp"]=>
                                  string(10) "1339490789"
                                  ["sorting"]=>
                                  string(3) "640"
                                  ["type"]=>
                                  string(0) ""
                                  ["alias"]=>
                                  string(32) "die-raeume-sind-rollstuhlgerecht"
                                  ["name"]=>
                                  string(32) "Die Räume sind rollstuhlgerecht"
                                }
                                [3]=>
                                array(7) {
                                  ["id"]=>
                                  string(2) "63"
                                  ["pid"]=>
                                  string(2) "54"
                                  ["tstamp"]=>
                                  string(10) "1339490851"
                                  ["sorting"]=>
                                  string(4) "1152"
                                  ["type"]=>
                                  string(0) ""
                                  ["alias"]=>
                                  string(33) "barrierefreie-toiletten-vorhanden"
                                  ["name"]=>
                                  string(33) "Barrierefreie Toiletten vorhanden"
                                }
                                [4]=>
                                array(7) {
                                  ["id"]=>
                                  string(2) "66"
                                  ["pid"]=>
                                  string(2) "54"
                                  ["tstamp"]=>
                                  string(10) "1339490893"
                                  ["sorting"]=>
                                  string(4) "1536"
                                  ["type"]=>
                                  string(0) ""
                                  ["alias"]=>
                                  string(37) "beratung-in-leichter-sprache-moeglich"
                                  ["name"]=>
                                  string(37) "Beratung in leichter Sprache möglich"
                                }
                                [5]=>
                                array(7) {
                                  ["id"]=>
                                  string(2) "67"
                                  ["pid"]=>
                                  string(2) "54"
                                  ["tstamp"]=>
                                  string(10) "1339490903"
                                  ["sorting"]=>
                                  string(4) "1664"
                                  ["type"]=>
                                  string(0) ""
                                  ["alias"]=>
                                  string(37) "beratung-in-gebaerdensprache-moeglich"
                                  ["name"]=>
                                  string(37) "Beratung in Gebärdensprache möglich"
                                }
                                [6]=>
                                array(7) {
                                  ["id"]=>
                                  string(2) "80"
                                  ["pid"]=>
                                  string(2) "54"
                                  ["tstamp"]=>
                                  string(10) "1339753413"
                                  ["sorting"]=>
                                  string(4) "1792"
                                  ["type"]=>
                                  string(0) ""
                                  ["alias"]=>
                                  string(36) "aufsuchende-angebote-fuer-betroffene"
                                  ["name"]=>
                                  string(36) "Aufsuchende Angebote für Betroffene"
                                }
                              }
                            }
                    Der Fehler an sich ist immer noch
                    Code:
                    Invalid argument supplied for foreach()

                    Kommentar

                    • psren
                      Contao-Urgestein
                      • 07.04.2010
                      • 2733

                      #11
                      Dann müsste
                      PHP-Code:
                      var_dump($entry['data']['barrierefreiheit']['ref']); 
                      
                      den erwünschten Array bringen.

                      PHP-Code:
                      $entry['data']['barrierefreiheit']['value'] 
                      
                      ist ein String.
                      daher kann
                      PHP-Code:
                      foreach($entry['data']['barrierefreiheit']['value'] as $info)
                        echo $icons[$info['id']];
                      ?> 
                      
                      so nicht funktionieren. Daher der Fehler.

                      PHP-Code:
                      foreach($entry['data']['barrierefreiheit']['ref'] as $info)
                        echo $icons[$info['id']];
                      ?> 
                      
                      müsste dann klappen. (Wobei du vermutlich $info['id'] weil es laut var_dump ein String ist noch auf ein Integer casten müsstest.)
                      Zuletzt geändert von psren; 28.06.2012, 11:07.

                      Wenn ich euch helfen konnte könnt ihr euch gerne mal
                      meine Amazon Wunschliste anschauen. Dankeschön.

                      Kommentar

                      • Tim G
                        Contao-Urgestein
                        • 13.02.2010
                        • 2212

                        #12
                        Natürlich nicht vergessen die Keys im Array $icons den Ids anzupassen.



                        Sent from my iphone using Tapatalk
                        http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.

                        Kommentar

                        • Nina
                          Contao-Urgestein
                          • 04.06.2009
                          • 4755

                          #13
                          Zitat von Tim G Beitrag anzeigen
                          Natürlich nicht vergessen die Keys im Array $icons den Ids anzupassen.
                          Vielen Dank, das war es

                          So sieht der aktuelle funktionierende Stand aus:
                          Code:
                          <?php
                          $icons=array(
                            // Schema: 'id' => 'zu generierender Code',
                            '55' => '<img src="tl_files/bilder/icons/Menschen_mit_Lernschwierigkeiten.png" width="40" height="40" alt=""> Informationen/Materialien in leichter Sprache vorhanden <br>',
                            '56' => '<img src="tl_files/bilder/icons/Blinde_Menschen.png" width="40" height="40" alt=""> Informationen/Materialien in Braille vorhanden<br>', 
                            '57' => '<img src="tl_files/bilder/icons/Blinde_Menschen.png" width="40" height="40" alt=""> Informationen als Audio-Dateien vorhanden<br>',
                            '58' => '<img src="tl_files/bilder/icons/Gehoerlose_Menschen.png" width="40" height="40" alt=""> Informationen/Materialien in Gebärdensprache vorhanden<br>',
                            '59' => '<img src="tl_files/bilder/icons/Rollstuhlfahrer.png" width="40" height="40" alt=""> Die Räume sind rollstuhlgerecht<br>',
                            '60' => '<img src="tl_files/bilder/icons/Rollstuhlfahrer.png" width="40" height="40" alt=""> Nicht alle Räume sind rollstuhlgerecht<br>',
                            '61' => '<img src="tl_files/bilder/icons/Rollstuhlfahrer.png" width="40" height="40" alt=""> Die Räume sind nicht für alle Rollstühle geeignet (Betroffene müssen vorher abklären)<br>',
                            '62' => '<img src="tl_files/bilder/icons/Rollstuhlfahrer.png" width="40" height="40" alt=""> Die Räume sind gar nicht rollstuhlgerecht<br>',
                            '63' => '<img src="tl_files/bilder/icons/Rollstuhlfahrer.png" width="40" height="40" alt=""> Barrierefreie Toiletten vorhanden<br>',
                            '64' => '<img src="tl_files/bilder/icons/Blinde_Menschen.png" width="40" height="40" alt=""> Optische Gestaltungselemente sind vorhanden<br>',
                            '65' => '<img src="tl_files/bilder/icons/Sehbehinderte_Menschen.png" width="40" height="40" alt=""> Taktile Gestaltungselemente sind vorhanden<br>',
                            '66' => '<img src="tl_files/bilder/icons/Menschen_mit_Lernschwierigkeiten.png" width="40" height="40" alt=""> Beratung in leichter Sprache möglich<br>',
                            '67' => '<img src="tl_files/bilder/icons/Gehoerlose_Menschen.png" width="40" height="40" alt=""> Beratung in Gebärdensprache möglich<br>',
                            '80' => '<img src="tl_files/bilder/icons/Familien" width="40" height="40" alt=""> Aufsuchende Angebote für Betroffene<br>'
                          );
                          
                          foreach($entry['data']['barrierefreiheit']['ref'] as $info)
                            echo $icons[$info['id']]; 
                          
                          ?>
                          Danke nochmal für die Hilfe

                          Kommentar

                          • Nina
                            Contao-Urgestein
                            • 04.06.2009
                            • 4755

                            #14
                            Ich habe ein Problem, weil ich in der Feldeinstellung das Feld "Leere Option einbinden" angehakt habe. Das war nötig, da sonst die Redakteure beim Eingeben des öfteren den ersten Eintrag belassen haben und gar nicht merkten, dass sie hier auch noch eine Entscheidung treffen müssen. Deshalb habe ich dafür gesorgt, dass es am Anfang eine leere Option gibt und die Leute eher merken, dass da noch was eingetragen werden muss.

                            Das Problem ist aber, dass nun wieder die Array-Fehlermeldung kommt, wenn ein Eintrag in der Liste ist, für den keine Option gewählt wurde.

                            Code:
                            Warning: Invalid argument supplied for foreach() in ...
                            Ich habe dann in der Datenbank nachgeschaut und gesehen, dass diese Felder ein '0' als Eintrag hatten, daher versuchte ich das so abzufangen, aber es klappte nicht:

                            Code:
                            <?php
                            $icons_mitglied=array(
                               '0' => '',
                              '20' => '<img src="tl_files/theme/kein_mitglied.gif" width="20" height="20" alt="kein xyz-Mitglied">',
                              '19' => '<img src="tl_files/theme/mitglied.gif" width="20" height="20" alt="xyz-Mitglied">'
                            );
                            foreach($entry['data']['xyz_mitglied']['ref'] as $info_mitglied)
                              echo $icons_mitglied[$info_mitglied['id']]; 
                            ?>
                            Sobald ich beim Eintrag das Feld auf einen Wert einstelle, ist die Fehlermeldung weg und das passende Symbol wird angezeigt.

                            Kommentar

                            • psren
                              Contao-Urgestein
                              • 07.04.2010
                              • 2733

                              #15
                              Hallo Nina,

                              kannst du eventuell noch einmal $entry['data']['xyz_mitglied']['ref'] var_dump() -en?
                              (Und deinen Code als PHP formatieren ;-))

                              Pauschal ohne zu wissen was jetzt genau im Array steht würde ich sowas vorschlagen:
                              PHP-Code:
                              <?php
                              if (is_array($entry['data']['xyz_mitglied']['ref']))
                              {
                                foreach($entry['data']['xyz_mitglied']['ref'] as $info_mitglied)
                                {
                                  echo $icons_mitglied[$info_mitglied['id']];
                                }
                              }
                              else
                              {
                                echo 'Huch-kein-Icon :-)';
                              }
                              ?>

                              Wenn ich euch helfen konnte könnt ihr euch gerne mal
                              meine Amazon Wunschliste anschauen. Dankeschön.

                              Kommentar

                              Lädt...