Php templates

  • Themenstarter Themenstarter Brigitte
  • Beginndatum Beginndatum
B

Brigitte

Hallo zusammen,

ich bin neu hier und ein php-newbie. Ich möchte gerne eine größere Site auf php-Templates aufbauen. Mir ist klar, wie es mit footer und header funktioniert. Aber wie mach ich es, wenn ich links und/oder rechts z.b. eine Navi einbauen will?

Ich würde mich über Tipps freuen.

Gruß BM
 
schreib am besten erstmal alles in eine html datei und wenn du soweit fertig bist, machst du des einfach in einzelne dateien..

damit wenn du des header template veränderst, sich alle dateien verändern die des benutzen quasi.

also erst datei schreiben dann in einzelne zerlegen ich mach die immer in
header.php
menu.php
<.php datei die grad gebraucht wird (zB. news.php)>
footer.php

dann wird alles included also header.php, menu.php, footer.php .. kannst aber auch anders machen ;) war nur so ne anmerkung wie ichs mach und wie ichs gut finde.

greeTz
 
Hi,

ja, das versteh ich auch, wie du das meinst. Nur - ich bin wahrscheinlich zu sehr auf Frames noch fixiert - die Navigation, also z.b. menu.php und die z.b. news.php, erscheinen die dann nebeneinander? Oder mach ich beide mit jeweils derselben navigation (z.b. mit TAbellen oder so) in eine Datei?

Sorry, bin grad ziemlich neben der Spur vermutlich Frame-geschädigt!

Gruß BM
 
Original geschrieben von Brigitte
nebeneinander? Oder mach ich beide mit jeweils derselben navigation (z.b. mit TAbellen oder so) in eine Datei?

ich würd erstma die seite komplett in html (in einer datei) mit tabellen bauen. z.b. oben den header (mit logo oder so was drin), links das menü und rechts dann der hauptteil mit dem inhalt.

so, danach kannst du dann die eine datei in mehrere zerlegen, sprich in die tabellenzelle wo der header drin war, wird dann z.b. die header.php includet (in der die ganzen daten drin stehen, die vorher in der tabelle drin waren), links dann dass menue.php (auch hier das gleiche wie bei der header.php, halt nur mit dem kompletten menü aus der tabellenzelle) und in der mitte steht dann halt der inhalt.

wenn du dann später mal was an der menue.php oder header.php ändern willst, brauchst du halt nur die beiden datein zu ändern; die änderungen sind dann allerdings auf allen seiten, bei denen du die php datein includet hast, sichtbar.

um mit tabellen fit zu werden, schau mal bei http://selfhtml.teamone.de/ nach.
 
Ich mache sowas immer mit XML. Wenn du Zugriff auf das System hast, einfach die Extension Sablotron ins PHP kompilieren.

Falls das jetzt für euch Kauderwelsch ist, dann würde ich wie folgt vorgehen:

  1. Design machen :p
  2. Einzelne html Dateien anlegen (für content, Navi, Header, footer)
    Also gerade mal die Navigation in eine Datei ohne body, head usw.
  3. Und dann das ganze Verbinden.

Wobei ich sagen muss das das nicht unbedingt richtige Template programmierung ist. Ich poste hier mal schnell ein Beispiel:

PHP:
$files = array("mysql.class.inc", "template.inc");

while (list(, $val) = each($files)) {
	include("inc/$val");
}

$self = basename($PHP_SELF);
error_reporting(5);

$t = new Template(".", "keep");
$db = new mysql_db;

$t->set_file(array(
	"list"		=> "news_list.html",
	"detail"	=> "news_detail.html",
	"poster"	=> "news_poster.html",
	"empty"		=> "news_empty.html"));
	
$t->set_var(array(
	"SELF"		=> $self,
	"PAGETITLE"	=> "UTs News"));
	
function show_list() {
	global $t, $db;
	
	$sql_p = "SELECT * FROM aktion";
	$db->db_query($sql_p);
	
	if ($db->db_num_rows()) {
	
		$rows_p = $db->db_fetch_array();
		
		$t->set_var(array(
			"HEADLINE"		=> $rows_p[headline],
			"BESCHREIBUNG"	=> $rows_p[beschreibung],
			"BILD"			=> $rows_p[bild]));
			
		$t->parse("OUT", "poster");	
	}
	else {
	
		$sql = "SELECT * FROM news ORDER BY timestamp DESC LIMIT 50";
		$db->db_query($sql);
		
		$t->set_block("list", "row", "rows");
		
		
		if ($db->db_num_rows()) {
			
			while ($rows = $db->db_fetch_array()) {
				$t->set_var(array(
					"NEWSID"	=> $rows[id],
					"HEADLINE"	=> $rows[headline],
					"SUBLINE"	=> $rows[subline],
					"DATUM"		=> date("d.m.Y", $rows[timestamp])));
					
				$t->parse("rows", "row", true);	
			}
			$t->parse("OUT", "list");
		}
		else {
			$t->parse("OUT", "empty");
		}
	}
	
	$t->p("OUT");
}

