MVC Pattern in WP themes - geht das?

  • Hallo,
    also das hier ist kein Problem, aber ich wollte trotzdem mal eure Meinung dazuhören.
    Die meisten PHP Frameworks (wie CodeIgnitor, ZF) folgen dem MVC Pattern - also der PHP Business Code (Model) wird sauber vom View mit HTML usw. getrennt. Der Controller entscheidet was Sache ist usw.

    Da ich an einem sehr umfangreichen E-Commerce-Theme arbeite in dem bei jedem Pageaufruf eine große Menge an Funktionen global mitgeladen werden, dachte ich mir, daß der MVC-Ansatz vielleicht gar nicht so übel ist. Bei MVC wird immer nur der PHP Code geladen, den man für den jeweiligen View braucht.
    Die Frage ist halt bloss wie man so etwas ähnliches in WP-Themes einbauen könnte.

    Was haltet ihr davon - ich bin auf folgende Idee gekommen.

    - jeder File in einem Theme mit einem 'get_header()' Aufruf am Anfang ist ein 'View'
    - vor 'get_header()' wird eine Funktion namens 'load_controller($template)' aufgerufen
    - $template wird vom WP file 'template_loader.php' produziert
    - die Funktion 'load_controller()' ist in functions.php definiert
    - load_controller() könnte so aussehen:

    PHP
    function load_controller($template=index.php){
    
    
    include WP_CONTENT_DIR . 'themes/themeName/' . CONTROLLER_FOLDER .  'controller' . basename($template,'.php') . '.php';
    
    
    }

    - der controller.index.php z.B. holt sich dann den passenden PHP Kram für das HTML in der Index.php des Themes

    ---
    Hab ich da irgendwas übersehen?
    Feedback welcome - weil, dann muss ich weniger denken... :)
    Danke.

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • Hm, versteife dich doch nicht zwingend auf den Ansatz, wie ZF oder andere das umgesetzt haben. MVC bedeutet ja nichts weiter, als dass die View vom (Business-)Model durch die Controller als Vermittler getrennt sind.

    • Die View hast Du mit den Themes, Fakt!
    • Die Controller stehen im eigentlichen Sinne zur Verfügung, gestellt durch WP selbst, aber selbst hier kannst Du feiner definieren mit der functions.php im Theme-Ordner (welches dann als Controller-Datei definiert ist).
    • Das Model sind eben die Klassen, die letztendlich die Businesslogik / das Datenhandling umsetzen und durch jeweilige Anforderung des Controllers bedient.

    Wie im Detail das umsetzen kannst, ist ja Dir selbst überlassen und natürlich muss man sich dann um die Logik detailiert Gedanken machen. Ich behaupte aber, dass das durch die verschiedenen Möglichkeiten von WP (Hooks, Filter) problemlos in der Form trennbar ist, insbesondere wenn dazu noch Plugins zum Einsatz kommen (die dann z.B. nur die Businesslogik mit Controller zur Verfügung stellen + eines Backends (View) für das Plugin selbst).

  • Danke für die Antwort!
    Also wie gesagt, ich hab keine Probleme mit meinem Theme, aber die ECommerce-Funktionen nehmen halt doch langsam gigantische Ausmasse an - mmt. ca 11.000+ Zeilen Code :-) Ich habe auch schon einiges in extra Klassen verfrachtet, wie z.B. class.invoice.php - es muss ja nicht bei jedem Seitenaufruf eine Rechnung erstellt werden.

    - functions.php als "Controller"
    Hab ich mir anfangs auch so gedacht, weil die Datei sehr zentral im Theme liegt.
    Aber in functions.php steht mir die variable $template von der WP-Datei 'template_loader.php' nicht zur Verfügung, im jeweiligen Theme-File schon. Warum, ist mir noch nicht ganz klar. Wenn ich wie z.B. bei ZF, die URLs verwenden könnte um jeweils zum passenden Controller/Model/View mappen könnte, wäre das eigentlich auch nicht so wichtig.

    - models
    Der einzige Grund warum die Business-Logic bei mir im Theme herumgeistert war, daß ich sichergehen wollte das die Funktionen aller Plugins geladen sind, bevor meine Funktionen aktiv werden. Vielleicht würde ich das heute anders machen.

    Das mit den Hooks ist ein guter Punkt, daß muss ich mir nochmal genauer anschauen.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!