PHP mit Smarty eingefügt?

meilon

Erfahrenes Mitglied
Hi,
Ich bastele gerade an einem Projekt. Weil ich mit absoluten Divs und so weiter nicht klar gekommen bin, habe ich mich für Smarty entschieden. Einfach aus der Seite ein Template gemacht und dort { } Tags machen, fertig, habe ich mir gedacht. Pustekuchen, geht nur mit reinem HTML code! Ich hole die Daten aus extra PHP-Files, damit die index.php übersichtlicher ist! Ich hole so die Daten rein (ich weiß, nicht gut, aber irgendwie muss es ja gehen!)
PHP:
<?php
//variabeln zuordnen
switch ($_GET['section']) { 
case 'news': 
	$smarty->assign('title','News!');
    $smarty->assign('text', implode(file("templates/news.php"))); 
	break;
//Und so weiter
}


$smarty->display('index.tpl');

?>
Wie kann ich nun die Daten reinholen, das die in den Dateien enthaltende PHP-Codes ausgeführt werden?

mfg
Klink
 
wie man mit smarty umgeht, weiß ich, bzw in diesem Fall nicht :-) Wie man etwas zuweißt ist mir klar. Nur wird jetzt {text} ein PHP-Code zugeordnet, der dann auf der Eigentlichen Seite nicht angezeigt wird.

Bsp:
in der test.php steht folgendes:
PHP:
<h1>Testausgabe</h1>
hier steht normaler HTML Text!<br>
<?php
$ausgabe="hier sollte durch PHP Text ausgegeben werden!";
echo $ausgabe;
?>
<br>
Hier gehts normal weiter
Hier wird die mit PHP generierte Ausgabe einfach nicht angezeigt. Im Quellcode steht es aber! Also <?php und er ganze quark. Wie lässt sich das fixen?
 
Ich habe noch etwas entdeckt: JavaScripts werden auch nicht mehr ausgeführt, obwohl sie im Code drin stehen, wie oben beschrieben. Bitte das ganze nicht als uppen betrachten, weil ich dachte zuerst, das smarty die PHP-Codes drumrumschickt (um den PHP-Parser), aber das ist wohl nicht der Fall.
 
Da ich schon seit einer Weile mit Smarty arbyte kann ich dir erstens ur die Mailinglsite wärmstens ans Herz legen. a) wirst du dort wahrscheinlich schneller Antworten bekommen, und auch von Leuten die fast ausschliesslcih mit Smarty ihren Otuput machen.

Eigentlich kannst du grösstenteils auf den embedded PHP-Müll im Tempalte verzichten. Wenn du aber nicht drumhin kommst nimm {php} ... {/php} und für den JS-Kram {literal}...{/literal}, womit Smarty aber alles ignoriert was zwischen den literal-Tags steht.
Aber ich glaube das steht auch in der Doku von Smarty.


für deine Newssache würde ich mir aber eher ein Zweites Templateobjekt anlegen, diesem irgendwelche werte zuweisen und, das gefetchte dann dem Haupttemplate, z.B. so:

PHP:
$tpl1 = new smarty();
$tpl2 = new smarty();

$tpl2->assign("news", "blasdasdasd");
...
$tpl1->assign_by_ref("text", $tpl2->fetch("template2.tpl"));
$tpl1->display("tempalte1.tpl");

Für mich sieht es aus als versucht du imemrnoch den Spagat zwsichen PHP-Code direkt im HTML und der Funktionsweise von Templates hinzubekommen.


@Kri...S:
$smarty->assign('platzhaltername', 'Wert');
Damit wäre dann {platzhaltername} Wert.

{$platzhaltername} hätte dann im Template zu stehen.
 
Zuletzt bearbeitet:
Mit JavaScript bekommt Smarty Probleme, da dort auch { und } vorkommen, was ihn durcheinander bringt. Das Problem umgehst du, in dem du den betreffenden Code in einen {literal}-Block schreibst:
PHP:
{literal}
<script>
<!--

function HalloWelt()
{
  document.write("Hallo Welt");
}

-->
</script>
{/literal}

Das andere problem dürfte zu lösen sein:
PHP:
$smarty.assign ("datei", "datei.php");

// Template:
Hier steht was<br />
{php}{include file=$datei}{/php}
... und hier steht dann wieder was.<br />
 
sry, war meine Fehler mitm JS, hab mich vertippt :-(
Das mit dem extra einbaun werd eich mir mal ansehen, obwohl ich das ja nciht mehr für so toll halte, weil ich dann ja wieder was extra brauche, das einfach reinschreiben fand ich schon toll.

@ Ben Ben: Ich weiß nicht ob du/ihr mich alle richtig verstanden habt:

in dem Template sind reine HTML und JS Sachen (JS mit {literal} ausführbar gemacht)
in dem Template gibt es eine Variable, {$text}
in die wird eine PHP-Datei geschrieben
-> $smarty->assign('text', implode(file("gaestebuch.php")));
in der gaestebuch.php sind eben PHP-Codes drin, die ausgeführt werden sollen.

Und das macht er nicht wirklich. Im Quellcode stehts, aber nicht im Browserfenster (<?php und so weiter, nicht die eigentliche Ausgabe).

Wie lasse ich die Sachen in gaestebuch.php ausführen und dann in {$text} reinschreiben, darum geht es mir.
 
Danke für den Tip, Ben Ben! Die Mailinglist ist echt schnell!
So geht es:
PHP:
function parse($file) {
	ob_start();
	include($file);
	$text = ob_get_contents();
	ob_end_clean();
	return $text;
}

$smarty->assign('text', parse("start.php"));
 
Zurück