function show_detail() {
	global $t, $db, $newsid;
	
	$sql = "SELECT * FROM news WHERE id=$newsid";
	$db->db_query($sql);
	$rows = $db->db_fetch_array();
	
	if (!empty($rows[bild_kl])) {
		$t->set_var(array(
			"HEADLINE"	=> $rows[headline],
			"SUBLINE"	=> $rows[subline],
			"AUTOR"		=> $rows[autor],
			"EMAIL"		=> $rows[email],
			"BILD"		=> "<a href=\"newspics/$rows[bild_gr]\" target=\"_blank\">
						    <img src=\"newspics/$rows[bild_kl]\" border=\"0\" align=\"right\"></a>",
			"NEWSTEXT"	=> $rows[newstext],
			"DATUM"		=> date("d.m.Y", $rows[timestamp])));
	}
	else {
		$t->set_var(array(
			"HEADLINE"	=> $rows[headline],
			"SUBLINE"	=> $rows[subline],
			"AUTOR"		=> $rows[autor],
			"EMAIL"		=> $rows[email],
			"BILD"		=> "",
			"NEWSTEXT"	=> $rows[newstext],
			"DATUM"		=> date("d.m.Y", $rows[timestamp])));	
	}

	$t->parse("OUT", "detail");
	$t->p("OUT");
}

if (isset($newsid)) {
	show_detail ();
}
else {
	show_list();
}

Die html Dateien sehen dann so aus:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>

<head>
<title>Wohnstudio Farr</title>
<link rel="STYLESHEET" type="text/css" href="style.css">
</head>

<body bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#0000FF" alink="#0000FF">

<img src="images/empty.gif" width="1" height="20" alt="" border="0"><br>

<table border="0" cellpadding="0" cellspacing="0" width="600">
<tr>
<td width="30">&nbsp;</td>
<td>

<table border="0" width="100%">
<tr>
<td><img src="images/end.gif" width="47" height="13" alt="" border="0"> <font face="Arial,Helvetica,sans-serif" size="4"><b>{HEADLINE}</b></font> <img src="images/end.gif" width="47" height="13" alt="" border="0"></td>
</tr>
<tr>
<td><font face="Arial, Helvetica, sans-serif" size="2" color="#000000">
vom {DATUM}</font></td>
</tr>
<tr>
<td height="20">&nbsp;</td>
</tr>
<tr>
<td>

<table width="80%" border="0">
<tr>
<td valign="top">{BILD}
<font face="Arial, Helvetica, sans-serif" size="2" color="#000000">

<p> <font size="3"><b>{SUBLINE}</b></font>
<p> {NEWSTEXT}
</font></td>
</tr>
<tr>
<td><hr></td>
</tr>
<tr>
<td><font face="Arial, Helvetica, sans-serif" size="2" color="#000000">
<a href="top_news.php">Zur&uuml;ck</a></font></td>
</tr>
</table>

</td>
</tr>
</table>

</td>
</tr>
</table>

<p>&nbsp;</p>

</body>
</html>
 
Hi zusammen!

Ich möchte mich ganz herzlich bedanken für die Anworten auf meine Frage nach dem Php-Template! Jetzt seh ich echt klarer!:-) :-)

Gruß Brigitte
 
Eines versteh ich aber an der Template-Geschichte nicht (und deshalb bin ich auch bei den Frames geblieben... :)): wie mache ich denn dann das mit den TARGETs??
Meine ganze Seite ist vollkommen auf Frames aufgebaut, jeweils mit verschiedenen Tagets, also daß z.B. die Links von den Außenrändern immer im mittleren Frame aufgemacht werden.
Und wenn im mittleren Frame ein Link angeklickt wird, wird er ebenfalls im mittleren Frame geöffntet.

Nun habe ich die Startseite mit Templates gemacht...aber was ist denn, wenn ich dann den Link im mittleren Frame anklicke?? Dann wird doch die Seite im ganzen Bildschirm geöffnet...

Oder?

Feldhofe
 
Hallo!

genau das war auch mein Problem (zumindest im Kopf), wenn dus dann ausprobierst, ist es kein Problem mehr, da die php-files neu geladen werden, also das menu auf zum beispiel der linken seite mit dem neuen Inhalt in der Mitte neu geladen werden. So siehts dann aus wie in einem frame!

Frage an die Experten: Ist doch richtig, oder?

Gruß Brigitte

Gleich noch eine Frage hinten nach: Wenn ich nun die html-Datei aufgeteilt habe, hab ich ja in der headerdatei meine .css eingebunden. Diese stylesheets werden aber in der menu und der footerdatei nicht ausgeführt, klar, die Angabe fehlt ja darin. Wie kann ich die css in den anderen Dateien mit einbinden? Oder muss ich dort jeweils die styles extra definieren?

Gruß an die lieben helferlein...;)

Brigitte
 
auf frames würd ich an deiner stelle ganz verzichten. bau einfach alles mit tabellen. dann muss aber auch alles was du auf der seite hast, auf jeder seite eingebaut werden. deswegen solltest du ja auch den include befehl benutzen.

beispielsweise hast du ne seite, links in der tabelle ist ein menü, rechts in der tabelle der inhalt. das menü wird ja lediglich über den include befehl in jede seite reingeladen (also ohne irgendein target). wenn du dann später mal was an der menü datei ändern solltest, wird die änderung ja für alle seiten gelten, bei der die menü datei reingeladen wird.

also alles ohne frames ;)
 
Zurück