Trade Republic - Provisionsfrei Aktien handeln
Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: Foreach abfrage

    Coobi

    • Neu im Forum
    • Beiträge: 16
    Foreach abfrage
    am: 28. November 2013, 17:19:44
    Hallo Leute,

    ich habe gerade einen Slider in meinen Shop eingebaut, der mir immer 4 Artikel nebeneinander anzeigen soll, bevor er auf die 2 Seite slided.

    Die Ausgabe sollte so aussehen:

    Code: PHP  [Auswählen]
       <div>
             <span>Artikel1</span>
             <span>Artikel2</span>
             <span>Artikel3</span>
             <span>Artikel4</span>
            </div>
           

    Nun wollte ich fragen ob es einen Foreach Befehl gibt, damit ich in der Schleife sagen kann das spätestens nach dem 4 Artikel ein neuer <div> Content geöffnet wird ?

    Danke euch für die Hilfe.

    Gruß

    Coobi

    Linkback: https://www.modified-shop.org/forum/index.php?topic=28508.0
    Modulshop - Eine große Auswahl an neuen und hilfreichen Modulen für die modified eCommerce Shopsoftware

    hedon02

    • Viel Schreiber
    • Beiträge: 618
    Re: Foreach abfrage
    Antwort #1 am: 28. November 2013, 17:29:13
     :down: immer mal bei "ähnlichen themen" gucken, falls die forumssuche nicht funktioniert hat.:

    http://www.modified-shop.org/forum/index.php?topic=27174.0

    Grüsse

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.988
    • Geschlecht:
    Re: Foreach abfrage
    Antwort #2 am: 28. November 2013, 18:59:21
    Das sollte einfacher gehen, zumindest noch in der aktuellen Smarty-Version:

    Code: PHP  [Auswählen]
    <div>
        {foreach name=SO_UND_SO item=ITEM_DATA from=$ITEM_ARRAY}
        {php}$section++;{/php}
        <div>
            <span>Artikel1</span>
            <span>Artikel2</span>
            <span>Artikel3</span>
            <span>Artikel4</span>
        {php}
        if ($section >= 4) {
            $section=0;
            echo '</div>';
        }
        {/php}
        {/foreach}
    </div>

    Es stellt sich allerdings die Frage ob die Daten für die Artikel überhaupt in einem Array vorliegen...

    Gruß,
    noRiddle

    Modulfux

    • Experte
    • Beiträge: 3.590
    • Geschlecht:
    Re: Foreach abfrage
    Antwort #3 am: 28. November 2013, 20:07:13
    ... und dieses
    Code: PHP  [Auswählen]
    {php} ... {/php}
    ist auch pfui bäh.

    Dafür gibt es doch
    Code: PHP  [Auswählen]
    {assign var=a value=1}
    {foreach name=SO_UND_SO item=ITEM_DATA from=$ITEM_ARRAY}
    ... CODE
    {assign var=a value=$a+1}
    {/foreach}
     

    Gruß
    Ronny

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.988
    • Geschlecht:
    Re: Foreach abfrage
    Antwort #4 am: 28. November 2013, 20:19:02
    Joo, gibt's ja bald auch in der Form so nicht mehr mit neuer Smarty-Version.
    Wie aber zählst du hoch (a$++) ?

    Gruß,
    noRiddle

    Modulfux

    • Experte
    • Beiträge: 3.590
    • Geschlecht:
    Re: Foreach abfrage
    Antwort #5 am: 28. November 2013, 20:26:04
    Damit
    Code: PHP  [Auswählen]
    {assign var=a value=$a+1}

    Gruß
    Ronny

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.988
    • Geschlecht:
    Re: Foreach abfrage
    Antwort #6 am: 28. November 2013, 20:27:53
    Äääh, jau,  :datz:, wo iss meine Brille...  :hust:

    cYbercOsmOnauT

    • modified Team
    • Beiträge: 914
    • Geschlecht:
    Re: Foreach abfrage
    Antwort #7 am: 28. November 2013, 21:05:50
    Ihr macht es euch unnötig schwer. Eine Schleife im Smarty hat einen Index. Den kann man nutzen und muss nix assignen.
    http://www.smarty.net/docsv2/de/language.function.foreach.tpl
    Code: PHP  [Auswählen]
        <div>
            {foreach name=SO_UND_SO item=ITEM_DATA from=$ITEM_ARRAY}
            {if !($smarty.foreach.SO_UND_SO.iteration-1)%4 || $smarty.foreach.SO_UND_SO.first}<div>{/if}
                <span>Artikel1</span>
                <span>Artikel2</span>
                <span>Artikel3</span>
                <span>Artikel4</span>
            {if !$smarty.foreach.SO_UND_SO.iteration%4 || $smarty.foreach.SO_UND_SO.last}</div>{/if}
            {/foreach}
     
    Viele Grüße,
    Tekin Birdüzen - Zend Certified Engineer

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.988
    • Geschlecht:
    Re: Foreach abfrage
    Antwort #8 am: 28. November 2013, 21:34:07
    Fein das.
    Glauben wir jetzt mal ungetestet ;-).

    Danke.

    Gruß,
    noRiddle

    Coobi

    • Neu im Forum
    • Beiträge: 16
    Re: Foreach abfrage
    Antwort #9 am: 29. November 2013, 07:32:52
    Jetzt muss ich noch mal kurz einhaken,
    ich habe das von cYbercOsmOnauT ausporbiert,

    mein Code sieht zu Testzwecken so aus:

    Code: PHP  [Auswählen]
    {foreach name=aussen item=module_data from=$module_content}
                    {foreach name=test item=products_data from=$module_data.PRODUCTS}
            {if !($smarty.foreach.test.iteration-1)%4 || $smarty.foreach.test.first}<div>{/if}
            <span>
         
                     </span>
             {if !$smarty.foreach.test.iteration%4 || $smarty.foreach.test.last}</div>{/if}
        {/foreach}
        {/foreach}
     

    Wenn ich mur nun den Quellcode anzeigen lasse, wird allerdings nach dem 4 Datensatz
    das div nicht geschlossen und wieder neugeöffnet ?

    Siehe Anhang.

    Danke euch.

    Gruß

    Coobi

    web0null

    • Experte
    • Beiträge: 1.998
    Re: Foreach abfrage
    Antwort #10 am: 29. November 2013, 13:05:58
    Code: PHP  [Auswählen]
    {foreach name=test item=test_data from=$test_array}
      {if ($smarty.foreach.test.iteration-1)%4 == 0 || $smarty.foreach.test.first}<div>{/if}
        <span> </span>
      {if $smarty.foreach.test.iteration%4 == 0 || $smarty.foreach.test.last}</div>{/if}
    {/foreach}
     

    So geht es.
    Weiß aber auch grad nicht warum das negieren "!" nicht geht, dürfte anscheinend kein integer sein.

    Gruß

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.988
    • Geschlecht:
    Re: Foreach abfrage
    Antwort #11 am: 29. November 2013, 13:54:29
    Das Negieren kann ja nicht gehen weil modulo4 einen Integer ergibt, welcher wiederum nicht boolean false ergibt.
    Oder ?

    Eigtl. müsste es auch so gehen:
    Code: PHP  [Auswählen]
    {if ($smarty.foreach.test.iteration)/4 == 1

    oder besser so
    Code: PHP  [Auswählen]
    {if $test@iteration is div by 4}</div><div>{/if}

    Gruß,
    noRiddle

    cYbercOsmOnauT

    • modified Team
    • Beiträge: 914
    • Geschlecht:
    Re: Foreach abfrage
    Antwort #12 am: 29. November 2013, 16:52:38
    Zitat von: noRiddle
    Das Negieren kann ja nicht gehen weil modulo4 einen Integer ergibt, welcher wiederum nicht boolean false ergibt.
    Oder ?
    Daran kann es nicht liegen, denn PHP ist da sehr genügsam. NOT irgendwas das nicht leer, 0 oder String "0" ist, ergibt immer false. Denn für PHP ist bei einer Umwandlung in einen boolschen Wert alles was nicht ein Leerstring, 0 oder der String 0 ist gleich true. Also z.B. (bool) 'hallo' -> true. Kein Peil wieso das im Smarty nicht zu funktionieren scheint.

    Es gibt noch ein paar mehr Fälle bei denen eine boolsche Umwandlung False ergibt. Zu sehen hier: http://php.net/manual/de/language.types.boolean.php - ich hatte jetzt nur die wichtigsten genannt.

    Btw.. ich denke ich sehe gerade meinen Fehler...
    Code: PHP  [Auswählen]
    !($smarty.foreach.SO_UND_SO.iteration-1)%4
    das NOT bezieht sich auf die Klammer. Also z.B. Iteration 2 -> 2-1 = 1 -> !1 = false und daraus Modulo 4. Korrekt wäre
    Code: PHP  [Auswählen]
    !(($smarty.foreach.SO_UND_SO.iteration-1)%4)

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.988
    • Geschlecht:
    Re: Foreach abfrage
    Antwort #13 am: 29. November 2013, 17:17:21
    Ah ja, du hast Recht.
    Wie so oft hast du mal wieder den vollen Durchblick.

    Das, wie ich schrieb, macht die Sache allerdings kürzer und einfacher verständlich als doppelte Verneinungen (not false):
    Code: PHP  [Auswählen]
    {if $test@iteration is div by 4}</div><div>{/if}
    (es sei denn die Smarty-Engine bräuchte dafür länger als für deine Lösung... ;-))

    Merci.

    Gruß,
    noRiddle
    Shop Hosting
    1 Antworten
    2025 Aufrufe
    07. Februar 2015, 17:39:29 von mr.mc.mauser
    3 Antworten
    3077 Aufrufe
    12. Juli 2013, 11:14:28 von karabey
    4 Antworten
    2618 Aufrufe
    29. Januar 2015, 12:19:05 von Hetfield
    17 Antworten
    8972 Aufrufe
    04. September 2009, 18:37:43 von bakmaz