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