Ergebnis 1 bis 5 von 5

Thema: Catalog - List / Array / Ausgabe doppelter Werte verhindern

  1. #1
    Contao-Nutzer
    Registriert seit
    19.09.2012.
    Beiträge
    99

    Standard 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; ?>
    Geändert von Thomas Hinze (22.09.2012 um 21:05 Uhr)

  2. #2
    Contao-Urgestein Avatar von Tim G
    Registriert seit
    13.02.2010.
    Ort
    Lübeck
    Beiträge
    2.210
    User beschenken
    Wunschliste

    Standard

    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.

  3. #3
    Contao-Nutzer
    Registriert seit
    19.09.2012.
    Beiträge
    99

    Standard

    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))

  4. #4
    Contao-Urgestein Avatar von Tim G
    Registriert seit
    13.02.2010.
    Ort
    Lübeck
    Beiträge
    2.210
    User beschenken
    Wunschliste

    Standard

    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.

  5. #5
    Contao-Nutzer
    Registriert seit
    19.09.2012.
    Beiträge
    99

    Standard

    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; ?>

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •