Anfänger...wie wandele ich alt in neu um?

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.
Antworten
Benutzeravatar
Draketornado
Mitglied
Beiträge: 21
Registriert: 19.10.2010 17:34

Anfänger...wie wandele ich alt in neu um?

Beitrag von Draketornado »

Hey Leute

Ich bin leider schon etwas älteren Alters und auch das Englische macht mir hin und wieder zu schaffen.

Ich möchte eine ganz einfache kleine Extension für Eigenbedarf erstellen, komme aber schon ganz am Anfang nicht mehr mit. Ich habe die englische Doku auch durchgelesen, jedoch erweist es sich als schwerer als gedacht.


Wer kann sich mal bitte erbarmen, mir in ein paar Schritten zu erklären wie ich jetzt diese alte Seite (mit alt meine ich das alte phpbb3):

https://wiki.phpbb.com/Deutsch:Vorlage_ ... ene_Seiten

ins neue umwandeln kann. Besser noch wäre wenn mir jemand dieses alte in eine Extension verwandeln könnte, dann könnte ich einen direkten Vergleich machen.

Ich nehme mal an dass der php Code von der Seite, jetzt im Extensionsordner im Unterordner controller in der Datei main.php abgespeichert wird. Das template kommt wie gewohnt in den Stylesordner und language file auch wie gewohnt in den language folder.

Wo und wie müsste zum Beispiel folgender Code in der Extension eingefügt werden:

Code: Alles auswählen

$example_variable = sprintf($user->lang['TIME_NOW'], $user->format_date(time()));
$google_logo = '<a href="http://www.google.com/"><img src="http://www.google.com/intl/en_ALL/images/logo.gif" alt="Google" /></a>';

// Ein typischer Gebrauch um Variablen an das Template zu senden.
$template->assign_vars(array(
    'EXAMPLE_VAR'    => $example_variable,
    'GOOGLE_LOGO'    => $google_logo,
    'MY_AVATAR'        => get_user_avatar($user->data['user_avatar'], $user->data['user_avatar_type'], $user->data['user_avatar_width'], $user->data['user_avatar_height']),
));
 
Dann wäre da wahrscheinlich noch ein Event zu machen, welches die "Wer ist Online" Liste anpasst und die gerade erstellte Seite hinzufügt.

Ich hoffe dass jemand von euch mir da eine kleine Hilfe geben kann.

Vielen Dank

Beste Grüsse


Draketornado
Benutzeravatar
Kirk
Supporter
Supporter
Beiträge: 7870
Registriert: 24.05.2010 08:31
Kontaktdaten:

Re: Anfänger...wie wandele ich alt in neu um?

Beitrag von Kirk »

Hallo
Was genau möchtest du überhaupt haben?
Benutzeravatar
Draketornado
Mitglied
Beiträge: 21
Registriert: 19.10.2010 17:34

Re: Anfänger...wie wandele ich alt in neu um?

Beitrag von Draketornado »

Ich möchte mir eine Art Highscoreliste zusammenbauen, nach meinen Wünschen, die man im ACP managen kann, Änderungen im MCP durchführen kann und die User selbst Einträge per UCP machen können.

Benötigt werden in etwa 8 Felder in der Datenbank. Foren-User-Name, Spielername, Zahl1, Zahl2,Zahl3, Zahl1-3Total, Zahl4,Zahl5,Zahl6,Zahl4-6Total.
Die beiden roten braucht man ja nicht in die Datenbank zu speichern, da sich diese errechnen lassen.

Das ist so im grossen Ganzen was ich bauen möchte....naja...da kommen noch ein paar Bilder dazu, vielleicht noch Avatar....mal kucken.

Jedenfalls soll im ACP alles gezeigt werden
Im UCP soll nur Spielername,Zahl4,Zahl5,Zahl6,Zahl4-6Total angezeigt werden...alles per User editierbar
Im MCP soll eine Liste aller Foren-User-Name, Spielername, Zahl4,Zahl5,Zahl6,Zahl4-6Total die bei dem Spiel mitmachen, sprich, die selbst die 3 Zahlen eingetragen haben

Die Listen (ACP+MCP) sollen immer nur die Spieler anzeigen für die auch die Zahlen4-6 eingetragen wurden.

