Kalle_B: Formulare und Listen aus PHP-Programm auslagern

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

  1. 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

    --
    Wer Rechtschreibfehler findet, darf sie behalten.
    1. 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

      1. 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

        --
        sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
        mathbr:del.icio.us/ mathbr:w00t/
        1. 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.
          
      2. 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

        --
        Wer Rechtschreibfehler findet, darf sie behalten.
  2. 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

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau

    1. 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