Catalog - List / Array / Ausgabe doppelter Werte verhindern

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • Thomas Hinze
    Contao-Nutzer
    • 19.09.2012
    • 163

    #1

    Catalog - List / Array / Ausgabe doppelter Werte verhindern

    Guten Abend,

    ich möchte ein mehrdimensionales Array auf doppelte Werte prüfen und nur unique Content ausgeben.
    Zu prüfender Wert wäre z.B. $entry['data']['Kuenstlerprofil]['value'];

    Wenn die Schleife läuft kann es z.B. sein, das der Wert 5x identisch ist. Folglich werden 5 komplette Ansichten um diesen Wert generiert. Ich brauche aber jeweils nur einen.

    array_unique wäre der Beschreibung nach passend, aber ich weiß nicht wohin damit?!


    PHP-Code:
    <?php if (count($this->entries)): ?>
     
    <div>
     
    <?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; ?>
    <div class="werk"><?php echo $entry['data']['werk']['value']; ?></div>
    <span class="Titel"><?php echo $entry['data']['Titel']['value']; ?> (<?php echo $entry['data']['Jahr']['value']; ?>)</span><br>
    <?php echo $entry['data']['Technik']['value']; ?> / <?php echo $entry['data']['Abmessung']['value']; ?><br>
    <?php echo $entry['data']['auflage']['value'];?>
    
    
    <span>von 
    <?php foreach ($entry['data'] as $field=>$data): ?>
            <?php if (strlen($data['raw']) && !in_array($field, array('catalog_name','parentJumpTo'))): ?>
            <?php if (array_key_exists('ref', $data)): ?>
            <?php foreach ($data['ref'] as $ref): ?>  
                <a href="<?php echo $ref['profil_url']; ?>"><?php echo $ref['Name']; ?></a></span>
                
            <?php endforeach; ?>
            <?php endif; ?>
    <?php endif; ?>
        <?php endforeach; ?>
    
    
    Bzw. kann ich alternativ mit dem filter_widget Template auch Werte aus einer anderen Tabelle abfragen? 
    
    <br><br>
    <span class="preis"><?php echo $entry['data']['preis']['value']; ?> EUR</span> 
    <span class="kaufanfrage"><?php if ($entry['data']['verfuegbar']['value']=='ja'): ?><a title="" rel="lightbox nofollow" href="/kaufanfrage/items/<?php echo $entry['id'];?>.html?id=<?php echo $entry['id'];?>">Kaufanfrage</a><br><?php else: ?>bereits verkauft<br><?php endif; ?></span>
    </div>
    <?php endforeach; ?>
    </div>
    
    <?php else: ?>
    <p class="info"><?php echo $this->noItemsMsg; ?></p>
    <?php endif; ?>
    Zuletzt geändert von Thomas Hinze; 22.09.2012, 22:05.
  • Tim G
    Contao-Urgestein
    • 13.02.2010
    • 2212

    #2
    array_unique benötigt einen Prüf-Array.
    In Deinem Fall müsstest du in der Schleife alle möglichen Werte in einem Array sammeln und auf diesen array_unique anwenden und das Ergebnis ausgeben - das nach der Schleife.

    Man könnte auch während der Schleife bereits mit in_array auf eventuelle Dopplungen prüfen bzw. mit array_key_exists, wenn die Werte als Schlüssel gespeichert werden (hier eher unwahrscheinlich).
    http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.

    Kommentar

    • Thomas Hinze
      Contao-Nutzer
      • 19.09.2012
      • 163

      #3
      während welcher Schleife?

      Wenn ich das Filter_Widget zwei mal einsetze - einmal als Navi mit klickbarer Liste und einmal als Liste/Reader auf der selben Seite - habe ich eine gefilterte Ausgabe. Allerdings liegen nicht alle Werte in der selben Tabelle.

      Könnte ich mit dem filter_widget Template auch auf Werte aus einer anderen Tabelle zugreifen um mir eine individuelle Ausgabe zusammen zu bauen. (Filtermodule greift auf Tabelle Werke zu (Künstler ID) -> Ergänzende Infos für gefilterte Ereignisse liegen in Tabelle Künstler (ID))

      Kommentar

      • Tim G
        Contao-Urgestein
        • 13.02.2010
        • 2212

        #4
        während welcher Schleife?
        Die foreach-Schleife
        PHP-Code:
        <?php foreach ($this->entries as $entry): ?>
        Wenn ich das Filter_Widget zwei mal einsetze - einmal als Navi mit klickbarer Liste und einmal als Liste/Reader auf der selben Seite - habe ich eine gefilterte Ausgabe. Allerdings liegen nicht alle Werte in der selben Tabelle.

        Könnte ich mit dem filter_widget Template auch auf Werte aus einer anderen Tabelle zugreifen um mir eine individuelle Ausgabe zusammen zu bauen. (Filtermodule greift auf Tabelle Werke zu (Künstler ID) -> Ergänzende Infos für gefilterte Ereignisse liegen in Tabelle Künstler (ID))
        Was machst du plötzlich mit nem Filter? Der Post oben fragt doch nach einer Möglichkeit Dopplungen zu entfernen. Ein Prüf-Array ist eine Möglichkeit.

        Ich würde es wohl über einen Hook lösen. Der catalog bringt da einiges mit z.B. den parseCatalog Hook.
        http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.

        Kommentar

        • Thomas Hinze
          Contao-Nutzer
          • 19.09.2012
          • 163

          #5
          Die Ausgabe macht jetzt was sie soll.
          Ich habe in_array in der zweiten Schleife angewendet, da ich ja auch eine andere Tabelle referenziere.
          Alle doppelten IDs werden jetzt ausgelassen.

          PHP-Code:
          <?php if (count($this->entries)): ?>
          <?php $i = 0; $spalten = 5; ?>
          <? $ids = array(); ?>
          <table>
          <?php foreach ($this->entries as $entry): ?>
          <?php $i++; ?>    
          <?php foreach (array_unique($entry['data']) as $field=>$data): ?>
          <?php if (strlen($data['raw']) && !in_array($field, array('catalog_name','parentJumpTo'))): ?>
          <?php if (array_key_exists('ref', $data)): ?>    
          <?php foreach ($data['ref'] as $ref):
              if (in_array($ref['id'], $ids)):
                  continue;
                  endif;
                  $ids[] = $ref['id']; ?>
              <? if($i%$spalten > 0): echo ("<td width='140px'>"); else : echo ("<tr><td width='140px'>");    endif; ?>
          <a href="<?php echo $ref['profil_url']; ?>"><img src="<?php echo $ref['Foto']; ?>"><br /><?php echo $ref['Name']; ?></a><br/><br/>    
                  <?php endforeach; ?>
                  <?php endif; ?>
          <?php endif; ?>
          <?php endforeach; ?>    
          <?php endforeach; ?>
          <? if($i%$spalten > 0): echo ("</td>"); else : echo ("</td></tr>"); endif; ?>
          </table>
          <?php else: ?>
          <p class="info"><?php echo $this->noItemsMsg; ?></p>
          <?php endif; ?>

          Kommentar

          Lädt...