Bau Webseiten, keine Programme.

Nino ist ein schlankes PHP-Fundament, das konventionellen Webseiten dynamische Inhalte gibt – ohne selbst zum Projekt zu werden.

Live-Demo Nino auf GitHub

PHP 8.4+ · Keine Datenbank · Keine Laufzeitabhängigkeiten · MIT-Lizenz

Die Nino-Tools im Überblick

  • frontend Ihre Website

    Die Webseite bleibt das Projekt. Die Darstellung der Webseite entsteht durch individuelles HTML, CSS und JavaScript. Nino ergänzt Routing, mehrsprachige Inhalte, wiederverwendbare Elemente, Formulare und weitere dynamische Funktionen, ohne die Seitenstruktur oder das Design vorzugeben.

  • _admin Volle Kontrolle

    Ein optionales Tool für Entwickler. /_admin bietet vollen Zugriff auf die technische und redaktionelle Struktur des Projekts: Element-Typen, Inhalte, Texte, Bilder, Seiten, Routen, Benutzer, Konfiguration und Wiederherstellung. Alles, was dort geändert wird, bleibt als lesbare Datei verfügbar und lässt sich auch direkt bearbeiten.

  • _editor Einfache Inhaltspflege

    Der optionale Zugang für Redakteure. /_editor gibt nur die Inhalte zur Bearbeitung frei, die ein Konto pflegen darf. Redakteure können Texte, wiederkehrende Elemente und Bilder aktualisieren oder Formulareingaben und Newsletter verwalten, ohne Zugriff auf strukturelle Aspekte des Projekt zu erhalten.

  • _install Ein fertiges Fundament

    Einmal notwendig, danach entfernbar. Ein frischer Checkout wird über /_install eingerichtet. Das Setup prüft die technische Umgebung, legt Sprachen, Module, Theme und initiale Routen fest, erzeugt die Projektdateien und legt ersten Editor-Konten an. Nach dem Abschluss kann der Installer entfernt werden.

Der fehlende Layer

Der fehlende Baustein zwischen statischer Website und vollwertigem CMS.

HTML steht über allem

Konventionelles HTML, CSS und JavaScript bleiben immer der tragende Teil. Nino arbeitet um Dein Frontend herum, statt es zu ersetzen.

Dynamisch, wo notwendig

Mehrsprachige Inhalte, wiederkehrende Elemente, Formulare, Navigation, Benutzer und Backups werde nur dort verwendet, wo die Webseite sie braucht.

Werkzeuge, keine Abhängigkeiten

Nutze die optionalen UIs, wenn sie Dir helfen. ..oder entferne sie, wenn das Projekt sie nicht braucht.

Vom Checkout zur Übergabe

In drei Schritten zur dynamischen Website

  1. 1

    Installieren

    Das Projekt starten und den initialen Stand mit /_install erzeugen.

  2. 2

    Bauen

    Die Webseite mit Templates, CSS, JavaScript, Inhalten und projektspezifischem PHP entwickeln.

  3. 3

    Übergeben

    An Redakteure zur dauerhaften Pflege der dynamischen Inhalte risikofrei übergeben.

Technische Grundsätze

Klein, mit Absicht

  • Keine Datenbank - Lesbare Projektdateien statt eines abgeschlossenes Datensystems.
  • Keine Laufzeitpakete - Kein Composer-Bootstrap, keine Frontend-Bibliotheken oder andere Abhängigkeiten von Dritten.
  • Modulare Funktionen - Nur die notwendige Module aktivieren, die das Projekt tatsächlich nutzt.
  • Klare Trennung - HTML+-Templates für die Darstellung – PHP-Callbacks für die Logik.

Wie sieht Nino im Code aus?

Eigentlich so, wie Du die Website, ohnehin geschrieben hättest.

Drei Nino-Aufrufe starten die komplette Webseite. Nino initialisiert das Projekt, verwandelt den eingehenden HTTP-Request in eine Response und gibt sie aus. Die index.php benötigt kein Anwendungs-Bootstrap, keinen Dependency-Container und keinen Package-Loader.

index.php
<?php

require '_nino/Nino.php';

$appData = \Nino\init();
$request = \Nino\request( $appData, $_SERVER );

\Nino\output( $appData, $request );

HTML bleibt HTML. Textfills fügen dynamische Seiteninhalte ein, während der [elements]-Block in diesem Fall ein <article> für die jedes Service-Element wiederholt. Nino liefert die Daten; das HTML-Template behält die Kontrolle über das Markup.

templates/page-home.tpl
[template /templates/html-header]

<section class="ui-section ui-section--alt">
    <div class="ui-grid-row">
        <div class="ui-grid-100">
            <h1 class="ui-section-title">[[/page-home/title]]</h1>
            <p class="ui-section-subtitle">[[/page-home/intro]]</p>
        </div>
    </div>
</section>

<section class="ui-section">
    <div class="ui-grid-row">
        [elements /services limit="3"]
            <div class="ui-grid-100 ui-grid-m-33">
                <article class="ui-article ui-article--alt">
                    <div class="ui-article-content">
                        <h2 class="ui-article-title">[[title]]</h2>
                        <p class="ui-article-descr">[[description]]</p>
                    </div>
                </article>
            </div>
        [/elements]
    </div>
</section>

[template /templates/html-footer]

Das Projekt erweitern, nicht den Kernel. Ein über config.php eingetragenes Modul registriert seine Callbacks in init(). So trägt es einen eigenen Shortcode ein und kann diesen über jede Template aufrufen und den Rückgabewert dort im HTML ausgeben.

_nino/Project/Hello/Hello.php
<?php

namespace Project;

class Hello {

    public static function init( array &$appData ): void {
        \Nino\Html::addShortcode(
            $appData,
            'hello',
            [ self::class, 'shortcode' ]
        );
    }

    public static function shortcode(
        array &$appData,
        array $args
    ): string {
        return 'Hello from the project.';
    }
}

Hier gibt es mehr.

Werf einen Blick auf den Quellcode

Erlebe eine mit Nino gebaute Website - und überzeuge Dich selbst, wie wenig zwischen Frontend und Code steht.