Dynamische Variable?

Hallo zusammen,

wie kann ich in den Templates Variablen dynamisch adressieren?

Wenn ich z.B. in oxarticles neue Felder angelegt habe
neues_feld1 bis neues_feld10
(für jede Sprache eines) und eine Variable sprach_id,
möchte ich etwas in dieser Art machen:

[
{assign var="variablenname" value=$product->oxarticles__neues_feld$sprach_id->value }]

(obiges Beispiel funktioniert nicht, aber so soll es im Prinzip laufen)

In der Smarty-Doku habe ich nichts entsprechendes gefunden…

Grüße
floko

Ja, das ist meine größte Kritik an Smarty.:rolleyes:


[{assign var=temp value=$product->oxarticles__neues_feld|cat:$sprach_id}]
[{assign var="variablenname" value=$product->$temp->value }]

Ist ungetestet, sollte aber so gehen.

Hallo Markus,
danke für den Tipp.
Leider will’s noch nicht klappen…

z.B. wenn $sprach_id = 1


[{ assign var="temp" value="$product->oxarticles__neues_feld$sprach_id" }]
<!-- temp is [{ $temp }] or [{ $temp->value }] or [{ $product->$temp->value }] -->
<!-- should be  [{ $product->oxarticles__neues_feld1 }] -->

Es kommt heraus:

$temp ist Object id #97->oxarticles__neues_feld1

$product->$temp->value ist leer

$temp->value ist ebenfalls leer

Im Gegencheck zeigt $product->oxarticles__neues_feld1 den korrekten Inhalt an.

Mache ich bei der Adressierung was falsch?

Ich sehe bei Dir nirgends den Befehl cat und Anführungszeichen um Variablen. :wink:

Oh. :o
Hab das mal korrigiert:


[{ assign var="sprach_id" value=$langId+1 }]
[{assign var=temp value=$product->oxarticles__neues_feld|cat:$sprach_id}]
[{assign var="variablenname" value=$product->$temp->value }]
<!-- test sprach_id = [{ $sprach_id }]  test variablenname = [{ $variablenname }] -->

Leider kommt immer noch kein Wert für $variablenname an ($sprach_id ist korrekt).

Ich hab das Ganze spasseshalber auch mal mit dem Standardfeld OXPIC[Zahl] versucht, das klappt aber auch nicht. (Und einmal var=temp mit Anführungszeichen, einmal ohne.) :confused:

(Klar, schlimmstenfalls könnte ich ein “else if-Monster” bauen für alle 10 Sprachen und das Feld neues_feldX jedesmal hart kodieren. Aber das muss doch auch anders gehen?)

Grüsse
floko

Ups…
Das war mein Fehler:
[{assign var=temp value=[B]$product->oxarticles__neues_feld[/B]|cat:$sprach_id}]

Versuche mal dieses:


[{assign var=temp value="oxarticles__neues_feld"|cat:$sprach_id}]
[{$temp}]
[{assign var="variablenname" value=$product->$temp->value }]

$temp muss dann oxarticles_neues_feld1 oder 2 oder so sein. Dann sollte es gehen.

Und schlimmstenfalls kannst Du ein Smarty Plugin schreiben, welches Dir die Daten im Template bereitstellt. Modifier-Plugins sind am einfachsten, weiß aber nicht, ob das ausreicht.
… oder halt die View bzw. Artikel-Klasse erweitern.

Perfekt - das ist es!

Vielen Dank!!! :slight_smile:

Ich verwende die zusätzlichen Felder in oxarticles übrigens, um für SEO-Zwecke die Title-Tags individuell anpassen zu können. Vielleicht kann das ja noch jemand brauchen, so sieht’s also im Header-Template aus:


[{assign var=langId value=$_language->id}]

...

[{ assign var="seolang" value=$langId+1 }]
[{ assign var=seotitlevar value="oxarticles__seo_title"|cat:$seolang }]
[{assign var="seotitle" value=$product->$seotitlevar->value }]

[{ if $seotitle }] [{assign var="title" value=$seotitle}] [{/if}]

Kurze Erklärung: Ist das Feld seo_title[Sprach-ID] gesetzt, holt sich das Template die Info für den Title-Tag daraus anstatt wie sonst aus dem Produkt-Titel.

Hallo zusammen,

finde das Thema wirklich spannend - eventuell gibt es hierzu schon eine Idee es über den AdminBereich zu steuern.
Da mir es auf den ersten Blick ein wenig kompliziert ausgesehen hat hab ich kurzerhand die Kurzbeschreibung für diesen Zweck verwendet und steuer es über ein extra .tpl
Damit hab ich es multi-language und kann es über die tpl’s - mehr oder weniger - bequem steuern.

Allerdings würde ich es sehr spannend finden unter dem Reiter seo felder mit reinnehmen zu können die speziell für die MetaTags Verwendung finden - getrennt nach Titel und Beschreibung.

gruesse