Der Admin hat per ACP dann die Möglichkeit definitif die Zahlen einzutragen (Zahl1-3) die dann im Nachhinein auf der Seite in einer Highscoreliste stehen sollen: Foren-User-Name, Spielername, Zahl4,Zahl5,Zahl6,Zahl4-6Total[

Dann noch eine kleine Sache....pro User sollen zwei Spielernamen möglich sein, die man eintragen kann.

Vielen Dank

Beste Grüsse


Draketornado
Benutzeravatar
Draketornado
Mitglied
Beiträge: 21
Registriert: 19.10.2010 17:34

Re: Anfänger...wie wandele ich alt in neu um?

Beitrag von Draketornado »

Hallo

Also was ich eigentlich zu Anfang mal wissen müsste ist wie man diesen Code:

Code: Alles auswählen

$example_variable = sprintf($user->lang['TIME_NOW'], $user->format_date(time()));
$google_logo = '<a href="http://www.google.com/"><img src="http://www.google.com/intl/en_ALL/images/logo.gif" alt="Google" /></a>';

// Ein typischer Gebrauch um Variablen an das Template zu senden.
$template->assign_vars(array(
    'EXAMPLE_VAR'    => $example_variable,
    'GOOGLE_LOGO'    => $google_logo,
    'MY_AVATAR'        => get_user_avatar($user->data['user_avatar'], $user->data['user_avatar_type'], $user->data['user_avatar_width'], $user->data['user_avatar_height']),
));
 
korrekt in den Code der main.php integriert vom neuen Tutorial von nickvergessen:

Code: Alles auswählen

<?php
/**
*
* @package phpBB Extension - Acme Demo
* @copyright (c) 2013 phpBB Group
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
namespace acme\demo\controller;
class main
{
    /* @var \phpbb\config\config */
    protected $config;
    /* @var \phpbb\controller\helper */
    protected $helper;
    /* @var \phpbb\template\template */
    protected $template;
    /* @var \phpbb\user */
    protected $user;
    /**
    * Constructor
    *
    * @param \phpbb\config\config        $config
    * @param \phpbb\controller\helper    $helper
    * @param \phpbb\template\template    $template
    * @param \phpbb\user                $user
    */
    public function __construct(\phpbb\config\config $config, \phpbb\controller\helper $helper, \phpbb\template\template $template, \phpbb\user $user)
    {
        $this->config = $config;
        $this->helper = $helper;
        $this->template = $template;
        $this->user = $user;
    }
    /**
    * Demo controller for route /demo/{name}
    *
    * @param string        $name
    * @return \Symfony\Component\HttpFoundation\Response A Symfony Response object
    */
    public function handle($name)
    {
        $l_message = !$this->config['acme_demo_goodbye'] ? 'DEMO_HELLO' : 'DEMO_GOODBYE';
        $this->template->assign_var('DEMO_MESSAGE', $this->user->lang($l_message, $name));
        return $this->helper->render('demo_body.html', $name);
    }
}
 
die demo_body.html wurde natürlich angepasst:

Code: Alles auswählen

<!-- INCLUDE overall_header.html -->

<h2>{DEMO_MESSAGE}</h2>

<div>{MY_AVATAR}</div>
<div>{EXAMPLE_VAR}</div>
<div>{GOOGLE_LOGO}</div>

<table class="table1" cellspacing="1">
    <tr>
        <th>{L_EXAMPLE}</th>
        <th>{L_DEMO}</th>
    </tr>
    <!-- BEGIN block_name -->
    <tr class="<!-- IF block_name.S_ROW_COUNT is even -->bg1<!-- ELSE -->bg2<!-- ENDIF -->">
        <td>{block_name.EXAMPLE}</td>
        <td>{block_name.DEMO}</td>
    </tr>
    <!-- END block_name -->
</table>

<!-- INCLUDE overall_footer.html -->

Wie gesagt....ich müsste erst nur mal wissen wie diese main.php aussehen müsste damit das so funktionniert.


Vielen Dank für die Hilfe


Grüsse

Draketornado
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Re: Anfänger...wie wandele ich alt in neu um?

Beitrag von gn#36 »

Ich denke, dass du erst mal verstehen musst, wie eine phpBB Erweiterung technisch funktioniert, danach ist dir auch sehr schnell klar, was wie wohin muss.

