Templates mit php - Seite 2

Seite 2 von 3 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/templates_mit_php_31777/page_2 - zur Vollversion wechseln!


Philipp schrieb am 17.04.2002 um 19:55

Zitat
Hmm, das check ich net ganz, was macht dein Code?
Es ist eine andere Möglichkeit echo einzusetzen:

echo <<<irgendeinekennung

HTML
..
..

irgendeinekennung;

Zwischen echo <<<kennung und kennung; kann ganz normales HTML innerhalb des Scripts verwendet werden.


jives schrieb am 17.04.2002 um 20:00

Der Nachteil dabei ist, dass ich die Variablen ersetzen muss, dh. ich kann keine allgemeingültige Funktion schreiben :(

Verstehts mich nicht falsch, ich bin froh, dass ihr mir helft, aber ich hab da eine fixe Idee und schaffs nicht, sie umzusetzten.

Code: PHP
<?php
function output($template) {
 $file = fopen("./temp/$template", "r");

  while (!feof($file)) {
   $temp = fgetc($file);
   echo $temp;
  }

 fclose($file);
}

output("test.htm");
echo "<br>Name: $user";
?>
Das geht leider auch nicht :(
http://home.pages.at/kazaa/test/


Tex schrieb am 17.04.2002 um 20:03

sorry, ich versteh nicht so wirklich, wo dein problem liegt :confused:

edit: ganz ohne php, wirst du nie ein php-variable anzeigen lassen können.

für diesen fall wäre wohl
<? echo $user; ?> das einfachste.


jives schrieb am 17.04.2002 um 20:12

Ich arbeit an einem größeren Projekt, bei dem ich einfach einen Temp-Ordner machen will, in dem sich solche Dateien befinden, wie oben. Die werden dann durch das eigentliche Script aufgerufen, dass sich in eigenen Dateien befindet. Das genze soll eine Funktion sein, die ich in eine function.inc.php auslagere und in den Hauptcode einbinde.

Der Vorteil ist, dass sich die Templates einfach mit einem WYSIWYG-Editor wie FrontPage bearbeiten lassen. Kein php, der da irgendwo dazwischen herumkugelt und "kaputt" gemacht werden könnte. Das soll Leuten, die sich nicht so gut auskennen, die Installation und Konfiguartion erleichtern.


orpheus schrieb am 17.04.2002 um 20:13

so... hab zwar keine ahnung "WAS" du genau brauchst.. hab hier mal was für dich zusammengebastelt :D


template.php

Code:
<?php
 if ($HTTP_POST_VARS["name"]!=""){
  $name = $HTTP_POST_VARS["name"];
  $passwort = $HTTP_POST_VARS["passwort"];
  $sql = "SELECT * FROM user WHERE ";
  $sql .= "name LIKE '$name' AND passwort='$passwort'";
  $conn = mysql_connect("localhost", "benutzer", "passwort");  //Daten ggf. anpassen!
  mysql_select_db("www", $conn);  //Datenbankname ggf. anpassen
  $ergebnis = mysql_query($sql, $conn);
  if ($ergebnis){
   if ($zeile = mysql_fetch_array($ergebnis)){
    $farbe = $zeile["farbe"];
    session_start();
    session_register("name");
    session_register("farbe");
    $eingeloggt = "ja";
   }
  }
  mysql_close();
}
?>
<html>
<head><title>login</title></head>
<body bgcolor="white">
<?php
 if ($eingeloggt == "ja") :
?>
 Sie sind eingeloggt!<br>
 <a href="template.php">Weiter</a>
<?php
 else :
?>
 <form method="post">
 Name <input type="text" name="name"><br>
 Passwort <input type="password" name="passwort"><br>
 <input type="submit" value="Login!">
 </form>
<?php
 endif;
?>
</body>
</html>

login.php
Code:
<?php
 if ($HTTP_POST_VARS["name"]!=""){
  $name = $HTTP_POST_VARS["name"];
  $passwort = $HTTP_POST_VARS["passwort"];
  $sql = "SELECT * FROM user WHERE ";
  $sql .= "name LIKE '$name' AND passwort='$passwort'";
  $conn = mysql_connect("localhost", "benutzer", "passwort");  //Daten ggf. anpassen!
  mysql_select_db("www", $conn);  //Datenbankname ggf. anpassen
  $ergebnis = mysql_query($sql, $conn);
  if ($ergebnis){
   if ($zeile = mysql_fetch_array($ergebnis)){
    $farbe = $zeile["farbe"];
    session_start();
    session_register("name");
    session_register("farbe");
    $eingeloggt = "ja";
   }
  }
  mysql_close();
}
?>
<html>
<head><title>login</title></head>
<body bgcolor="white">
<?php
 if ($eingeloggt == "ja") :
?>
 Sie sind eingeloggt!<br>
 <a href="template.php">Weiter</a>
<?php
 else :
?>
 <form method="post">
 Name <input type="text" name="name"><br>
 Passwort <input type="password" name="passwort"><br>
 <input type="submit" value="Login!">
 </form>
<?php
 endif;
?>
</body>
</html>

register.php
Code:
<?php
 if ($HTTP_POST_VARS["name"]!=""){
  $name = $HTTP_POST_VARS["name"];
  $passwort = $HTTP_POST_VARS["passwort"];
  $farbe = $HTTP_POST_VARS["farbe"];
  $sql = "INSERT INTO user (name, passwort, farbe) VALUES(";
  $sql .= "'$name', '$passwort', '$farbe')";
  $conn = mysql_connect("localhost", "root", "");
  mysql_select_db("www", $conn);
  mysql_query($sql, $conn);
  mysql_close();
  $meldung = "Registrierung erfolgreich";
 }
?>
<html>
<head><title>registrierung</title></head>
<body bgcolor="white">
<h2><?=$meldung?></h2>
<form method="post">
Name: <input type="text" name="name"><br>
Passwort: <input type="password" name="passwort"><br>
Farbe: <select name="farbe">
 <option value="white">Weiß</option>
 <option value="yellow">Gelb</option>
 <option value="red">Rot</option>
</select>
<input type="submit" value="registrieren">
</form>
</body>
</html>

und hier noch der sql
Code:
CREATE TABLE user (
 id int NOT NULL AUTO_INCREMENT,
 name varchar(20),
 passwort varchar(20),
 farbe varchar(20),
 PRIMARY KEY (id)
)

in der hoffnung dir geholfen zu haben
mfg


Tex schrieb am 17.04.2002 um 20:13

und schon sind wir wieder bei integrated templates :D

glaub mir, da ist dann der php-code vom design komplett (!) getrennt.


jives schrieb am 17.04.2002 um 20:17

Ok, thx @all. Ich werd mal die Vorschläge durchgehen :)


bernhard schrieb am 17.04.2002 um 22:32

Irgendein Platzhalter _muß_ wohl im template für eine Variable vergesehen werden, der später bei der Abarbeitung durch deren Wert ersetzt wird (sonst wäre es per Definition kein template).

Wenn Dir <? print($user); ?> nicht zusagt (offensichtlich wegen etwaiger WYSIWIG-Editoren-Inkompatibilitäten, wenn ich Dich richtig verstanden habe), kannst Du Dir ja einen kleinen parser (z.B. mit Hilfe von preg_replace) schreiben, um im template jeden Ausdruck der Form <$user>, <var name="user"> etc. durch <? print($user); ?> zu ersetzen.


jives schrieb am 17.04.2002 um 22:38

Genau das ist mein Problem. Ich suche nach einer Möglichkeit, mit der ich ein Template ausgeben kann, ohne extra die Platzhalter ersetzen zu müssen. Ich möchte nur die Variablen in das Template einbinden, und dann ihren Inhalt ausgeben.
Ich bin schon alles mögliche durchgegangen, um das zu erreichen, auch solche "sinnvollen" Funktionen wie die output von vorhin :)


