Tutorial

In diesem Forum gibt es Starthilfe zum neuen Extension-System von phpBB 3.1/3.2. Fragen zur Entwicklung von Extensions und zur Konvertierung von phpBB 3.0.x MODs sind ebenfalls willkommen.
Benutzeravatar
D@ve
Ehemaliges Teammitglied
Beiträge: 3842
Registriert: 28.08.2002 19:33
Wohnort: Bretzfeld
Kontaktdaten:

Tutorial

Beitrag 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
There are only 10 types of people in the world: Those who understand binary, and those who don't
Benutzeravatar
nickvergessen
Ehrenadmin
Beiträge: 11559
Registriert: 09.10.2006 21:56
Wohnort: Stuttgart, Germany
Kontaktdaten:

Re: Tutorial

Beitrag von nickvergessen »

kein Support per PN
Benutzeravatar
D@ve
Ehemaliges Teammitglied
Beiträge: 3842
Registriert: 28.08.2002 19:33
Wohnort: Bretzfeld
Kontaktdaten:

Re: Tutorial

Beitrag 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
There are only 10 types of people in the world: Those who understand binary, and those who don't
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Re: Tutorial

Beitrag von gn#36 »

Sehr cool! Das ist schön einfach beschrieben.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Benutzeravatar
HabNurNeFrage
Ehemaliges Teammitglied
Beiträge: 1627
Registriert: 17.01.2010 20:22
Wohnort: An der Ostsee
Kontaktdaten:

Re: Tutorial

Beitrag 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
| HomeStory.org - the friendly Community | Forum für alle Lebenslagen | <"}))}~ | Nicht nachmachen: Meine phpBB Spielereien |
var shoppen = geld.replace (/geld/g, 'bloedsinn'); if (geld < 1) { return home; };
Benutzeravatar
Elsensee
Ehemaliges Teammitglied
Beiträge: 832
Registriert: 19.05.2010 15:14
Wohnort: Hamburg
Kontaktdaten:

Re: Tutorial

Beitrag 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 )
Posts mostly powered by GitHub and phpBB.de Cross-Reference

2015-03-20 - Never forget 8)
Benutzeravatar
D@ve
Ehemaliges Teammitglied
Beiträge: 3842
Registriert: 28.08.2002 19:33
Wohnort: Bretzfeld
Kontaktdaten:

Re: Tutorial

Beitrag 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
There are only 10 types of people in the world: Those who understand binary, and those who don't
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Re: Tutorial

Beitrag 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.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Benutzeravatar
jevo
Mitglied
Beiträge: 367
Registriert: 05.09.2007 13:06
Wohnort: Freiberg

Re: Tutorial

Beitrag 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....
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Re: Tutorial

Beitrag 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
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Antworten

Zurück zu „Extension Bastelstube“