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: doppelte foreach-Schleife mit smarty

    Modulfux

    • Experte
    • Beiträge: 3.590
    • Geschlecht:
    doppelte foreach-Schleife mit smarty
    am: 03. August 2013, 14:21:15
    Ich bin mal wieder mit smarty auf dem Kriegspfad und mein Gedanke will absolut nicht klappen.

    Ich möchte folgendes Konstrukt mit 12 Produkten realisieren.

    Code: XML  [Auswählen]
    <div class="foo active">
      {foreach name=aussen item=box_data from=$box_content}
        ... hier kommen 4 Produkte hin
      {/foreach}
    </div>
    <div class="foo">
      {foreach name=aussen item=box_data from=$box_content}
        ... hier kommen 4 Produkte hin
      {/foreach}
    </div>
    <div class="foo">
      {foreach name=aussen item=box_data from=$box_content}
        ... hier kommen 4 Produkte hin
      {/foreach}
    </div>
    <div class="foo">
      {foreach name=aussen item=box_data from=$box_content}
        ... hier kommen 4 Produkte hin
      {/foreach}
    </div>
     

    Wie bekomme ich es hin dass die Zeile mit <div class="foo"> auch durch ein foreach in 4er Schritten ausgegeben wird. Mit dieser iteration und smarty komme ich einfach nicht klar.

    Gruß
    Ronny

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

    hedon02

    • Viel Schreiber
    • Beiträge: 618
    Re: doppelte foreach-Schleife mit smarty
    Antwort #1 am: 03. August 2013, 14:46:26
    Hallo Webkiste,

    Versuch mal dies:

    Code: PHP  [Auswählen]
    <div class="foo">
      {foreach name=aussen item=box_data from=$box_content}
      <ul class="product">
        <li></li>
      </ul>
    {*<!--nach jedem 4.Element oder dem letzten .foo schliessen-->*}
    {if $smarty.foreach.aussen.iteration is div by 4 || $smarty.foreach.aussen.last}
    </div>{/if}
    {*<!--und falls es nicht das letzte Element ist, wieder öffnen-->*}
    {if $smarty.foreach.aussen.iteration is div by 4 and !$smarty.foreach.aussen.last}
    <div class="foo">{/if}
    {/foreach}
     

    Viele Grüsse

    Modulfux

    • Experte
    • Beiträge: 3.590
    • Geschlecht:
    Re: doppelte foreach-Schleife mit smarty
    Antwort #2 am: 03. August 2013, 14:58:59
    Hallo Hedon,

    soetwas hatte ich auch schon ausprobiert, aber es funktioniert nicht.

    Dieser HTML-Code soll zum Schluss heraus kommen.
    Code: XML  [Auswählen]
    <div class="item product-grid active">

      <div class="row-fluid box-product">
     
        <div class="span3 product_block first">
          <div class="product-inner">
            <div class="image">
              <a href=""><img src="{$tpl_path}img/test.jpg" alt="MLorem ipsum dolor sit"></a>
            </div>
            <div class="wrap-infor">
              <div class="name"><a href="">Lorem ipsum dolor sit</a></div>
              <div class="description">Lorem ipsum dolor sit</div>
              <div class="price">236.99 €</div>
              <div class="cart"><a href="" class="button">Warenkorb</a></div>
            </div>  
          </div>
        </div>
       
        <div class="span3 product_block">
          <div class="product-inner">
            <div class="image">
              <a href=""><img src="{$tpl_path}img/test.jpg" alt="Magni dolores eos" /></a>
            </div>
            <div class="wrap-infor">
              <div class="name"><a href="">Magni dolores eos</a></div>
              <div class="description">Magni dolores eos</div>
              <div class="price">119.50 €</div>
              <div class="cart"><a href="" class="button">Warenkorb</a></div>
            </div>  
          </div>
        </div>
       
        <div class="span3 product_block">
          <div class="product-inner">
            <div class="image">
              <a href=""><img src="{$tpl_path}img/test.jpg" alt="Eaque ipsa quae" /></a>
            </div>
            <div class="wrap-infor">
              <div class="name"><a href="">Eaque ipsa quae</a></div>
              <div class="description">Eaque ipsa quae</div>
              <div class="price">119.50 €</div>
              <div class="cart"><a href="" class="button">Warenkorb</a></div>
            </div>  
          </div>
        </div>
       
        <div class="span3 product_block ">
          <div class="product-inner">
            <div class="image">
              <a href=""><img src="{$tpl_path}img/test.jpg" alt="Nam libero tempore" /></a>
            </div>
            <div class="wrap-infor">
              <div class="name"><a href="">Nam libero tempore</a></div>
              <div class="description">Nam libero tempore</div>
              <div class="price">1,177.00 €</div>                          
              <div class="cart"><a href="" class="button">Warenkorb</a></div>
            </div>  
          </div>
        </div>
       
      </div>
     
    </div>
     

    Das komplett umschließenede <div> (<div class="item product-grid active">) soll nach 4 Artikeln geschlossen werden und wieder geöffnet werden. Ich drehe hier noch durch. *grml*

    Gruß
    Ronny

    hedon02

    • Viel Schreiber
    • Beiträge: 618
    Re: doppelte foreach-Schleife mit smarty
    Antwort #3 am: 03. August 2013, 15:24:23
     :-? also bei mir funzt das:

    Code: XML  [Auswählen]
    <div class="item product-grid active pictureframe">
      <div class="row-fluid box-product">
    {foreach name=aussen item=module_data from=$module_content}  
        <div class="span3 product_block first">
          <div class="product-inner">
            <div class="image">
              <a href=""><img src="{$tpl_path}img/test.jpg" alt="MLorem ipsum dolor sit"></a>
            </div>
            <div class="wrap-infor">
              <div class="name"><a href="">Lorem ipsum dolor sit</a></div>
              <div class="description">Lorem ipsum dolor sit</div>
              <div class="price">236.99 €</div>
              <div class="cart"><a href="" class="button">Warenkorb</a></div>
            </div>  
          </div>
        </div>
    {if $smarty.foreach.aussen.iteration is div by 4 || $smarty.foreach.aussen.last}  
      </div>
    </div>
    {/if}
    {if $smarty.foreach.aussen.iteration is div by 4 and !$smarty.foreach.aussen.last}
    <div class="item product-grid active pictureframe">
      <div class="row-fluid box-product">
    {/if}
    {/foreach}

    getestet in der new_products_default.html.

    Probier nochmal

    Grüsse

    P.S.:  die .first ist aber ein bischen schwieriger, könntest Du vielleicht mit {counter} lösen:

    Code: XML  [Auswählen]
    {counter start=0 print=false}
    <div class="item product-grid active pictureframe">
      <div class="row-fluid box-product">
    {foreach name=aussen item=module_data from=$module_content}  
        <div class="span3 product_block" id="no_{counter}">

    Dann hat jedes Element eine id="no_Zahl". Counter kann man sicher auch auf bestimmte Zahlen prüfen, aber ich finds immer ganz nützlich die Container im Zweifel auch einzeln ansprechen zu können.

    Grüsse

    Modulfux

    • Experte
    • Beiträge: 3.590
    • Geschlecht:
    Re: doppelte foreach-Schleife mit smarty
    Antwort #4 am: 03. August 2013, 17:45:21
    Du hast meinen nachmittag gerettet, Hedon. Es funktioniert 100%ig.

    Die Sache mit dem .first habe ich über
    Code: XML  [Auswählen]
    {assign var=a value=1}
    und Iteration gelöst, so dass ich dann mit
    Code: PHP  [Auswählen]
    {if $a == 1 || $a == 5 || $a == 9}first{/if}
    auf den jeweiligen Durchlauf prüfe.

    Gruß
    Ronny

    hedon02

    • Viel Schreiber
    • Beiträge: 618
    Re: doppelte foreach-Schleife mit smarty
    Antwort #5 am: 03. August 2013, 21:51:42
     :cheers:

    Grüsse
    2 Antworten
    2668 Aufrufe
    15. Mai 2013, 20:42:45 von Modulfux
    6 Antworten
    5298 Aufrufe
    22. August 2011, 16:02:40 von Modulfux
    3 Antworten
    3062 Aufrufe
    12. Juli 2013, 11:14:28 von karabey
    1 Antworten
    2667 Aufrufe
    17. Juni 2010, 20:19:22 von Benny
               
    anything