bernhard schrieb am 17.04.2002 um 23:40

Und jetzt willst Du den code natürlich am liebsten frei Haus... Hier ein Codefragment, ein Gedankenanstoß, der nur eine Variable pro Zeile verarbeiten kann und bei dem noch jegliche Fehlerbehandlung fehlt.

foobar.php:

Code:
<?
  function output($template) {
    $file=fopen($template,"r");
    while(!feof($file)) {
      $line=fgets($file,4096);
      if(preg_match("/<\\$([^>]+)>/",$line,$regs)) {
        global ${$regs[1]};
        print(preg_replace("/<\\\${$regs[1]}>/",${$regs[1]},$line));
      } else {
        print($line);
      }
    }
    fclose($file);
  }

  $user="Du";
  output("template.html");
?>

template.html:
Code:
<html>
  <body>
    Hallo <$user>!
  </body>
</html>

Mit "<$user>" statt "$user" solltest Du leben können. Erstens unterstreicht es den HTML-Charakter des templates und zweitens trennt es den Variablennamen von umgebendem Text.

P.S.: Auch wenn obriger code bei weitem noch nicht perfekt ist, sollte er dennoch zumindest "Hallo Du!" ausgeben.


jives schrieb am 18.04.2002 um 18:09

Wieso frei Haus? Ich arbeite schon 2 Wochen an dem Problem, und finde keine Lösung - also einfach so komm ich nicht her und will ein fertiges Script. Ich versteh dein Statement nicht, immerhin hab ich doch nicht geschrieben, Burschen, ich hab ein Problem, schreibts ma ein Script.

EDIT: Sorry, ich hab deinen Tipp mit dem "preg_replace" überlesen (??). In die Richtung bin ich in der Zwischenzeit auch schon gegangen, nur hab ich (noch ;)) keinen funktionierenden Code.

EDIT2: Überlesen wohl deshalb, weil du den Post noch editiert hast :)


jives schrieb am 19.04.2002 um 17:22

Ok, ich bin fast fertig, danke für die Idee bernhard. Mit denem Code komm ich weiter.
Eine Frage hab ich noch: Warum hast du "/<\\$..." und nicht "/<\$..." verwendet? \\ Sucht doch nach \ :confused:
Naja, reguläre Ausdrücke sind ned wirklich meine Stärke ;)
Deshalb ging der von mir entwickelte Code auch net... naja und er hatte noch eine Macke :rolleyes: Bin aber durch dich draufgekommen.


bernhard schrieb am 19.04.2002 um 17:42

Siehe erste user contribution hier:
http://www.php.net/manual/en/function.preg-match.php


jives schrieb am 19.04.2002 um 17:47

Argh... und ich bin da eine Nacht dran gesessen um herauszufinden, was da net stimmt :rolleyes:
BIG THX, jetzt komm ich eindlich weiter! :fresserettich:


bernhard schrieb am 19.04.2002 um 23:31

Manchmal sieht man den Wald vor lauter Bäumen nicht mehr: Wenn Du ein zusätzliches "=" und zwei "?" noch durchgehen lassen kannst, empfehle ich Dir für Deine Zwecke die Kurznotation von echo:

<?=$user?> ist funktional ident <? echo $user; ?>.

index.php:

Code:
<?
  $user="Du";
  include("template.php");
?>

template.php:
Code:
<html>
  <body>
    Hallo <?=$user?>!
  </body>
</html>

Siehe auch:
http://www.php.net/manual/en/function.echo.php

P.S.: Hier ist natürlich wieder relevant, daß template.php von PHP interpretiert wird und daher eine dementsprechende extension haben muß.




overclockers.at 2026.1
© all rights reserved by overclockers.at 2000-2026