Frage

Ich möchte einige Variablen Zugang sein, die ich dynamisch von PHP in Smarty zugewiesen haben, hier ein Beispiel:

$content_name = 'body'
$smarty->assign('content_name',$content_name);
$smarty->assign($content_name.'_title',$title);
$smarty->assign($content_name.'_body',$body);

// assigned values
// $content_name = home
// $home_title = $title
// $home_body = $body

Der Grund möchte ich diese dynamisch zuzugreifen, ist, weil ich mehrere Versionen einer Funktion aufrufen, die den obigen Code enthält, sie alle verwenden die gleiche Vorlage und deshalb wollen nicht einfach $ Titel verwenden, $ Körper usw. als ihre valus werden miteinander in Konflikt geraten.

Da ich weiß, ich will den Titel und die Körpergrößen auf den CONTENT_NAME I Set basiert zugreifen zu können, wie ich dies in Smarty erreicht werden?

War es hilfreich?

Lösung

Wie pro meinem Kommentar auf ein Array statt dynamischer Variablen, hier ist ein Beispiel dafür, wie die Vars zu einem Array hinzuzufügen:

php:

$vars = array();

function whatever() {
    global $vars;


    $vars[] = array(
        'firstname' => 'Mike',
        'surname' => 'Smith'
    );
}

$smarty->assign('vars', $vars);

Smarty:

{section name=loop loop=$vars}
    Name: {$vars[loop].firstname} {$vars[loop].surname}
{/section}

Andere Tipps

Auch wenn dieser Beitrag sehr alt ist, wird die gegebene answere accpeted aber keine answere für die Frage. Es ist nur eine andere oppertunity Hauptproblem zu behandeln.

Die Frage ist, wie dynamische Variablen verwenden ...

für die gegebene Probe, sollte es so etwas wie

sein

PHP

$content_name = 'body';
$title        = 'hello ';
$body         = 'world';
$smarty->assign('content_name',$content_name);
$smarty->assign($content_name.'_title',$title);
$smarty->assign($content_name.'_body',$body);

Smarty

{$content_name}          //body
{${$content_name}_title} //hello
{${$content_name}_body}  //world

{${$content_name}_title}{${$content_name}_body} my {$content_name} is awesome
//hello world my body is awesome

Dies ist die dynamische Art und Weise, es zu benutzen. Auch wenn es hier nicht der beste Weg, in diesem Fall:)

Wenn Sie Art von Objekten oder mehrdimensionales Array haben ... und Sie wie zu Iterierte sie, haben Sie über die ganze Kette zu kümmern und nicht nur die Zahl ...

Zum Beispiel:

PHP

$arr = [
    "attr1" => "hello ",
    "attr2" => "world ",
    "attr3" => "my body is awesome"
];
$smarty->assign('foobar', $arr);

Smarty

{for $i=1 to 3}
    {$foobar.{"attr$i"}}   //works (whole name must be string var mix)
    //{$foobar.attr{"$i"}} //fails
    //{$foobar.attr{$i}}   //fails
{/for}

Aber mit {$foobar{$i}} auf einem einfachen Array funktionieren würde.

Für alle, die es brauchen, genießen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top