Neu {else} einfügen - Problem - Code bitte korrekturlesen

mona

Gut bekanntes Mitglied
26. April 2016
291
22
Hallo

Ich möchte im Warenkorb (template: inc_order_items Shop 4.06), vor der Anzeige der Gesamtsumme zwei Foreach-Schleifen abfragen, und wenn die dort angegebenen Bedingungen
zutreffen meine CustomSpachvariable "Offerte folgt" ausgeben lassen,

Wenn keine dieser Bedingungen zutreffen, soll die Gesamtsumme Netto, MWST..) also alles ab {if $NettoPreise angezeigt werden.

Bringe aber das {else} oder {elseif} nicht richtig rein und ohne zeigt es mir logischerweise "Offerte folgt" und Preis an - Code weiter unten
1634807895415.png

HTML:
 <tfoot>
    {foreach name=positionen from=$smarty.session.Warenkorb->PositionenArr item=oPosition}
    {if (!isset($oPosition->WarenkorbPosEigenschaftArr) && $oPosition->Artikel->Preise->fVKNetto == 0)}
              <tr class="total-net"> <td class="text-right price-col" colspan="7"><strong class="price total-sum">
                                            {lang key="no_price_warenkorb" section="custom"}</strong></td></tr> {/if}{/foreach}
  
    {foreach name=variationen from=$oPosition->WarenkorbPosEigenschaftArr item=Variation}
                         {if (isset($oPosition->WarenkorbPosEigenschaftArr) && !empty($oPosition->WarenkorbPosEigenschaftArr) && $Variation->cEigenschaftWertName.ger=='gebraucht') ||
                             (isset($oPosition->WarenkorbPosEigenschaftArr) && !empty($oPosition->WarenkorbPosEigenschaftArr) && $Variation->cEigenschaftWertName.ger=='neu' && $oPosition->Artikel->Preise->fVKNetto == 0)}
                        
                                                                                                                    
                                            <tr class="total-net"> <td class="text-right price-col" colspan="7"><strong class="price total-sum">
                                            {lang key="no_price_warenkorb" section="custom"}</strong></td></tr> {/if}{/foreach}
    
                                              
                  
    {if $NettoPreise}
etc.....

Kann ich denn nicht ein einfaches {else} vor {if $Netto....} setzen? Grübel grübel und lange probiert.....
Besten Dank fürs Korrekturlesen und einen Tipp!
mona
 

Scriptfarm DEV

Aktives Mitglied
7. Dezember 2018
63
17
Ich habe jetzt deinen Code nicht gelesen.

Aber so wie du ein {else} Statement einsetzen kannst, würde auch ein {elseif} greifen.
Natürlich kannst du es weiter verschachteln wie du möchtest.

Als wichtige Regel bitte ein Child-T einsetzten, niemals Änderungen in Core Templates vornehmen.
 

mona

Gut bekanntes Mitglied
26. April 2016
291
22
Vielen lieben Dank für das lesen und die turboschnelle Antwort. Ist als Child-T gesetzt.
Das {elseif} vor $NettoPreise habe ich bereits probiert, funzt leider nicht........
 

Scriptfarm DEV

Aktives Mitglied
7. Dezember 2018
63
17
Es sollte aber funktionieren, sonst liegt ein Fehler bei dir vor.
Die Frage ist daher, liegt ein Fehler in der Zuweisung der Variablen, oder ein Fehler in der Kontrollstruktur vor.
Frage im Template als erstes ab, ob "a" wirklich gleich "b" ist, oder "b" vielleicht leer ist, dann greift natürlich der gewünschte Abfrage nicht.

Vielleicht habe ich später mal zehn Minuten Zeit mir deinen Code anzuschauen.

Code:
{if $step == "1"}
    {include file='tpl_inc/template1.tpl'}
{elseif $step == "2"}
    {include file='tpl_inc/template2.tpl'}
{elseif $step == "3"}
    {include file='tpl_inc/template3.tpl'}
{else}
    {include file='tpl_inc/template0.tpl'}
{/if}
 
Zuletzt bearbeitet:

mona

Gut bekanntes Mitglied
26. April 2016
291
22
Lieben Dank. Ist auch meine Else-Logik. Wenn ich die If-Schleife vor {foreach} einbaue, dann klappt es schon mal so, dass ich zum Schluss das {else} für die Gesamtpreise einsetzen kann und mir
die Sprachvariable bei Preis 0 angezeigt wird bei Artikeln ohne Eigenschaft.

Mit der foreach-Schleife für meine Varianten (EigenschaftWertName) bin ich mir der Reihenfolge nicht sicher. Es muss doch zuerst in die Schleife reingehen, damit die Variabeln überhaupt gelesen werden können?
Dann spukt es wieder wenn ich {elseif} unterhalb der Schleife anbringe......Wie bringe ich da die richtige Reihenfolge hin? Wo schliesse ich die foreach-Schleife am besten?

neuer Code
HTML:
 {if (empty($oPosition->WarenkorbPosEigenschaftArr) && $oPosition->Artikel->Preise->fVKNetto == 0)}
           {foreach name=positionen from=$smarty.session.Warenkorb->PositionenArr item=oPosition}
          <tr class="total-net"> <td class="text-right price-col" colspan="7"><strong class="price total-sum">
           {lang key="no_price_warenkorb" section="custom"}</strong></td></tr> {/foreach}
 
**************************H I E R   H A B E   I C H    E I N    D U R C H E I N A N D E R   M I T    D E R    R E I H E N F O L G E....**********************************************************
 {elseif (!empty($oPosition->WarenkorbPosEigenschaftArr) && $Variation->cEigenschaftWertName.ger=='gebraucht' && $oPosition->Artikel->Preise->fVKNetto == 0) ||
               (!empty($oPosition->WarenkorbPosEigenschaftArr) && $Variation->cEigenschaftWertName.ger=='neu' && $oPosition->Artikel->Preise->fVKNetto == 0)}
       
             {foreach name=variationen from=$oPosition->WarenkorbPosEigenschaftArr item=Variation}
        
            <tr class="total-net"> <td class="text-right price-col" colspan="7"><strong class="price total-sum">
           {lang key="no_price_warenkorb" section="custom"}</strong></td></tr>

            {/foreach}
********************************************************************************************************************************************************************************************************************
   {else}
    {if $NettoPreise}
 

mona

Gut bekanntes Mitglied
26. April 2016
291
22
Obige Abfrage funktioniert nun bedingt (jetzt auf Template Nova, Shop 5.1)

Einziges Problem, es wird jedes "Resultat" angezeigt - wie kann ich den ausgegebenen Wert auf den einen richtigen reduzieren?

Habe kurz zusammengefasst:

foreach-schleife für eigenschaft
if Eigenschaft so Offerte folgt
elseif andere Eigenschaft Gesamtpreis
/if
/foreach

foreach-schleife position normalprodukt
if Preis 0 Offerte folgt
elseif Gesamtpreis
/if

Ich müsste aber die Möglichkeit haben, die nächste Schleife zu öffnen, ohne die vorherige mit /if zu beenden, so dass ich immer auf elseif bin, dass findet smarty aber nicht lustig :(
Foreachelse geht auch nicht................ Wäre superlieb, wenn mir jemand helfen könnte lg mona

1637688687812.png
 

FMoche

Moderator
Mitarbeiter
15. Dezember 2014
1.359
340
Halle (Saale)
Ich bin nicht sicher, ob ich dein Problem richtig verstehe, aber warum arbeitest du nicht einfach mit einer (oder je nach Problemstellung zwei) Variablen und prüfst nach deinen Schleifendurchläufen deren Wert?
Code:
{$myVariable=false}
{$myOtherVariable=false}
{foreach...}
    {if $irgendwas}
        {$myVariable=true}
    {/if}
    {foreach...}
        {if $irgendwas}
            {$myOtherVariable=true}
        {/if}
    {/foreach}
{/foreach}
{if $myVariable === true}
...dann erscheint dieser Text
{/if}
{if $myOtherVariable === true}
...oder auch dieser Text
{/if}
 

mona

Gut bekanntes Mitglied
26. April 2016
291
22
Danke für den Input. Könnte passen. Ich denke Du verstehst mein Problem.

Die Namen der Variabeln, können die frei erfunden werden für die true-Abfrage? Oder müssen die
im Kontext zu den Schleifen stehen (z.B. Name der items)??
Lieben Dank
mona
 

mona

Gut bekanntes Mitglied
26. April 2016
291
22
Hallo FMoche

Das mit Resultat nur 1x anzeigen funktioniert soweit, danke. Aber.....mir zeigt es jetzt beide Variabeln als richtig an. Habe nun mal meine Bedingungen sehr reduziert...
Code:
 {$offertefolgt=false}
   {$gesamtpreis=false}
         {foreach $smarty.session.Warenkorb->PositionenArr as $oPosition}                     
                        {if $oPosition->Artikel->Preise->fVKNetto == 0}
                    
                                           {$offertefolgt=true}                                                                   
                        {/if} 
                                            
          {/foreach}             
                                
         {foreach $smarty.session.Warenkorb->PositionenArr as $oPosition}                     
                        {if $oPosition->Artikel->Preise->fVKNetto >0}
                      
                                            {$gesamtpreis=true}     
                        {/if}
        {/foreach}
                      
        {if $offertefolgt === true}
        {block name='checkout-inc-order-items-price-net'}
            {row class="total-net"}
              {col }     
                 <span class="price-label"><strong>{lang key="no_price_warenkorb" section="custom"} </strong></span>
              {/col}
            {/row}{/block}
      
      {/if}
                
        {if $gesamtpreis === true}
                
                    {if $NettoPreise}
                        {block name='checkout-inc-order-items-price-net'}
                            {row class="total-net"} etc.....

So zeigt es mir fälschlicherweise "beide Resultate" als richtig an, (KEIN PREIS IST MIT 0.00 IM WARENKORB)
1638786722497.png

mache ich IF Variable $offertefolgt === true dann "Offerte folgt" ELSEIF Variable $gesamtpreis === true dann "Preis" ergibt es fälschlicherweise
1638786986016.png

Obwohl die Variable $offertefolgt einen false-Wert ergeben sollte, da alle Preise > 0
und die Variable $gesamtpreis hier greifen sollte.....
Woran kann das liegen? Muss ich noch festlegen, was gemacht werden soll, wenn die Variable einen False-Wert ergibt?
Lieben Dank
gruss
mona
 

Anhänge

  • 1638786824194.png
    1638786824194.png
    13 KB · Aufrufe: 0

mona

Gut bekanntes Mitglied
26. April 2016
291
22
@FMoche

Habe die Lösung gefunden.....logischerweise wird die Variable bei jeder Abfrage neu überschrieben und was zuletzt bool(true) ergibt, zählt als wahr......und bei zwei Variabeln wie oben - wenn beide stimmen, zeigt es beide
Bedingungen an................also eigentlich auch logisch....wenn man nicht gerade auf der Leitung steht ;)

lieben Dank & Gruss mona
 
Ähnliche Themen
Titel Forum Antworten Datum
Neu Weiterleitungen direkt per Datenbank einfügen aufgrund Größe bzw. Anzahl? Betrieb / Pflege von JTL-Shop 9
Neu SQL-Erfahrene vor - Nach Datenrettung - fehlende Aufträge lassen sich nicht einfügen - Ideen? User helfen Usern 4
Neu EK-Preise per Workflow in Lieferantenbestellung einfügen? User helfen Usern - Fragen zu JTL-Wawi 0
In Bearbeitung $discount$ Variable in den Tagesabschluss einfügen Allgemeine Fragen zu JTL-POS 3
Positionen alle auf einmal z.B über csv in einen bestehenden Auftrag einfügen JTL-Wawi 1.8 2
Neu Google Shopping Problem Allgemeine Fragen zu JTL-Shop 1
Neu Shopify Erhöhung der Varianten von 100 auf 2000 - Connector App Problem Shopify-Connector 1
Neu Automatisierter Import Händler-CSV, Problem mit unterschiedlichen Artikeln bei gleicher EAN Schnittstellen Import / Export 7
Gelöst Hardware für häufige Konstellationen mit USB und Swissbit TSE-Problem ab Android 11 JTL-POS - Fragen zu Hardware 5
Neu custom.css Versionierung / Cache Problem? Technische Fragen zu Plugins und Templates 5
Neu Problem mit Produkt-Link (?isAjax) JTL-Shop - Fehler und Bugs 3
Neu FFN Portal down - Gateway Problem? JTL-Wawi - Fehler und Bugs 4
Neu DHL Wunschzustellung - Problem bei Einstellungen u. Ausschluss von Zahlungsarten?! User helfen Usern - Fragen zu JTL-Wawi 2
Problem ebay Abgleich JTL-Wawi 1.8 4
Neu Problem beim Update von 5.0.0 auf 5.2.4 (Integrity constraint violation: 1062 Duplicate entry 'COUNTRY_VIEW' for key 'PRIMARY'") Installation / Updates von JTL-Shop 3
Neu Problem mit Plugin-Aktivierung und WooCommerce-Kompatibilität WooCommerce-Connector 2

Ähnliche Themen