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 ...
MBa
3
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
MBa
5
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
MBa
7
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