Seite 1 von 2

Tutorial

Verfasst: 06.01.2015 15:06
von D@ve
Moin,
falls das jemandem hilft: ich hatte meine Erkenntnisse vor Weihnachten mehr oder weniger ungeordnet in ein Tutorial festgehalten - auch um sie für mich nochmal zu festigen...

Irgendwie hat mir das etwas gefehlt... So ein Step-By-Step-Tutorial. Leider wird immer wieder darauf verwiesen "Schaut Euch die bstehenden Mods an", was mir persönlich nicht viel geholfen hat.
http://www.2phpbb.de/phpbb-forum/viewtopic.php?t=2

Ist bestimmt einiges fehlerhaft... Aber ich dachte ich poste es mal. Soll auch keine Werbung sein - die Seite dient eh nur meinen eigenen Mods (ist meine kleine Area51)
Falls gewünscht kann das gerne hier rein kopiert werden.

Gruß, Dave

Re: Tutorial

Verfasst: 06.01.2015 17:36
von nickvergessen

Re: Tutorial

Verfasst: 06.01.2015 17:48
von D@ve
Ja kenne ich... Aber ich finde das und auch das andere Tutorial (ist ja afair auch von Dir) etwas zu....hmmm... wie soll ich sagen... "abstrakt".

Sollte daher auch eher als Ergänzung dienen. Ziel war es da eher, eine Extension mal komplett zu erklären - wenn da nicht alles abgedeckt ist. Gute Tutorials und Howtos sind bei 3.1 gerade imo echt Mangelware. Es gibt zwar die Doku und das Wiki, aber da sind Dinge auch nicht wirklich praktisch erklärt. Wie erstelle ich eine Migration? Wie richte ich einen Cronjob ein? Ich glaube viele Mod-Entwickler machen das per Trial-And-Error.

Gruß, Dave

Re: Tutorial

Verfasst: 06.01.2015 18:13
von gn#36
Sehr cool! Das ist schön einfach beschrieben.

Re: Tutorial

Verfasst: 06.01.2015 19:57
von HabNurNeFrage
Hi D@ve,

genial - wo ist der Like-Button? 8)
Das verstehe sogar ich fast komplett. Vielen Dank dafür.
Eine sehr schöne und anschauliche Erläuterung zur Funktionsweise und zum Aufbau von Extensions.
Das habe ich garantiert nicht zum letzten Mal gelesen. (und ab damit damit in die Favoriten)

LG

Re: Tutorial

Verfasst: 06.01.2015 20:44
von Elsensee
Du solltest vielleicht nochmal hervorheben, dass die services.yml nur Leerzeichen zur Einrückung benutzt und keine Tabs. Einige kennen das vielleicht nur mit Tabs und wundern sich dann nachher, wenn es Fehler hagelt. :wink:

Des Weiteren gibt es in Migrations die Möglichkeit die Funktion effectively_installed() zu implementieren. Gibt diese Funktion true zurück, wird die Migration als installiert markiert und übersprungen. Diese Funktion ist genau wie die Anderen, bis auf depends_on() nicht static. :wink: (Warum nur die Funktion static ist, wüsste ich gerne mal... :D )

Re: Tutorial

Verfasst: 06.01.2015 22:16
von D@ve
Oh gute Idee... Das mit den Leerzeichen hat mich ziemlich viel Kopfzerbrechen gekostet... Finde ich eigentlich auch nicht unbedingt zeitgemäß. Eigentlich könnte man da vor dem Parsen einfach jeglichen WhiteSpace entfernen, so dass das keine Rolle spielt.

effectively_installed() hatte ich bewusst weggelassen. So wirklich hat sich mir der Sinn noch nicht erschlossen und ich wollte nur Dinge schreiben, die ich wirklich auch kapiert habe.

Als nächstes kommen erstmal die Cron-Jobs...

Gruß, Dave

Re: Tutorial

Verfasst: 07.01.2015 10:41
von gn#36
Sinnvoll ist effectively_installed() z.B. auch bei Updates von phpBB 3.0 Mods. Wenn es also einen Vorgänger gibt, der die gleichen Tabellen verwendet hat, dann würde die Installation der Migration zu einem Problem führen, denn die Daten sind ja schon da und der Admin will vermutlich seine vorhandenen Daten weiter nutzen.

