• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

php foreach

nikl

Neues Mitglied
Hallo

ich ärgere mich gerade mit diesem php code herum und bekomme es einfach nicht hin. Ich versuche folgendes zu realisieren:
Ich habe eine Produkt-Liste, von diesen Produkten besitzen manche ein Attribut namens ForcedShipping. Enthält die Produkt-Liste nun eines oder mehrere der Produkte mit diesem Attribut, möchte ich die extra Info im Paragraph ausgeben. Diese Info soll aber nur einmal angezeigt werden, egal wieviele Produkte mit dem Attribut vorhanden sind. Mein Problem ist, dass ich die Info enweder überhaupt nicht bekomme (wenn ich das foreach weglasse) oder (wenn der Code so ist, wie unten gepostet), dass ich die Info mehrmals erhalte, wenn mehrere Produkte mit dem Attribut vorhanden sind. Wo liegt mein Denkfehler? Das muss doch möglich sein?! Danke!

Code:
<?php $i=0; foreach ($_productCollection as $_product): ?>
    <?php $_product->load($_product->getId()); ?>        
    <?php if ($_product->getForcedShipping()):?>
        <p>DVD-Filme: <span class="intshipping"><a href="/kundenservice#shippingtable" rel="nofollow" onclick="window.open(this.href,'_blank');return false;"><strong>siehe hier</strong></a></span></p>
    <?php endif; ?>
<?php endforeach ?>
 
Ich denke, dir bleibt nichts anderes, als den Vorgang in zwei Schritten zu machen
1) Schaun ob irgendwo forced shipping gesetzt ist (beisielweise durch select count(*) where ... oder foreach durchlaufen)
2) In Abhängigkeit von 1 die Zusatzinfo anzeigen und die individuellen Produktdetaildaten (foreach durchlaufen).
 
Danke für den Tipp! Da werde ich mich wohl mal ein bisschen einlesen müssen, denn das übersteigt mein marginales Wissen aktuell noch...
 
Wenn du den Zusatz am ende ausgeben willst, dann kannst auch nur einen Durchlauf machen und im foreach einen Counter, der anfangs außerhalb der Schleife=0 gesetzt wird, erhöhen, wenn getForcedShipping gesetzt wird. Nach der Loop guckst, ob der Counter !=0 ist.
 
Wenn du den Zusatz am ende ausgeben willst, dann kannst auch nur einen Durchlauf machen und im foreach einen Counter, der anfangs außerhalb der Schleife=0 gesetzt wird, erhöhen, wenn getForcedShipping gesetzt wird. Nach der Loop guckst, ob der Counter !=0 ist.

Eine absolut einache und geniale Idee - darauf wär ich wohl nie gekommen. Vielen Dank, so funktioniert es!!
 
Der break bricht die Schleife ab, dann gibst die restlichen Detailinformationen nach dem ersten getForcedShipping nicht mehr aus.
 
Ja die Schleife soll ja auch abgebrochen werden. Ich bezieh mich jetzt auf den Anfangspost von ihm mit der foreach- schleife.
Dort hat er geschrieben, dass die info entweder gar nicht(foreach schleife ganz weg) , oder oefter als 1 Mal ausgegeben wird,
also kann er sie nach dem 1. ausgeben einfach mit break beenden.

Von anderen Detailinformationen war ja gar nicht die Rede in seiner Frage ;)
 
Hallo Anusha, das mag sein. Aber wenn er nur wissen will, ob ein Flag gesetzt ist, dann reicht ja eine DB-Abfrage für den Count(*) oder einem Exists aus. Egal welchen Anspruch er hat, er hat die genügend Hinweise für die Implementierung und besser die Qual der Wahl als unlösbar :-)
 
Zurück
Oben