In foreach eine Variable anhängen

Hallo,

ich möchte in foeach eine Variable anhängen.


[{foreach from=$oDetailsProduct->getTitel_Titelliste_1() item=titel}] 

So funktioniert das bisher.

Wenn ich das jetzte aber wie folgt gestallte geht nichts mehr.
Ansteller der 1 füge ich hier jetzt $anzahl ein.


[{foreach from=$oDetailsProduct->getTitel_Titelliste_$anzahl() item=titel}] 

Kann mir jemand sagen, wie die Syntax heir korrekt wäre?

Gruß,
Norbert

Meinst du sowas?

[{foreach from=$oDetailsProduct->getTitel_Titelliste_1() item=titel key=variname ...

Das geht weder mit php noch mit smarty. Wenn dann mit call_user_func…

aber…


public function getTtitle_Titleliste()

könnte man ja mit einen Parameter erweitern.


public function getTtitle_Titleliste($anzahl)

Diese Methode kann dann entweder call_user_func nutzen. Glaube aber, dass es dann auch ohne so etwas geht.

Smarty sieht dann so aus.


[{foreach from=$oDetailsProduct->getTitel_Titelliste($anzahl) item=titel}] 

[QUOTE=cottoneyejoe;62114]Meinst du sowas?

[{foreach from=$oDetailsProduct->getTitel_Titelliste_1() item=titel key=variname ...

[/QUOTE]

Hallo,

ich hole die Werte wie folgt aus der Datenbank:


    public function getTitel_Titelliste_1()
    { 
    $oS=oxNew('oxSeoEncoder'); 
    $aPlainTitles = explode("@", $this->oxarticles__art_titelliste_a->value); 
    $aTitles=array(); 
    foreach($aPlainTitles as $sValue){ 
        $aTitles[$oS->encodeString($sValue)]=$sValue; 
    } 
    
    $sOutTitel = $aTitles; 
    return $sOutTitel; 
    }

    public function getTitel_Titelliste_2()
    { 
    $oS=oxNew('oxSeoEncoder'); 
    $aPlainTitles = explode("@", $this->oxarticles__art_titelliste_a->value); 
    $aTitles=array(); 
    foreach($aPlainTitles as $sValue){ 
        $aTitles[$oS->encodeString($sValue)]=$sValue; 
    } 
    
    $sOutTitel = $aTitles; 
    return $sOutTitel; 
    }

    public function getTitel_Titelliste_3()
    { 
    $oS=oxNew('oxSeoEncoder'); 
    $aPlainTitles = explode("@", $this->oxarticles__art_titelliste_a->value); 
    $aTitles=array(); 
    foreach($aPlainTitles as $sValue){ 
        $aTitles[$oS->encodeString($sValue)]=$sValue; 
    } 
    
    $sOutTitel = $aTitles; 
    return $sOutTitel; 
    }

   usw.




Im template könnte ich die dann mit foreach alle aufrufen.

…$oDetailsProduct->getTitel_Titelliste_1()
…$oDetailsProduct->getTitel_Titelliste_2()
…$oDetailsProduct->getTitel_Titelliste_3()
…$oDetailsProduct->getTitel_Titelliste_4()
usw

Aber anstelle die alle anzugeben möchte ich bei jedem Schleifendurchlauf einen Zähler um eins erhöhen.

Und somit nur angeben:

…$oDetailsProduct->getTitel_Titelliste_$anzahl()

Geht das?

Gruß,
Norbert

Was möchtest Du erreichen? Alle Methoden machen das gleiche.

[QUOTE=MBa;62119]Was möchtest Du erreichen? Alle Methoden machen das gleiche.[/QUOTE]

Entschuldige bitte.
Die Abfrage innerhalb der Funktion greift auf unterschiedliche Spalten in der Tabelle oxarticles zu.

…("@", $this->oxarticles__art_titelliste_a->value)
…("@", $this->oxarticles__art_titelliste_b->value)
…("@", $this->oxarticles__art_titelliste_c->value)
usw.

Es sind also unterschiedliche Werte in der Rückgabe.
Gruß,
Norbert

Nicht in Deinen Post.

[QUOTE=Kaiser3;62117]


    public function getTitel_Titelliste_1()
    { 
    $oS=oxNew('oxSeoEncoder'); 
    $aPlainTitles = explode("@", $this->oxarticles__art_titelliste_a->value); 
    $aTitles=array(); 
    foreach($aPlainTitles as $sValue){ 
        $aTitles[$oS->encodeString($sValue)]=$sValue; 
    } 
    
    $sOutTitel = $aTitles; 
    return $sOutTitel; 
    }

    public function getTitel_Titelliste_2()
    { 
    $oS=oxNew('oxSeoEncoder'); 
    $aPlainTitles = explode("@", $this->oxarticles__art_titelliste_a->value); 
    $aTitles=array(); 
    foreach($aPlainTitles as $sValue){ 
        $aTitles[$oS->encodeString($sValue)]=$sValue; 
    } 
    
    $sOutTitel = $aTitles; 
    return $sOutTitel; 
    }

    public function getTitel_Titelliste_3()
    { 
    $oS=oxNew('oxSeoEncoder'); 
    $aPlainTitles = explode("@", $this->oxarticles__art_titelliste_a->value); 
    $aTitles=array(); 
    foreach($aPlainTitles as $sValue){ 
        $aTitles[$oS->encodeString($sValue)]=$sValue; 
    } 
    
    $sOutTitel = $aTitles; 
    return $sOutTitel; 
    }

   usw.




[/QUOTE]

Wie auch immer, ich würde nur eine Methode mit Parameter machen, und dann je nach Parameterwert halt einen anderen Wert zurückgeben

Innerhalb von php kann man auf Object-Variablen dynamisch zugreifen:


$a->container->subcontainer='value';
$s='container';
echo $a->$s->subcontainer;//output = value

sollte so mit nur einer Methode gehen.

Edit:

GGf. kann smarty so etwas
http://www.php.net/manual/de/function.call-user-func.php#99870