![]() |
PHP {Variable}
Hi, wie kann ich es bewergstelligen wenn ich per
Delphi-Quellcode:
und die NAchricht so aus diesen Text besteht:
$nachricht=file_get_contents("nachricht.txt");
Email: {email} Homepage: {homepage} Telefonnummer: {telefon} ------------------------------------ Nachricht: {nachricht} das was in diesen klammern steht als Variable erkannt wird? |
Re: PHP {Variable}
Du könntest mit str_replace danach suchen und entsprechend ersetzen.
|
Re: PHP {Variable}
Das habe ich mir auch gedacht, nur in was muss ich es ersetzen damit php es als Variable erkennt?
Das sind meine ersten php Versuche ;) Als ich in der txt direkt $variable geschrieben habe, wurde dies nicht als variable erkannt. |
Re: PHP {Variable}
Code:
In $email steht der Inhalt drin, der nachher in der Nachricht drin stehen soll.
$nachricht=file_get_contents("nachricht.txt");
$nachricht = str_replace('{email}', $email, $nachricht); |
Re: PHP {Variable}
du solltest eine Templateengine nehmen, das ist performater als ein Replace.
![]() Im aktuellen PHP User Magazin ist auch gerade ein neuerer Artikel über das Thema von mir. |
Re: PHP {Variable}
Nur wie mach ich dies variable, so das ich das nicht hundert mal hinter einander setzen muss?
|
Re: PHP {Variable}
Mit einer Schleife.
|
Re: PHP {Variable}
Zitat:
|
Re: PHP {Variable}
Ich habe das so gelöst:
Code:
Das ist eine Funktion zum parsen von templates. Im Template steht dann sowas wie {tpl|sitename} was dann ersetzt wird falls der Wert im Array auftaucht.
function parse_tpl ($templates, $values = array())
{ if (!is_array ($templates)) { $templates = explode (',', $templates); } foreach ($templates as $template) { @ $tpl_text .= "\r\n\r\n" . file_get_contents($_SESSION['tplpath'] . $template . '.tpl'); } $GLOBALS['tpl_resarr'] = $values; $tpl_text = preg_replace ('/\{tpl\|(.+?)\}/e', '$GLOBALS[\'tpl_resarr\'][\\1];', $tpl_text); unset ($GLOBALS['tpl_resarr']); echo $tpl_text; } parse_tpl ('header,menu', array ('sitename' => $sitename)); das mit dem tpl| hatte ich vorgesehen, um auch im template noch geschweifte Klammern verwenden zu können (falls da z.B. noch Javascript drin ist) Die ersetzung erfolgt durch preg_replace, was in meinen Augen besser geeignet ist als str_replace, da man den regulären Ausdruck relativ einfach erweitern/anpassen kann. |
Re: PHP {Variable}
Zitat:
das hab ich
Code:
foreach(???)
{ $nachricht=str_replace("{" ??? "}",${"???"},$nachricht); } |
Re: PHP {Variable}
Das sollte dann ungefähr so aussehen:
Code:
Vielleicht noch als Erklärung:
$string = file_get_contents("nachricht.txt");
foreach(array('email', 'homepage', 'telefon', 'nachricht') as $var) { $string = str_replace('{'.$var.'}', $$var, $string); } $$var greift auf die Variable zu, die in $var steht, also in diesem Fall jeweils auf $email, $homepage, $telefon und $nachricht. Letzteres ist der Grund, weshalb ich dein $nachricht in ein $string umbenannt habe, um eine Kollision gleicher Variablennamen zu vermeiden ;) |
Re: PHP {Variable}
Zitat:
Zwoetzen's Beispiel zeigt, wie man mit wenig Code dein Problem lösen kann. Falls du jedoch komplexere Templates willst(z.B. mit Logik), dann kannst du das folgendermassen lösen: ob_start(); include 'nachricht.txt.; $nachricht = ob_get_clean(); Damit dies funktioniert, musst du aber in nachricht.txt den normalen PHP-Syntax verwenden: <?php echo $email ?> etc, oder: <?php echo <<<PARSEEND Email: $email Homepage: $homepage Telefonnummer: $telefon ------------------------------------ Nachricht: $nachricht PARSEEND ?> Dies ist Heredoc-Syntax ![]() |
Re: PHP {Variable}
Zitat:
Da sehe ich doch schon viele GROßE Probleme auf dich zu kommen. Formulare ist das schwierigste was es im Web gibt! PHP ist gut um schnell etwas hin zu bekommen, nur leider muss das was dort gemacht wird auch Hand und Fuß haben. Mit PHP kann man schnell unsicher Programmieren. Besonders gefährlich ist es wenn man neu in PHP einsteigt, so kennt man die Standardangriffe nicht. Wenn du jetzt sagt, ach mein Server wird nicht angegriffen, dann irrst du. Jeder Server wird angegriffen! Da laufen Millionen von Bots durch Netz und suchen nach Lücken und Formularen. Das machen die natürlich vollautomatisch. Du solltest folgende Dinge beachten:
|
Re: PHP {Variable}
Zitat:
|
Re: PHP {Variable}
Zitat:
Klar gibt es nicht optimale Lösungen, das sind auch genau die, welche du erwähnst. Smarty in diesem Beispiel ist anders. Smarty nutzt auch Templates und baut diese irgendwie zusammen. Das macht jede Templateengine. Die Templates sind auch eigentlich nur für den Designer, damit dieser designen kann und sich nicht mit PHP Code rumärgern muss. Templateengines helfen dir auch, deinen Code sauber von der Anzeige zu trennen. Ergebnis ist besser wartbarer Code. Smarty erzeugt aus einen Template PHP Code, welcher zwischen gespeichert wird. Das hat viele Vorteile! Das Parsen des Templates entfällt (es sei den das Template hat sich geändert) und das in PHP vorliegende Template kann über APC oder ZendOptimizer weiter optimiert werden, da der "PHP-Compiler/Parser" nicht mehr aufgerufen werden muss. Dadurch ist Smarty flink. Du gewinnst durch Templateengines noch vieles mehr. Du kannst viel leichter deine Ausgaben steuern, formatieren und umwandeln. Natürlich kannst du auch einfach den Output Cachen, was zu weiteren Geschwindigkeitsvorteilen führt. "Abstraktionsaufwands" vs "Wartbarkeit und Wiederverwendbarkeit" Die meisten Systeme und Frameworks setzten inzwischen auf das MVC Pattern. Du kannst aber auch schmale Lösungen wählen. |
Re: PHP {Variable}
@generic
Die Argumente für eine Template-Engine sind mir durchaus klar ;) Ich arbeite in meinen Projekten mit einer eigenen Engine, inkl. UI Control Framework, DataBinding etc etc... MVC hat nichts mit dem Parsing von Template-Engines allgemein zu tun. Bytecode-Caching kann / sollte man immer verwenden. Darum geht's in diesem Thema ja auch gar nicht. Ich merkte nur an, dass man nicht allgemein sagen kann, dass eine Template-Engine, die in PHP geschrieben ist schneller ist als PHP Code ;) Das in einer Engine ggf. noch Mechanismen zum Vermeiden des Parsings enthalten sind ist sinnvoll und im Ergebnis ist die Anwendung tatsächlicher performanter. Das eigentliche Parsing aber eben halt nicht, dafür müsste die Engine wohl als PHP Extension ausgelegt sein. Was mich zu der Frage bringt: Gibt es eigentlich Template Engines, die als PHP Extension implementiert sind? Das wäre aber wohl eher ein Punkt für ein eigenes Thema. Die Frage des Thread-Erstellers ist auf jeden Fall durch die Möglichkeiten - Stringfunktionen - RegExp - Template-Engine beantwortet. |
Re: PHP {Variable}
Zitat:
Schneller geht es wenn die Platzhalter in PHP Syntax geschrieben werden. <?php echo $var?> oder die Kurzform <?=$var?>. Dann das Template einfach mit "include" einbinden und dabei ausgeben lassen. Das sollte immer noch einfacher und schnell sein, als per suchen und ersetzen. |
Re: PHP {Variable}
@generic
stimmt :oops: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:38 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz