Wie kann man mit PHP/JavaScript eine neue Website erstellen?

HoiZusammen  19.09.2022, 21:26

Eine komplett neue Webseite oder nur eine Unterseite ?

DerAffelul 
Fragesteller
 19.09.2022, 21:27

Eine Unterseite. Am besten eine die nur aus UserInput und einer Template Datei generiert wird :)

5 Antworten

Vom Fragesteller als hilfreich ausgezeichnet
Mein Gedanke wäre (...)

Dein Konzept geht in die richtige Richtung bzw. wäre so umsetzbar. Nur würde ich die Eingaben nicht fest in das Template einsetzen, sondern erst einmal nur separat (in einer Datenbank) abspeichern. So kannst du sie später flexibel und einfach wiederverwenden. Auch für unterschiedliche Templates.

Wie hoch der Abstraktionsgrad dabei sein soll, müsstest du selbst entscheiden. Du könntest alle Angaben z.B. modulweise speichern. Das heißt, du teilst deine Seiten in wiederverwendbare Module auf (ein Bild beispielsweise kann sowohl auf Seite A / in Template A, als auch einer Seite B / einem Template B verwendet werden). Für jedes Modul gibt es eine eigene Datenbanktabelle und dann bräuchtest du noch eine Datenbanktabelle, die den Seitentitel (bzw. die zugehörige URL) mit den jeweiligen Modulen assoziiert.

Ein andereres, groberes Modell wäre es, je Template eine Datenbanktabelle zu haben. Diese Informationen müssten wie zuvor mit dem Seitentitel / der zugehörigen URL assoziiert werden.

Auf Grundlage der Datenbank könntest du übrigens auch das Formular für die Eingaben recht dynamisch aufbauen. Via SQL Query:

DESCRIBE some_database_table

kannst du dir Informationen über die Spaltennamen und -typen einholen. Über das Ergebnis bräuchtest du nun nur iterieren und je Typ das richtige Eingabefeld herausrendern. Wenn der Feldtyp bspw. einem TINYINT entspricht, könnte das bedeuten, das du eine Checkbox benötigst oder bei einem INTEGER ein input-Element mit dem Typ number.

Das macht allerdings erst Sinn, wenn du mehr als nur ein Template hast.

Soweit der Programmteil, der die Daten speichert und die Schnittstelle (das Formular) zur Bearbeitung bietet.

Der andere notwendige Programmteil wäre die ganz normale Webanwendung, die bei jeder Anfrage erst einmal die URL prüft. Das heißt, alle Anfragen sollten an ein Dispatcher Skript gehen. Tania Rascia hat auf ihrem Blog ein sehr einfaches Beispiel eines solchen einfachen Routingsystems.

Du bräuchtest den Seitentitel aus der URL, um in der Datenbank nach dem Template sowie den Daten zu suchen, die herausgerendert werden sollen (bei Nichtfund wäre eine Fehlerseite als Fallback schön). Die Daten setzt du in das Template ein und schickst es zum Client zurück. Ich würde für diesen Zug ein einfaches Templatesystem empfehlen (Mustache, Smarty, Twig, o.ä.).

Das alles kann man sich also durchaus selbst zusammenbauen. Das Produkt wäre somit ein primitives CMS.

Für ein Hobbyprojekt mag das vielleicht spannend sein. Als weitaus weniger aufwendigen Lösungsansatz würde ich jedoch ein CMS empfehlen. Das muss nun nicht zwingend WordPress oder Drupal sein. Es gibt auch sehr leichtgewichtige, einfache CMS, wie z.B. Anchor, Bolt cms oder GetSimple CMS.

DerAffelul 
Fragesteller
 20.09.2022, 08:51

Erstmal Vielen Dank!

Ich habe alles verstanden und mir angeschaut bis auf den Teil, wo man Daten aus der Datenbank bekommt.

Nehmen wir mal folgendes Szenario als Beispiel: Ich habe eine Homepage mit 2 Buttons, die jeweils mit einem Link ausgestattet sind. Wenn man auf den einen draufdrückt kommt man auf eine Templatedatei, wo h1 mit Basketball ausgefüllt wird. Wenn man auf den anderen Button drückt kommt man auf dieselbe TemplateDatei , bloß steht als h1 Fußball. Bei beiden Fällen stehen dann noch ein paar Informationen im p Tag. Diese Daten werden dann aus der Datenbank durch das Template Tool Smarty in die Website geladen.

Wie aber bekommen ich die spezifischen Daten aus der Datenbank?

0
regex9  20.09.2022, 18:43
@DerAffelul

Angenommen, du speicherst die Daten je Template in einer Tabelle. Zudem gehe ich von Anfang an davon aus, dass es mehrere Templatetypen geben wird:

Dann hättest du in deiner Datenbank mindestens drei Datenbanktabellen. Ich nenne sie einmal template_a, templates und pages.

Die Tabelle templates listet in einer Spalte einfach alle Tabellennamen auf, die ein Template repräsentieren.

In pages gibt es drei Spalten: path, page_name und template_name. Da du zwei Unterseiten für deine Webseite benötigst, hättest du zwei Datensätze.

path        | page_name  | template_name
------------------------------------------
/football   | football   | template_a
/basketball | basketball | template_a

Beide Seiten haben einen anderen Seitenpfad, nutzen aber dasselbe Template. Die template_name-Spalte würde als Fremdschlüssel auf die Spalte der templates-Tabelle zeigen.