Den Whitespace beim parsen in den yml Dateien entfernen kann man nicht, denn die Einrückung entscheidet ja über die Gruppierung von Daten.

Re: Tutorial

Verfasst: 30.01.2015 09:34
von jevo
Schönes Beispiel, um mal einen Einblick zu bekommen. Nach dem Durchlesen werfen sich aber mehr Fragen aus, als ich vorher hatte.

Bei "Hooks, Services und Eingriff in bestehenden phpBB-Code". Obwohl sich da Mühe gegeben wurde, verstehe ich da nur Bahnhof.
z.B.: was ist

Code: Alles auswählen

use Symfony\Component\EventDispatcher\EventSubscriberInterface;
Das müsste ein Listener sein.. Nur warum gerade der? Woher weiß man, welchen man braucht?
Ich habe darüber schon eine ganze Weile auf wiki.phpbb.com gelesen. Nur wird das dort entweder total abstrakt erklärt, oder mit schlecht kommentierten Quelltext um sich geworfen.

Evtl. liegt es auch daran, daß ich bis jetzt nur ein mal mit Hooks gearbeitet habe und froh war, als es so ging, wie ich es wollte. Evtl. ist die Implementierung auch einfach schlecht gewesen...

Die Vorteile dieser Art der Modifikation sind mir schon klar, aber bei "php Events" auf der Seite von nickvergessen, musste ich lachen. So muß man nun statt einer Zeile 50 schreiben, um die selbe Funktion hinzubekommen :roll:

PS: Ich habe damit selbst noch nicht rumgespielt, nur versucht einzulesen....

Re: Tutorial

Verfasst: 30.01.2015 20:21
von gn#36
Es braucht hin und wieder einen Blick in den phpBB Quellcode um zu wissen was man nun braucht, insbesondere dann, wenn man ein ganz bestimmtes Verhalten modifizieren will. Dann muss man erst mal schauen, was da an der Stelle an Hooks liegt und wie man die nutzen kann.

Du hast zwar recht, dass insgesamt mehr Code fällig ist, dafür kann man aber wenn man ohne Modifikationen auskommt auch bei Updates einfach alles drüberbügeln ohne in größeren Aktionen die Änderungen nachzupflegen.

Wenn man sich grob eingearbeitet hat ist aber eigentlich fast alles sehr logisch aufgebaut.

Die use Zeile brauchst du nicht zwingend. Das sagt im Grunde nur aus, dass du den angegebenen Namespace und die ggf. mitangegebene Klasse abkürzen willst (Standard ist, die Abkürzung auf das letzte Element des Namespaces) und ihn deshalb nicht mehr voll ausschreibst. Wenn du sie weglässt, dann musst du bei Aufrufen aus den entsprechenden Namespaces den vollen Namespace mit angeben.

Heißt, also in deinem Fall, dass du Vorkommen von EventSubscriberInterface in deiner Datei durch Symfony\Component\EventDispatcher\EventSubscriberInterface ersetzen müsstest, dann kannst du das use auch weglassen.

Etwas weniger Abstrakt vielleicht als Beispiel:

Wir haben eine Datei tolle_klasse.php:

Code: Alles auswählen

<?php 

namespace tolle_klasse;

function tolle_funktion ()
{
    echo "ich bin so toll\n";
}
 
Dann wollen wir die in einer anderen Datei nutzen:

Code: Alles auswählen

<?php
echo "Jetzt geht's los\n";
//Funktion aufrufen:
tolle_klasse\tolle_funktion(); // Richtig
tolle_funktion(); // Falsch
 
Wenn wir nun häufiger auf den Namespace tolle_klasse zugreifen wollen, dann können wir uns die Tipperei auch reduzieren und ein use Statement einfügen:

Code: Alles auswählen

<?php
echo "Jetzt geht's los\n";
//Funktion aufrufen:
use tolle_klasse as tk;
tolle_klasse\tolle_funktion(); // Richtig
tk\tolle_funktion();  //Kürzer
 
Die entsprechende Erklärung in der PHP Doku: http://php.net/manual/de/language.names ... orting.php