Hier gibt es vom Verständnis her eigentlich in meinen Augen zwei wichtige Dinge:
  1. Es gibt ein paar Stellen, an denen phpBB automatisch nach Dateien mit speziellen Namen sucht:
    • In allen Unter-Unterordnern des ext/ Verzeichnisses (also z.B. ext/unterordner/unterunterordner) wird beim Aufruf der ACP Seite, die die Erweiterungen auflistet nach einer composer.json gesucht. Diese enthält die Bezeichnung der Erweiterung und einige grundlegende Informationen über die Erweiterung (z.B. Autor, Version, ggf. Abhängigkeiten etc.)
    • Dort wird bei jeder Löschung des Caches und bei aktivierter Erweiterung im Ordner config/ nach der Datei service.yml und routing.yml gesucht
      • Die service.yml enthält alle von dir definierten php Klassen, die in der Erweiterung vorkommen und macht sie phpBB bekannt. Sie wird bei jeder Interaktion zwischen PHP Klassen der Erweiterung und phpBB gebraucht
      • Die routing.yml gibt phpBB bekannt, unter welchen URLs Teile der Erweiterung innerhalb von phpBB erreichbar sein sollen und welche PHP Klassen und welche deren Methoden bei der Verwendung dieser URLs aufgerufen werden sollen. Sie wird daher bei Erweiterungen mit eigenständigen Unterseiten benötigt.
    • Dort wird bei jeder Installation, Deaktivierung und Löschung der Erweiterung über das ACP nach der optionalen Datei ext.php gesucht. Diese kann verwendet werden, um den Ablauf des Installationsprozesses zu verändern
    • Dort wird bei der Installation und jeder Aktivierung oder Löschung von Erweiterungen im Ordner migrations/ nach beliebigen php Dateien gesucht
    • Dort wird bei aktiver Erweiterung im Unterverzeichnis styles/[stylename]/template/event/ nach Styledateien mit speziellen Namen gesucht die automatisch verwendet werden
    • Styledateien werden allgemein unter styles/[stylename]/template bzw. styles/[stylename]/theme erwartet, sprachdateien entsprechend unter language/[iso]/, die automatisierten Tools suchen dort nach den Dateien.
    • Dort wird in den Sprachdateiverzeichnissen language/[iso]/ nach php Dateien mit speziellen Namen gesucht (permission_xxx.php sowie info_(u|m|a)cp_xxx.php) die beim Aufruf einiger spezieller phpBB Seiten automatisch eingebunden werden (z.B. die permission_xxx.php Dateien wenn man im ACP die Rechte einstellt, die info_xxx Dateien, wenn man sich im ucp, mcp oder acp befindet (gedacht für Menüeinträge)).
  2. Alles was eine Erweiterung tut muss über die beiden Konfigurationsdateien im config/ Ordner konfiguriert werden, oder in einer der automatisch eingebundenen Dateien stattfinden. Der Ablauf ist also gedanklich immer phpBB (-> routing.yml) -> service.yml -> deine Klasse oder phpBB -> deine Klasse an einer speziellen Stelle.

    PHP Code kann naturgemäß nur in einer der php Dateien ausgeführt werden, daher muss für praktisch alles was nicht nur bei der Installation der Erweiterung Dinge tun soll ein Eintrag in der service.yml und ggf. in der routing.yml erfolgen. Diese beiden Dateien steuern, wie phpBB auf die Dateien der Erweiterung zugreift, um die eigentliche Tätigkeit müssen sich dann die Klassen der Erweiterung kümmern, die in der service.yml angegeben sind. Wo die PHP Dateien liegen ist aber abgesehen von obiger Liste im Grunde ziemlich egal. Du kannst, abgesehen von obigen automatischen Dingen, die Dateien in beliebige Unterordner der Erweiterung legen und musst nur den Namespace und die Angaben in der config.yml Datei entsprechend anpassen. Es empfielt sich aber dennoch, sich an die allgemein verwendete Struktur zu halten (controller/ für eigenständige Seiten, event/ für Klassen, die auf Events reagieren, ...) um anderen das Verständnis deiner Erweiterung nicht unnötig zu erschweren.
Hast du zufällig dieses Thema schon entdeckt? Dave hat ein deutschsprachiges Tutorial verfasst, das schon mal sehr viel abdeckt.

