Formulare und Listen aus PHP-Programm auslagern
Kalle_B
- programmiertechnik
Hallöle,
in einem PHP- Projekt habe ich Formulare und Listen, die ich zwecks Layout-Test, Übersichtlichkeit, Mehrsprachigkeit und leichter Änderung gerne als eigene Dateien auslagern möchte. Etwa so:
adresse_de.php:
---------------
<form ...>
<p>Firmenname: <input ...></p>
<p>Stadt: <input ...></p>
...
</form>
adresse_en.php:
---------------
<form ...>
<p>Company: <input ...></p>
<p>Town: <input ...></p>
...
</form>
include( "adresse_".$sprache.".php" );
Problem:
Bei Änderungen muss ich ja den bisherigen Wert des Feldes als "value" eintragen. Ich möchte aber nicht Formular und PHP- Code vermischen, also SO NICHT:
value="<? echo $row['fname']; ?>"
Hat jemand Erfahrung, wie man mit Platzhaltern in der einzufügenden Datei arbeiten kann?
Also irgendwie SO:
<input ... value="**Firmenname">
und dann, wieder im PHP- Teil: Ersetze **Firmenname durch $row['fname']
Okay, ich könnte die einzufügende Datei vielleicht Zeile für Zeile abarbeiten und Platzhalter ersetzen. Aber geht es auch eleganter?
Eine Idee wäre, das Ersetzen der Platzhalter mit JavaScript zu machen, das möchte ich aber vermeiden.
Lieben Gruß, Kalle aus Birkenau
Hallo,
<input ... value="**Firmenname">
und dann, wieder im PHP- Teil: Ersetze **Firmenname durch $row['fname']
Okay, ich könnte die einzufügende Datei vielleicht Zeile für Zeile abarbeiten und Platzhalter ersetzen. Aber geht es auch eleganter?
das ist elegant. Beispiel:
$a=array(
'%{Datensatz1}',
'%{Datensatz2}',
'%{Datensatz3}',
'%{Datensatz4}',
'%{Datensatz5}',
'%{Datensatz6}',
'%{Datensatz7}'
);
$b=hole_daten_aus_db();
$b=mach_array_draus($b);
echo str_replace($a,$b,file_get_contents('xyz.tpl'));
xyz.tpl:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>%{Datensatz1}</title>
<link href="%{Datensatz2}" type="text/css" rel="StyleSheet">
</head>
<body>
<h1>%{Datensatz1}</h1>
<p>%{Datensatz3}</p>
<!-- usw. -->
</body>
</html>
Gruß aus Berlin!
eddi
Hallo, eddi,
danke für deinen Vorschlag. Ich habe nachgegrübelt, aber ihn leider nicht ganz verstanden. Was meinst du mit
$a=array(
'%{Datensatz1}',
'%{Datensatz2}',
das %-Zeichen sagt mir nichts.
$b=hole_daten_aus_db();
$b=mach_array_draus($b);
Joop, habe ich gemacht, funzt auch ganz vernünftig.
Lieben Gruß aus Birkenau, Kalle
Hallo Kalle_B.
$a=array(
'%{Datensatz1}',
'%{Datensatz2}',das %-Zeichen sagt mir nichts.
Muss es auch nicht, da dies nur eine Beispiel-Zeichenkette war.
Du könntest ebenso gut schreiben:
$a = array(
'Þ@ł€¶ŧ-1',
'Þ@ł€¶ŧ-2',
'Þ@ł€¶ŧ-3',
);
Wobei sowohl hier als auch in XaraX' Code Redundanz auftritt.
Besser ist deshalb meiner Meinung nach Folgendes:
$str_file = file_get_contents('xyz.tpl');
for ($int_i = 0; $int_i < anzahl_von_wasauchimmer(); $int_i++) {
$str_file = str_replace('%{Datensatz'.$int_i.'}', $b, $str_file);
}
echo $str_file
Einen schönen Dienstag noch.
Gruß, Ashura
Hallo Ashura,
> > > > $a=array(
> > > > '%{Datensatz1}',
> > > > '%{Datensatz2}',
> > > > '%{Datensatz3}',
> > > > '%{Datensatz4}',
> > > > '%{Datensatz5}',
> > > > '%{Datensatz6}',
> > > > '%{Datensatz7}'
> > > > );
> > > > $b=hole_daten_aus_db();
> > > > $b=mach_array_draus($b);
>
> > > > echo str_replace($a,$b,file_get_contents('xyz.tpl'));
Wobei sowohl hier als auch in XaraX' Code Redundanz auftritt.
Besser ist deshalb meiner Meinung nach Folgendes:
$str_file = file_get_contents('xyz.tpl');
for ($int_i = 0; $int_i < anzahl_von_wasauchimmer(); $int_i++) {
$str_file = str_replace('%{Datensatz'.$int_i.'}', $b, $str_file);
}echo $str_file
Redundanz? - in dem Fall nur Deine for-Konstruktion die zu allem Überfluß (ach jetzt versehe ich Dich mit Redundanz ;) auch noch Meldungen in Form eines Notice pro Durchlauf auswirft.
Gruß aus Berlin!
eddi
--
Wer Rechtschreibfehler findet, darf sie behalten.
Hallo,
danke für deinen Vorschlag. Ich habe nachgegrübelt, aber ihn leider nicht ganz verstanden. Was meinst du mit
$a=array(
'%{Datensatz1}',
'%{Datensatz2}',das %-Zeichen sagt mir nichts.
das ist nur ein Ersetzungsstring, den Du gestalten kannst, wie Dir beliebt. Es ist dabei wichtig sich einen String auszusuchen, der nicht zufällig auch im Text vorkommen kann und nach Möglichkeit auch für das menschliche Auge schnell und einfach zu erfassen ist. Da habe ich mir irgendwann mal die Syntax der Variablenverarbeitung des Apachen adaptiert. :)
Dem %-Zeichen kommen also hier keinerlei besondere Bedeutungen zu.
Gruß aus Berlin!
eddi
Hello,
Hat jemand Erfahrung, wie man mit Platzhaltern in der einzufügenden Datei arbeiten kann?
Das nennt sich dann Template-Technik
Es bieten sich da Templates an, die auch mit HTML anzigbar sind, aber eben ohne Daten.
z.B.:
<BODY>
<div id="div1">
<!--{ M-mainmenu ( $pageno )}-->
</div>
<div id="div2">
<!--{ M-secondMenu (1,2,3,impressum) }-->
</div>
<div id="div5"><img src="./.images/logo_08.gif" alt="logo" width="300" style="margin-left:20px;">
<h1 class="logo1">Kunden-Marke</h1><h1 class="logo2">Kunden-Slogan</h1></div>
</BODY>
Und mittels "Temolate-Engine" kann man dann die Platzhalter austauschen lassen.
Template laden,
Platzhalter suchen
gefundene Platzhalter austauschen.
Seite ausgeben.
Das geht auch rekursiv, damit Listen und Unterformulare möglich sind.
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Hello,
Hat jemand Erfahrung, wie man mit Platzhaltern in der einzufügenden Datei arbeiten kann?
Das nennt sich dann Template-Technik
Es bieten sich da Templates an, die auch mit HTML anzigbar sind, aber eben ohne Daten.
Ja, ich glaube, so eine Lösung gefunden zu haben. Ich mache eine *.htm- Datei für <form> und/oder Listen, die folgende Segmente beinhaltet:
[kopf]...[/kopf]
[position]...[/position]
[fuss]...[/fuss]
Wobei die Positionen so lange wiederholt werden, bis eine Tabelle abgearbeitet ist. Muster zur konstruktiven Kritik hier:
http://www.aktivferien.de/tm3/v3/tabelle_in_fieldset.htm
Kann man ein SQL- Ergebnis eigentlich mit EINEM Kommando in eine Tabelle übernehmen? Dies hier scheint mir nicht sehr elegant:
$result = mysql_query( $q ); zeigSqlFehler( $act, $q );
$tab_slt = array();
for ( $i=0; $i<@mysql_num_rows( $result ); $i++ ) {
$tab_slt[$i] = mysql_fetch_array($result);
}
Lieben Gruß aus Birkenau, Kalle