Include - Übergabe einer Variable by Reference nicht by Value?

Hallo sehr geschätzte Kollegen :),

Ich habe eine Frage zu der Übergabe von Variablen bei dem mehrfachen Aufrufen von Template Dateien mit dem include-Tag.

Meine listing.tpl ruft per foreach-tag für jeden Artikel meine box-article.tpl auf. Im listing habe ich mir 2 verschiedene Counter angelegt, welche in der box-article.tpl verändert werden.

Allerdings wird bei jedem Aufruf der box-article.tpl die Startwerte der Counter übergeben, anstatt dass die Änderungen aus der box-article.tpl gespeichert werden.

Hier ein wenig Code zum Verständnis:

{assign var="varCounter" value=0 scope="global"}
{assign var="artCounter" value=0 scope="global"}

{foreach $sArticles as $sArticle}
    {include file="frontend/listing/box-article.tpl"}
{/foreach}

Es funktioniert, wenn ich den Inhalt von box-article.tpl in die listing einfüge.

Bei jedem Aufruf wird also nur der Value 0 übergeben und nicht die Referenz auf den Counter. Weiß jemand, wie ich meine Variable übergeben kann?

 

Viele Grüße,

Cedric Klosa

Zählst du denn die Variablen während der Schleife hoch?

Davon ist derzeit nämlich nichts zu sehen…

Wenn nichts hilft kannst du die Variable temporär in die Session schreiben und dann auf die Session-Variable zugreiffen, aber sehe keinen Grund wieso das nicht auch auf die herkömmliche Weise funktionieren sollte…

1 Like

Danke für die schnelle Antwort. :slight_smile:
Ja in der box-article.tpl wird die Counter Variable verändert. Einfach per {$varCounter = $varCounter + 1}.
Der Counter zählt aber nicht äquivalent zur foreach Schleife.

In die Session speichern ist wirklich ein wenig OP :smiley:
zur not würde es auch gehen, den Code eingefügt zu lassen, aber es muss ja auch eine Möglichkeit geben Pointer zu verteilen oder nicht?

Ich kenne noch das {include file=“eineDatei” meineVar=$varCounter}

Aber da kopiert er glaube ich ja auch nur den Wert…

Laut Smarty-Handbuch kann man nur innerhalb von PHP Variablen by reference deklarieren.

Könntest du nicht einfach das Hochzählen innerhalb der Schleife setzen und nicht als Teil des include-Skripts?

 

Alternative wäre vielleicht noch ein Array, welches du während der Schleife erweiterst und dann einen Count darauf ausführst, aber das wäre noch schlimmer als die Session-Variable :stuck_out_tongue:

1 Like

Auf die Array-Idee hätte mein Kopf auch kommen können xD

Aber die Idee, das Hochzählen vorzuziehen, ist vielleicht eine gute Idee. Das Problem ist nur, dass es bereits die passenden Abfragen innerhalt der box-article.tpl gibt und ich nur noch ein Counter++ reinschreiben müsste. Wenn ich dann das Zählen hochziehe, würde ich ja trotzdem nur den Problem mit der Übergabe umgehen.

Denke, die Session lasse ich in Ruhe und füge meine Template einfach so ein.

Aber wenn es ohne weiteres nicht möglich ist, hab ich ja meine Antwort bekommen :slight_smile: Danke dafür :slight_smile: