Creare un'estensione (guida base)

Area dedicata alle guide di phpBB 3
Rispondi
Avatar utente
brunino
Utente
Utente
Messaggi: 194
Iscritto il: 25/08/2013, 14:57
Link del Forum: www.brunino.altervista.org/
Località: Toscana
Contatta:

Creare un'estensione (guida base)

Messaggio da brunino »

La base per sviluppare un'estensione é scegliere i nomi delle directory che la ospiteranno. esempio ext/staffit/toptentopics
All'interno di quella cartella vanno tutti i file dell'estensione.
Il primo file da creare obbligatoriamente é il composer.json va messo nella directory della nostra estensione e va compilato come segue:

Codice: Seleziona tutto

 {
    "name": "staffit/toptentopics",
    "type": "phpbb-extension",
    "description": "Aggiunge un box nell'indice con ultimi topic, topic più visti e ultimi post",
    "homepage": "https://brunino.altervista.org",
    "version": "0.1.0-a1",
    "time": "2014-11-10",
    "license": "GPL-2.0",
    "authors": [
        {
            "name": "brunino",
            "email": "brunino@altervista.org",
            "homepage": "http://www.brunino.altervista.org",
            "role": "Developer"
        },
 {
            "name": "Carlo",
            "email": "carlo@phpbbitalia.net",
            "homepage": "http://www.phpbbitalia.net",
            "role": "Helper"
        }, 
        {
            "name": "Micogian",
            "email": "giannidose@tin.it",
            "homepage": "http://www.actafungorum.org/actaforum/",
            "role": "Previous Developer"
        }
    ],
    "require": {
        "php": ">=5.3"
    },
    "extra": {
        "display-name": "Top Ten Topics",
        "soft-require": {
             "phpbb/phpbb": "3.1.*@dev"
        },
        "version-check": {
            "host": "brunino.altervista.org",
            "directory": "/version/",
            "filename": "toptentopics.json"
        }
    }
}

A questo punto inizia lo sviluppo vero e proprio.

MODIFICHE AI TEMPLATE
con le estensioni non si può più andare a pescare un punto dei ttemplate e aggiungere/rimuovere/cambiare una parte del codice bensì bisogna usare gli eventi proposti da phpbb e che trovate qui: https://wiki.phpbb.com/Event_List#Template_Events
[se non trovate un evento che vi serve dovete richiederlo e sperare che lo inseriscano nella prossima versione phpbb]
gli eventi servono per aggiungere codice ai template.
per eseguirne uno è sufficiente creare un file directory_tua_estensioe/styles/all/template/event/nome_evento.html e all'interno mettere il codice da aggiungere.

MODIFICARE PHP
Le problematiche nascono se si vuol modificare php.
Anche in questo caso c'é una lista di eventi utilizzabili. Questa volta bisogna creare alcuni file in base a cosa si deve fare.
un file necessario é il config/services.yml
Qui bisogna specificare le variabili che ci serviranno nel php (es $db per le query sql, $template per passare dati da php a template).
Esempio di services.yml

Codice: Seleziona tutto

 services:
    phpbbitalia.topten.listener:
        class: staffit\toptentopics\event\listener
        arguments:
            - @dbal.conn
            - @template
            - @auth
            - @user
            - %core.root_path%
            - %core.php_ext%
        tags:
            - { name: event.listener }

ATTENZIONE=nelle versioni recenti di phpbb è necessario racchiudere le variabili "arguments" dagli apici, altrimenti non funziona.

Codice: Seleziona tutto

 services:
    phpbbitalia.topten.listener:
        class: staffit\toptentopics\event\listener
        arguments:
            - '@dbal.conn'
            - '@template'
            - '@auth'
            - '@user'
            - '%core.root_path%'
            - '%core.php_ext%'
        tags:
            - { name: event.listener }

Gli eventi php li gestiamo nel file event/listener.php vediamo come:

Codice: Seleziona tutto

 <?php
namespace staffit\toptentopics\event;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class listener implements
EventSubscriberInterface{
protected $db;
//protected $table_prefix;
//protected $request;
//protected $search_engines;
protected $template;
protected $auth;
protected $user;
protected $root_path;
protected $phpEx;

//costruttore
public function __construct(\phpbb\db\driver\driver_interface $db, \phpbb\template\template $template, \phpbb\auth\auth $auth, \phpbb\user $user, $root_path, $phpEx) 
{
   $this->db = $db;
   $this->template = $template; 
   $this->auth = $auth;
   $this->user = $user;
   $this->root_path = $root_path;
   $this->phpEx   = $phpEx ;
}

static public function getSubscribedEvents()	{		return array(			'core.user_setup'						=> 'mia_funzione',					);	}	
public function mia_funzione($event)	{		
//codice da eseguire nell'evento
//return $event
}
}

Nella prima parte definiamo le variabili che già abbiamo richiesto nel services così
protected $db;
poi dobbiamo creare il costruttore sempre per definire quelle variabili.
tutte le variabili infatti in phpbb3.1 sono passate da $db->sql_query a $this->db->sql_query e così anche per user e template ecc...
E poi definiamo gli eventi che vogliamo usare e cosa far eseguire per ognuno di essi. Esattamente definiamo l'evento e gli associamo una nuova funzione che andiamo a creare sotto. La funzione avrà come unico parametro $event nel quale verrà passato qualcosa in base all'evento come scritto nella lista.

Qui non ho ancora scritto come creare una pagina personalizzata, moduli PCA e modificare il database perché ancora neanche io l'ho capite benissimo.
Spero vi sia utile.
Qualsiasi domanda é accetta.

Questa guida non é completa... per vedere la guida completa (in sviluppo ma quasi del tutto finita) vai qui
Brunino phpBB3 Area 51 » Forum di Test, Richiesta, Sviluppo e Supporto di estensioni, stili e guide esclusive per phpBB3 (soprattutto phpBB 3.1+)

E' sempre gradito un grazie
Avatar utente
alex75
Amministratore
Amministratore
Messaggi: 6268
Iscritto il: 23/08/2012, 23:45
Link del Forum: www.phpbb-italia.it
Località: Palermo

Re: Creare un'estensione (guida base)

Messaggio da alex75 »

Ottima guida...
ho già fatto qualche prova; devo dire che sembra un pò limitante poter inserire parti di codice al template, soltanto dove vi sia un evento.
Riguardo la guida, rende perfettamente l'idea di come funzioni :clapi:
Regolamento Forum
Le nostre guide
Se l'assistenza prestata è stata di tuo gradimento potrai contribuire aiutandoci a sostenere le spese affrontate per tenere in vita questo forum >Cliccando sul seguente Link<
Avatar utente
brunino
Utente
Utente
Messaggi: 194
Iscritto il: 25/08/2013, 14:57
Link del Forum: www.brunino.altervista.org/
Località: Toscana
Contatta:

Re: R: Creare un'estensione (guida base)

Messaggio da brunino »

Sono contento che sia stata usata e compresa :)
Brunino phpBB3 Area 51 » Forum di Test, Richiesta, Sviluppo e Supporto di estensioni, stili e guide esclusive per phpBB3 (soprattutto phpBB 3.1+)

E' sempre gradito un grazie
Rispondi