Zur Navigation

Sinnvoll strukturiertes Seitensystem programmieren

1 Tom12

Hallo,
Ich habe angefangen ein Seiten Management System zu programmieren bei dem User die auch kein PHP können, trotzdem gute Seiten erstellen können.

Dazu hab ich die Haupt unterordner

/setup/
/backend/
/include/
/website/

hab
(wobei /setup/ und /backend/ erstmal irrelavant sind.)

Die User Daten sollen in /website/ reinkommen. Allerdings sollen ein Zusatzelement zwangsweise auf allen Seiten eingebunden sein.
Die "/inculde/website/head.inc.php". Damit die Seite halt mit dem Rest vom System verbunden ist, die "/website/header.inc.php" und die "/website/footer.inc.php" Allerdings soll in der mitte noch eine Datei eingebunden werden. Die "/incude/error.inc.php".

Das Problem ist nur, ich möchte diese Dateien nicht optisch einfügen.
Das wäre für den unerfahrenen Nutzter zu umständlich.

So sieht das gerüst bis jetzt aus:

<?php
	$show_only_user = false;
	$title = 'Test';
	$description = 'Das ist die Beschreibung';
	$keywords = 'test, schlagwort';
	include('../incude/website/head.inc.php');
	include('header.inc.php');
?>
<!-- Seiteninhalt (PHP-Teil) -->
<?php include('../include/website/error.inc.php'); ?>
<!-- Seiteninhalt (HTML-Teil) -->
<?php include("footer.inc.php") ?>

So soll es mal aussehen:

<?php
	$show_only_user = false;
	$title = 'Test';
	$description = 'Das ist die Beschreibung';
	$keywords = 'test, schlagwort';
?>
<!-- Seiteninhalt (PHP-Teil) -->

<!-- Seiteninhalt (HTML-Teil) -->

Die Seiten head.inc.php, header.inc.php, footer.inc.php und error.inc.php sollen trotzdem an den jeweiligen Stellen noch eingebunden werden.


Ich denke man muss hierbei mit einer extra Datei arbeiten und vill. irgendwas im URL über .htaccess umwandeln

allerdings hab ich keine Ahnung wie ich das umsetzten kann.
Ich hoffe mir kann jemand helfen :)

11.04.2018 16:55

2 Jörg Kruse

Du könntest in einer übergeordneten Datei die Ausgabepufferung aktivieren und dann die Datei unterhalb website/ inkludieren. Das darin enthaltene HTML wird mittels ob_get_contents() in eine Variable $content gespeichert, die Variablen $show_only_user etc. stehen auch in der übergeordneten Datei zur Verfügung. Nach dem Include der header.inc.php kannst du dann $content ausgeben.

<?php

ob_start();
include ('website/xyz.php');
$content = ob_get_contents();
ob_end_clean();

include('incude/website/head.inc.php');
include('website/header.inc.php');

// $content parsen und Error einfügen
echo $content;

include("website/footer.inc.php");

Für den Error bräuchte es noch einen Marker im HTML, den man z.B. mittels str_replace() oder preg_replace() durch eine Fehlermeldung ersetzen könnte

11.04.2018 19:52

1 Forenmitglied fand diesen Beitrag gut

3 Tom12

Ich glaube ich habe mich falsch ausgedrückt :d

bei mir ist das Standartverzeichnis /website/

Ich möchte das so haben:

-in Dem Verzeichnis sind diese Dateien vorhanden: /website/

header.inc.php
<header>
<ul>
<li>Beispiel</li>
</ul>
</header>

footer.inc.php
<footer>
<p>&copy;2018 Tom12</p>
</footer>
</body>
</html>



Außerdem wird noch aus dem Verzeichnis /include/website/ die Seite:

head.inc.php
<html>
<head>
<title><?php echo $title; ?></title>
</head>
<body>
ganz oben hinzugefügt

-------------------------------------------------------

- Der User schreibt z.b. im Verzeichnis /website/index.php
<?php
	$show_only_user = false;
	$title = 'Test';
	$description = 'Das ist die Beschreibung';
	$keywords = 'test, schlagwort';
?>
<h1>Überschrift</h1>
<p>blablabla bla<br>
blabla bla</p>

Diese Seite wird unter https://example.com/ aufgerufen.

Herraus soll kommen:

<html>
<head>
<title>Test</title>
</head>
<body>
<header>
<ul>
<li>Beispiel</li>
</ul>
</header>
<h1>Überschrift</h1>
<p>blablabla bla<br>
blabla bla</p>
<footer>
<p>&copy;2018 Tom12</p>
</footer>
</body>
</html>

also optisch soll in allen Dateien in /website/ (außer halt die header.inc.php und footer.inc.php)

Nur das (z.B.) drinstehen:

<?php
	$show_only_user = false;
	$title = 'Test';
	$description = 'Das ist die Beschreibung';
	$keywords = 'test, schlagwort';
?>
<h1>Überschrift</h1>
<p>blablabla bla<br>
blabla bla</p>

11.04.2018 20:59

4 Jörg Kruse

Der User schreibt z.b. im Verzeichnis /website/index.php

Ich habe die Datei in meinem Beispiel xyz.php genannt - aber der Name ist ja austauschbar.

Der HTML-Content darin darf ja erst nach dem Include von head.inc.php ausgegeben werden. Dann kann allerdings die Variable $title nicht mehr von head.inc.php ausgewertet werden.

Deswegen der Trick mit der Ausgabenpufferung. Nach dessen Einschaltung wird die website/index.php (in meinem Fall xyz.php) includiert. Der HTML-Inhalt wird nicht direkt ausgegeben, sondern in $content gespeichert. Als nächstes werden head.inc.php und header.inc.php includiert. Erstere kann $title aus index.php in das <title> Element einfügen. Danach erst wird das zwischengespeicherte $content ausgegeben. So hast du den Inhalt in korrekter Reihenfolge und die Variablen wie z.B. $title stehen rechtzeitig zur Verfügung.

Aufgerufen wird natürlich nicht die Datei /website/index.php, sondern die Datei, die diese und die anderen includiert.

Das hast du selbst im ersten Post ja bereits geschrieben:

Ich denke man muss hierbei mit einer extra Datei arbeiten und vill. irgendwas im URL über .htaccess umwandeln

Also z.B. so in der Art:

RewriteRule ^([^/^\.]+)$ extra.php?page=$1

Dann kann extra.php $_GET['page'] auswerten, und eine entsprechende Datei unter /website/ includen. Wobei hier sorgfältig gefiltert werden sollte, damit keine unbefugten Dateien includiert werden!

11.04.2018 21:58 | geändert: 11.04.2018 22:00

Beitrag schreiben (als Gast)

Die Antwort wird nach der Überprüfung durch einen Moderator freigeschaltet.





[BBCode-Hilfe]