"We are back" « oc.at

Templates mit php

jives 17.04.2002 - 16:55 6015 30
Posts

Philipp

Here to stay
Registered: Jul 2001
Location: Wien
Posts: 2004
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

And the science gets done
Avatar
Registered: Sep 2001
Location: Baden
Posts: 3548
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

got r00t?
Avatar
Registered: Aug 2000
Location: salzburg
Posts: 1844
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.
Bearbeitet von Tex am 17.04.2002, 20:04

jives

And the science gets done
Avatar
Registered: Sep 2001
Location: Baden
Posts: 3548
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

in a nutshell
Avatar
Registered: Mar 2002
Location: Klagenfurt
Posts: 532
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
Bearbeitet von orpheus am 17.04.2002, 20:15

Tex

got r00t?
Avatar
Registered: Aug 2000
Location: salzburg
Posts: 1844
und schon sind wir wieder bei integrated templates :D

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

jives

And the science gets done
Avatar
Registered: Sep 2001
Location: Baden
Posts: 3548
Ok, thx @all. Ich werd mal die Vorschläge durchgehen :)

bernhard

Little Overclocker
Registered: Feb 2001
Location: NÖ
Posts: 51
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.
Bearbeitet von bernhard am 17.04.2002, 22:40

jives

And the science gets done
Avatar
Registered: Sep 2001
Location: Baden
Posts: 3548
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

Little Overclocker
Registered: Feb 2001
Location: NÖ
Posts: 51
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.
Bearbeitet von bernhard am 17.04.2002, 23:53

jives

And the science gets done
Avatar
Registered: Sep 2001
Location: Baden
Posts: 3548
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 :)
Bearbeitet von jives am 18.04.2002, 18:22

jives

And the science gets done
Avatar
Registered: Sep 2001
Location: Baden
Posts: 3548
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.
Bearbeitet von jives am 19.04.2002, 17:24

bernhard

Little Overclocker
Registered: Feb 2001
Location: NÖ
Posts: 51
Siehe erste user contribution hier:
http://www.php.net/manual/en/function.preg-match.php

jives

And the science gets done
Avatar
Registered: Sep 2001
Location: Baden
Posts: 3548
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

Little Overclocker
Registered: Feb 2001
Location: NÖ
Posts: 51
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ß.
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz