Trenne Logik von der Ausgabe, mittels Hooks in WordPress

bueltge.de [by:ltge.de] wird von Frank Bültge geführt, administriert und gestaltet. Alle Inhalte sind persönlich von mir ausgewählt und erstellt, nach bestem Gewissen und Können, was die Möglichkeit von Fehlern nicht ausschließt.

Kommentare

  
  1. Ralf sagt:

    Argh. Ich sitze hier gerade zähneknirschend und mit den Füßen scharrend. Leider habe ich auch nicht so viel Zeit, werde bei Gelegenheit noch mal was dazu schreiben.

    Kurz:
    add_action() und add_filter() haben nur wenig mit MVC zu tun. Es sind Event-Listener.
    add_action( 'if_happened_this', 'do_this' );
    und
    add_filter( 'if_this_is_set', 'change_it_to_this' );
    Also wenn eine Funktion ausgeführt wird oder eine Variable gesetzt wird (Ereignis), dann kann man mit den Listenern darauf reagieren.

    MVC setzt man eher mit call_user_func() um. Im Model werden die Daten festgelegt/geholt/berechnet (modelliert), im View werden sie ausgegeben und der Controller entscheidet welche Funktion zur Modellierung bzw. Ausgabe der Daten verwendet wird. Ich habe das mal hier in einem kleinen Code zusammengefasst.

    Jetzt kommen die Event-Listener do_action() und apply_filters() ins Spiel. Den Models (get_some_foo() und get_some_bar() ) könnte man Filter verpassen, den Views (some_view() und some_storage() ) einen do_action.
    Viel wichtiger ist aber der Controller. Denn er ist ja quasi Herrscher und entscheidet alles. Er bestimmt wo die Daten her kommen (welches Modell verwendet wird) und wie sie ausgegeben werden (welcher View). Den Arrays für get_what und do_what verpasst man also einen apply_filters. Möchte ich nun die Daten nicht als ungeordnete Liste sondern als z.B. Definitions-Liste ausgeben, schreibe ich einen neuen View und übergebe dem Controller meinen neuen View. Gleiches gilt für die Models. Anstatt fest einprogrammierte Daten zu verwenden, könnte ich sie auch aus einer Datei oder Datenbank lesen. Ich müsste dazu nur ein neues Modell schreiben und dem Controller dieses bekannt geben.

    Wie effektiv MVC sein kann, zeigt sich am Nav-Menu von WordPress. Es gibt zahlreiche Tutorials und Code-Snippets wie man das HTML des Nav-Menus von WP beeinflussen kann. Würde WP einem MVC-Pattern folgen, wäre es eine ganz einfache Sache. Man würde für das Nav-Menu einen neuen View schreiben und dem WP-Controller (den es leider nicht gibt) bescheid geben das man einen neuen View hat und das dieser bitte schön zu verwenden ist.

    (Dieser Kommentar wurde unter Zeitdruck geschrieben und ist auch mit Rechtschreib- und Grammatikfehler gültig)

  2. Ben sagt:

    @Renè und Ralf: Danke für den hilfreichen Artikel bzw. Kommentar. Habe gerade erst begonenn mich in die MVC-Thematik und die entsprechende (sinnvolle) Umsetzung in php einzulesen und da kommen eure Beiträge wie gerufen :-)

  3. Christoph G. sagt:

    Ohje.
    Mal ganz ehrlich, liest sowas heute niemand mehr Korrektur?
    Nach den ersten beiden Absätzen ist mir die Lust gründlich vergangen. Thematisch ein rel. interessantes Thema. Aber in der hier präsentierten Form leider nicht zu gebrauchen. Das macht einfach keinen Spaß weiter zu lesen.

    Von grammatikalischen Grundregeln mal abgesehen (die kann man nicht alle aufzählen), aber es heißt "Pattern" oder "pattern", nicht jedoch "Patter". Die Funktion heißt apply_filters() und nicht applay_filters(), usw.

  4. Daniel sagt:

    WordPress hat von Haus aus so viele praktische Hooks, in die man sich hineinhaken könnte. Das Probem ist nur, dass ich die als mittelguter WordPress-Programmierer nicht alle kenne. Wie findet ihr die denn, außer per Zufall durch ein Tutorial? Der Codex gibt bei vielen Hooks gar nichts her.

  5. georg sagt:

    ... vor 5 Jahren konnte ich noch selber an WordPress rumschrauben und genau das erreichen, was ich erreichen wollte. Heute bin ich überfordert. Das ist ein wenig schade, aber wohl nicht zu ändern.

  6. Theresa sagt:

    @ Georg
    Das kann ich gut verstehen, denn mir geht es leider genauso. Mir fehlt bedauerlicherweise auch die Zeit, mich noch mal komplett einzufinden. Doch dafür gibt es ja diesen Blog, der uns auf dem neusten Stand hält.

  7. René sagt:

    @Daniel
    Ich schließ mich Frank an, Hooks lassen sich allein durch Core lesen finden.
    In der Regel reicht die Vermutung das ein Hook in einer bestimmten Datei sein könnte, dann muss nur noch nach apply_filters oder do_action gesucht werden und rückwärts lesen. Klingt kompliziert ist aber ganz einfach.

© 2013, since 2005 bueltge.de [by:ltge.de] · Theme is built by ThemeShift