Dann wäre noch template_a übrig. Sie braucht die Spalten path, headline und text. Erstere Spalte wäre ein Fremdschlüssel, der auf die path-Spalte von pages zeigt. Die Datensätze könnten folgendermaßen so aussehen:

path        | headline   | text
------------------------------------------
/football   | Football   | Text about football
/basketball | Basketball | Text about basketball

Wenn nun ein Nutzer die URL your-domain/football aufruft, wird diese Anfrage zunächst an den Dispatcher geleitet, der den URL-Pfad herausfiltert (/football). Nach diesem Pfad sucht er in der pages-Tabelle mit einem entsprechenden SQL Query.

SELECT page_name, template_name FROM pages WHERE path='/football'

In PHP würdest du dir diesen Query dynamisch zusammenbauen (Stichwort: Prepared Statement) und dann an die Datenbank schicken. PHP bietet verschiedene Verbindungsmodule je DBMS (https://www.php.net/manual/en/refs.database.php).

Diese Anfrage würde dir die Information liefern, ob es eine entsprechende Seite gibt und wenn ja, welches Template die Seite nutzt. Also wäre eine zweite Anfrage der nächste Schritt:

SELECT * FROM template_a WHERE path='/football'

Da die Daten im ResultSet assoziativ zu ihren Feldnamen gespeichert werden, könntest du sie als assoziatives Array an die Template-Engine weiterreichen.

$data = // fetch associative array from result set ...
$data['page_name'] = $page_name;

$template = new SMTemplate();
$template->render($template_name, $data);

Die template_a.tpl:

<!doctype html>
<title>{$page_name}</title>
<body>
  <h1>{$headline}</h1>
  <p>{$text}</p>
</body>

Dies wäre soweit eine Datenspeicherung nach relationalem Datenbankmodell. Noch ein anderer Weg wäre die Speicherung von Objekten in ein ORM. Ich würde für diesen Fall empfehlen, sich mit Doctrine zu beschäftigen.

1

Gar nicht. Das macht keinen Sinn. Wer soll das Designen usw? Du wirst schon auf ein CMS, wie Wordpress usw. zurückgreifen müssen, wenn du es so willst

DerAffelul 
Fragesteller
 19.09.2022, 21:05

Dass muss ja nicht groß designed sein. Einfach ein kleiner Skript, der aus Benutzereingaben eine neue Unterseite erstellt. Oder auch ein großer Skript ;)

1
FaTech  19.09.2022, 21:06
@DerAffelul

Wie gesagt, ergibt keinen Sinn und doch, das muss designed sein. Von nichts kommt nichts

0
DerAffelul 
Fragesteller
 19.09.2022, 21:07
@FaTech

Das ist nur ein kleine Projekt für den Heimgebrauch

1
FaTech  19.09.2022, 21:08
@DerAffelul

Das ist der "Programmierung" egal. Es ergibt keinen Sinn und punkt

0
NackterGerd  19.09.2022, 22:33
@FaTech

Nein - nicht jede Unterseite muss einzeln Designed werden.

Template ist doch der richtige Ansatz

1
NackterGerd  19.09.2022, 22:38
@FaTech
Das ist der "Programmierung" egal. Es ergibt keinen Sinn und punkt

Deine Antwort? Stimmt!

1
NackterGerd  19.09.2022, 22:30

Warum Gar nicht.

Und wozu WordPress

Man braucht doch nicht unbedingt WordPress?

Gibt sogar viele Gründe dagegen wenn man Erfolgreiche Seite haben möchte und einfach änderbar für Kunden.

Hier bei GUTEFRAGE kannst du auch Texte eingeben die dann im Server eingefügt und gelautet werden

Vermutlich auch ohne WordPress

0
NackterGerd  19.09.2022, 22:54

Der Fragesteller möchte Templates aber kein CMS so wird ein Schuh draus

Er hat genau beschrieben was er will und vor hat.

Keine Ahnung warum du diese Einfache Aufgabe nicht verstehst.

Man braucht nur Eingabegeräte und etwas PHP und Template dafür.

1

praktisch kannst du jedes template system nehmen und dann einfach z.b. html seiten schreiben . einige systeme machen das sogar , besser ist natürlich meist schon eine datenbank dahinter zu haben und den content on demand zu erzeugen .

aber zum üben , immer zu . WYSIWYG Editoren gibts ja auch eine menge .

das schreiben etc ist jetzt nciht ds komplizierteste .

NackterGerd  19.09.2022, 23:04

Welchen WYSIWIG Editor würdest su empfehlen um Website online zu editieren.

Habe ähnliches vor wir Fragesteller

1
DerAffelul 
Fragesteller
 20.09.2022, 08:56
@NackterGerd

Als Hoster nutze ich infinitere.net und als Code Editor Visual Studio code

0
NackterGerd  20.09.2022, 10:22
@TechPech1984
Standard
Ready-made package for small-size projects
$80/ month

😱

Für einfache Projekte wohl etwas zu teuer

0

Ja klar geht das. Ich habe vor einiger Zeit etwas ähnliches gebaut. - Zwecks : Schaufenster TV

DerAffelul 
Fragesteller
 19.09.2022, 21:31

Kannst du mir auch ungefähr erklären, wie sowas geht?

0

Einfach ein Eingabeformular machen für Überschriften, Texte

Evtl auch Bilder

Und einem Layout-Typ

Dann nach Submit das Layouttyp auslesen und die Daten dementsprechend in einem Template einbauen.