Was im Tutorial fehlt sind eigenständige Seiten, also das wonach du hauptsächlich fragst. Trotzdem rate ich dir, erst mal das Tutorial nachzuvollziehen, denn eigenständige Seiten funktionieren fast genauso wie "Eingriffe in bestehenden phpBB-Code" (um mal die Bezeichnung aus dem Tutorial zu verwenden).

Du musst allerdings kein EventSubscriberInterface implementieren und benötigst auch keine static public function getSubscribedEvents(). Stattdessen musst du deinen Controller lediglich in der config/service.yml bekannt machen und außerdem in der config/routing.yml die URL zu deiner Seite festlegen.

Die routing.yml kommt in dem Tutorial nicht vor, daher als Hinweis hier kurz der Aufbau der Datei:

Code: Alles auswählen

# Mit # beginnen Kommentare
name_der_route_mit_beliebiger_laenge:
    # Nur mit leerzeichen einruecken, nie mit tabs
    # Das pattern enthaelt die gewuenschte URL vom Forum Root aus gesehen
    pattern: /gewuenschte/route/zur/datei/
    # In der naechsten Variable wird definiert was fuer ein Controller aufgerufen werden soll
    # In der Route können auch parameter enthalten sein. In dem Fall den parameternamen in eckigen klammern an der gewünschten Stelle angeben
    # z.B. /gewuenschte/route/zur/datei/{parameter_1}
    defaults: { _controller: "meine.eindeutige.bezeichnung.des.controllers.aus.der.service.yml:funktionsname", parameter_1: "standardwert" }
In der service.yml muss es dazu passend dann einen Service mit der Bezeichnung meine.eindeutige.bezeichnung.des.controllers.aus.der.service.yml geben.

Also z.B.

Code: Alles auswählen

meine.eindeutige.bezeichnung.des.controllers.aus.der.service.yml:
    # Hier muss sich der Pfad der Klassendatei wiederspiegeln
    # in diesem Fall liegt die Klasse also in einer Datei mit dem Namen meincontroller.php im Ordner ext\meinname\meineerweiterung\controller\
    class: meinname\meineerweiterung\controller\meincontroller
    # Parameter, die der Klasse im Konstruktor übergeben werden sollen. Wenn man z.B. das Template braucht kann man es hier anfordern
    # Passend dazu braucht man aber auch eine Methode '__construct(\phpbb\template\template $template) in der man das Template in eine globale Variable speichert.
    arguments:
        - '@template'
        - '@controller.helper' 
Die Klasse dazu muss dann in etwa so aussehen:

Code: Alles auswählen

namespace meinname\meineerweiterung\controller;

class meincontroller
{
    // Das folgende dient u.a. dazu, in einem vernünftigen Editor das autocomplete Feature zu befüttern
    // Gleichzeitig wird mit dem protected die Variable vor dem Zugriff von außen beschützt
    /** @var \phpbb\template\template */
    protected $template;

    /** @var \phpbb\controller\helper */
    protected $helper;

    // Konstruktor - wird beim Erstellen des Objekts automatisch aufgerufen
    public function __construct(\phpbb\template\template $template, \phpbb\controller\helper $helper)
    {
       // Übergebene Templatevariable speichern
        $this->template = $template;
        $this->helper = $helper;
        // Wenn man noch weitere globale braucht, z.B. $user o.ä. dann sollten die auch passend übergeben werden (also hier und in der service.yml ergänzen)
    }

    // Der eigentliche Arbeitssklave
    public function funktionsname($parameter_1)
    {
        //Hier kann man dann beliebige Dinge machen die z.B. zu einer Ausgabe führen
        // Templatevariable weiterverwenden
        $template = $this->template;
        //... Beliebiger Code ....
        // Den Link auf die in der routing.yml definierte Route bekommt man z.B. mit Hilfe von $this->helper->route('name_der_route_in_der_routing_yml')
        return $this->helper->render('templatedateiname.html', $seitentitel);
    }
}
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
Draketornado
Mitglied
Beiträge: 21
Registriert: 19.10.2010 17:34

Re: Anfänger...wie wandele ich alt in neu um?

Beitrag von Draketornado »

Vielen Dank, das ist sehr aufschlussreich. Ich werde mich der Lektüre mal genau annehmen und berichten. Ich hoffe dass ich auf Hilfe von euch zurückgreifen darf wenn ich mal wieder hängen sollte.

Schöne Grüsse

und


Vielen Dank.


Draketornado
Antworten

Zurück zu „Extension Bastelstube“