[PHP] Die ersten Schritte sind garnicht so einfach

kleines bspl (ueberall anwendbar)

Code:
<doctype und so...>
<html>
<head>
<title>{{title}}</title>
<meta encoding und so...>
</head>

<body>

{{content}}

</body>
</html>


PHP:
// name der templatedatei
$template_file = 'index.html';

// templatedatei in string einlesen
$template_html = file_get_contents($template_file);

// template inhalte festlegen

$title = 'hallo!';

// array mit: ersetzen => durch_ersatz
$template_array = array(
 '{{title}}' => $title
);

// ersetzen
$template_output = strtr($template_html, $template_array);
 
Argh, ich Trottel.
Ich hab die ganze Zeit bei der Ausgabe des HTML-Dokuments auf das Eingangstemplate

PHP:
$document = file_get_contents('templates/document.htm');
und nicht auf die Ersetzungen

PHP:
$document_title .= strtr($document, $title_array);
verwiesen.

Dickes Sorry, das ich dich, im Gurnde wegen nichts, auf Trab gehalten hab.

Soooo, was mach ich nun mit der Navi?
Wir erinnern uns, der Button zur jeweils aufgerufenen Seite wird mit einer eigenen CSS-Klasse eingelesen. Ich schätze, ich sollte mich schon mal in "If" usw. einlesen.
 
if ist gut. foreach auch.
du kannst dein menu zB als array hinterlegen

PHP:
// array(uri => name);
$menu_array = array(
 'news.php' => 'News',
 'gb.php' => 'Gaestebuch'
);

das dann mit foreach() durchgehen und jeweils

Code:
<li><a href="{{uri}}">{{name}}</a></li>

mit entsprechenden ersetzungen erstellen. da kannst du natuerlich auch wieder templates anwenden (zB menu.html, menu_item.html). dann haettest du schonmal das menu. wie du den link markierst, findest du entweder selbst raus (stichworte: if und $_SERVER['PHP_SELF']) oder du fragst einfach wieder.

edit:

php.net/foreach

und orientier dich ein wenig an dem mysql bspl. du musst in schleife 1) die aktuellen werte im template ersetzen (template nicht in schleife einbinden, ein mal vorher in string laden) und 2) das an einen string ranhaengen ($neuer_string += string_dranzuhaengen)
 
Zuletzt bearbeitet:
Kann ich nicht einfach im Template anstelle der Buttons wieder Variablen setzen, die ich dann später in der php-datei entsprechend durch die Buttons ersetze wobei ich dann den aktiven Button entsprechend gesondert behandel.-

Bisher bin ich nömlich davon ausgegangen, das ich für jede Seite (News bsw. Indes, Über Uns, Sonstiges, Gästebuch usw.) eine eigene php-datei anlegen muß und da kann ich dann ja einfach wie beschrieben verfahren und die Buttonhervorhebung in der jeweiligen php-datei vornehmen.

Oder wirst du mir gleich erzählen, das Alles auch mit einer php-Datei hinkriegen kann und das sich dies sogar anbietet bzw. besser wäre?
 
ja klar, so war das auch gedacht.

Code:
index.tmplt
...
{{menu}}
...

Code:
menu.tmplt
<ul>
{{buttons}}
</ul>

Code:
buttons.tmplt
<li><a href="{{uri}}">{{name}}</a></li>

da musst du einfach nur drei ersetzungen vornehmen, die letzte in schlife entsprechend fuer das menu_array mit uri=>name. dann kannst du zwischendurch ueberprufen:

Code:
wenn(aktuelle_uri_im_array == uri_dieser_seite): markiere_link();

du musst nicht alles in verschiedene dateien schreiben - mit include() kannst du ja einbinden was du willst. du KANNST beliebig viele seiten erstellen und die dann nach bedarf zusammensetzen - auch nach bestimmten kriterien (bestimmte parameter in der uri).
 
So, ich hab jetzt mal die voon mir angedachte Lösung umgesetzt und sie funktioniert auch ... fast jedenfalls aber sieh/seht selbst KLICK

Hier der zu Grunde liegende Code

HTML:
	<div class="id" id="globalnavi">
		<ul>
			<li>{{bt_index}}</li>
			<li>{{bt_about}}</li>
			<li>{{bt_pott}}</li>
			<li>{{bt_sonstiges}}</li> 
			<li>{{bt_links}}</li>
			<li>{{bt_guest}}</li>
			<li>{{bt_forum}}</li>
		</ul>
	</div>
PHP:
$globalnavi = file_get_contents('templates/globalnavi.htm');

//------------------------------------------------------------------

$bt_index = '<a href="index.php" class="active">Neuichkeitn</a>';
$bt_about = '<a href="about.php">Übba unz</a>';
$bt_pott = '<a href="pott">Dä Pott</a>';
$bt_sonstiges = '<a href="sonstiges.php">Sonstiget</a>';
$bt_links = '<a href="links.php">Linkz!</a>';
$bt_guest = '<a href="guest.php">Schmier ma rein!</a>';
$bt_forum = '<a href="forum/main.php">Mässätsch Boahd</a>';

//------------------------------------------------------------------

$navi_array = array(
'{{bt_index}}' => $bt_index,
'{{bt_about}}' => $bt_about,
'{{bt_pott}}' => $bt_pott,
'{{bt_sonstiges}}' => $bt_sonstiges,
'{{bt_links}}' => $bt_links,
'{{bt_guest}}' => $bt_guest,
'{{bt_forum}}' => $bt_forum
);

//------------------------------------------------------------------

$navi_global .= strtr($globalnavi, $navi_array);

//------------------------------------------------------------------

echo $document_title, $header, $navi_global, $news_content, $footer;

Das ist nur der für die Navi relevante PHP-Code.
Wenn ich diese kleine Macke noch ausgemerzt kriege, dann habe ich ich doch quasi schon alles, was ich brauche oder nicht? Ich brauch ja dann für die weitere Rubriken auch noch weitere PHP-Dateien, in denen ich dann einfach die Hervorhebungsklasse an den entsprechenden Button anfüge.

Edit: Ok, hab den Fehler gefunden. Das Problem war das news_array, welches sich mit der navi_array überschnitten hat und da ich derzeit eine Wiederholung von zwei pro Seite für das news_array eingestellt habe wurde auch die Navi zwei Mal aufgerufen.

Ok, eine Kleinigkeit fehlt mir noch, ehe ich mich bis zum Guestbook durcharbeiten kann.
Ich brauch noch eine Blätterfunktion, die ich mir wie folgt vorstelle

<< | < | Seite 1 von 5 | > | >>

Ich hab da gestern ein Tutorial gesehen, das ich mir jetzt erst einmal reinziehen werde (hoffentlich lässt sich auf mein Modell übertragen). Über Anregungen würde ich mich dennoch freuen.
 
Zuletzt bearbeitet:
der aufbau ist recht simpel

Code:
anzahl_alle_eintraege;
anzahl_seiten = alle_eintraege / eintraege_pro_seite;
anzahl_seiten_gerundet = aufrunden(anzahl_seiten); // bei 0,4 seiten muss eine vorhanden sein etc.
von(0 bis anzahl_seiten_gerundet): link mit seitenzahl ausgeben;
 
Zuletzt bearbeitet:
Bin auch in Eile, hab mir jetzt nicht alle Beiträge durchgelesen, aber ein ; fehlt und in der ersten Zeile hast du ein "Escape Zeichen" vor dem Komma vergessen...


\, damit es auch als komma ausgegeben wird ;)
 
Zurück
Oben