SMItalia Italian SMF Mods
23 Maggio 12, 15:27:39 *
Benvenuto, Visitatore. Per favore, effettua il login o registrati.
Hai perso la tua email di attivazione?

Login con username, password e lunghezza della sessione
News: "C'è un vero Progresso solo quando i Vantaggi di una Nuova Tecnologia sono per Tutti"
 
  Home   Forum   Help Login Registrati  
Pagine: [1]   Vai Giù
  Stampa  |  Bookmarks  
Autore Topic: [DOC] package-info.xml  (Letto 705 volte)
0 Utenti e 1 Visitatore stanno guardando questo topic.
Emanuele
Supporter
***
Offline Offline

Posts: 2.639

SMI Staff


Guarda Profilo
« il: 22 Maggio 10, 13:42:30 »

SoldatoLego, nella sezione italiana del forum di SMF ha chiesto se esistevano info su come realizzare mod in italiano. Non essendo al corrente della risposta ho iniziato a scrivere un po' di quello che so (o credo di sapere Tongue), al momento ho coperto il file package-info.xml che è quel file che "istruisce" il package manager di SMF su come installare e disinstallare un mod.

Ho pensato potesse essere utile riportare quelle informazioni anche qui.

Prerequisiti per creare un mod: un minimo di conoscenza di html, xml, php, mysql (in teoria questo potrebbe non essere vero, ma diciamo che fa bene) e css.

In ogni mod, i passi che SMF deve fare per installarlo sono descritti nel file package-info.xml. Si tratta di un file xml che contiene tutte le informazioni riguardo alle modifiche, al codice che devono essere eseguite ed ai file che devono essere inseriti durante l'installazione o rimossi durante la disinstallazione.
Un esempio:
Codice:
<?xml version="1.0"?>
<!DOCTYPE package-info SYSTEM "http://www.simplemachines.org/xml/package-info">
<package-info xmlns="http://www.simplemachines.org/xml/package-info" xmlns:smf="http://www.simplemachines.org/">
<id>emanuele:DemoPack</id>
<name>Package dimstrativo</name>
<version>1.0</version>
<type>modification</type>

<install for="1.1.*">
<readme parsebbc="true">readme.txt</readme>
<code>install.php</code>
<modification type="file">install.xml</modification>
<require-file name="demomod_admin.php" destination="$sourcedir" />
<require-dir name="demomod" destination="$boarddir" />
<require-file name="demomod_admin.template.php" destination="$themedir" />
</install>
<uninstall for="1.1.*">
<code>uninstall.php</code>
<modification reverse="true">install.xml</modification>
<remove-file name="$sourcedir/demomod_admin.php" />
<remove-dir name="$boarddir/demomod" />
<remove-file name="$themedir/demomod_admin.template.php" />
</uninstall>

</package-info>

Analizziamolo pezzo a pezzo.
La prima parte è quella che descrive il mod:
Codice:
<?xml version="1.0"?>
<!DOCTYPE package-info SYSTEM "http://www.simplemachines.org/xml/package-info">
<package-info xmlns="http://www.simplemachines.org/xml/package-info" xmlns:smf="http://www.simplemachines.org/">
<id>emanuele:DemoPack</id>
<name>Package dimstrativo</name>
<version>1.0</version>
<type>modification</type>
le prime tre righe sono generiche e sempre uguali.
Poi ci sono i seguenti tag:
  • id: contiene un identificativo "unico", le indicazioni dicono che dovrebbe essere composto dal nome (o nick) dell'autore e il nome del mod separati da un ":".
  • name: contiene il nome del mod
  • version: contiene la versione del mod
  • type: onestamente l'ho sempre lasciato così...posso immaginare che serva per distinguere i mod dai temi...credo.
Nella seconda parte ci sono le istruzioni vere e proprie per l'installazione:
Codice:
<install for="1.1.*">
<readme parsebbc="true">readme.txt</readme>
<code>install.php</code>
<modification type="file">install.xml</modification>
<require-file name="demomod_admin.php" destination="$sourcedir" />
<require-file name="demomod_admin.template.php" destination="$themedir" />
<require-dir name="demomod" destination="$boarddir" />
<redirect url="$scripturl?action=admindemo" timeout="5000">endinstall.html</redirect>
</install>
La prima riga definisce per quale versione di SMF vale l'installazione seguente, in questo caso avendo indicato for="1.1.*" gli dico che le istruzioni valgono per tutte le versioni di SMF 1.1, dalla 1.1.1 alla 1.1.11 (attualmente l'ultima). Questa soluzione ti permette di creare più blocchi con le istruzioni per installare su più versioni, ad esempio potresti fare:
Codice:
<install for="1.1.*">
[...]
</install>
<install for="2.0 RC3">
[...]
</install>
cosi sarà possibile mettere nel primo blocco le istruzioni per l'installazione su SMF 1.1.x e nel secondo le istruzioni per l'installazione su SMF 2.0 RC3, ecc.

Nelle righe successive ci sono i tag:
  • readme: contiene il nome di un file in cui puoi inserire informazioni riguardo il tuo mod. Il parsebbc="true" indica che se quel file conterrà dei tag bbc questi verranno interpretati come se si trattasse di un normale post.
  • code: contiene il nome di un file php. Questo file php conterrà delle istruzioni, ovviamente in php, da eseguire durante l'installazione (solitamente viene utilizzato se il mod richiede modifiche al database).
  • modification: contiene il nome di un file xml che a sua volta conterrà le istruzioni su come modificare i file di SMF veri e propri (oggetto di un prossimo post).
  • require-file: nome (ed eventuale percorso) di un file da copiare da qualche parte nella struttura delle cartelle di SMF. Nell'esempio sopra, il file demomod_admin.php verrà copiato nella cartella "Sources". Oppure il file demomod_admin.template.php verrà copiato nella cartella del tema di default: "Themes/default".
  • require-dir: simile al precedente, solo riferito ad una cartella. Nell'esempio verrà creata una cartella demomod nella radice del forum (ad esempio www.miosito.it/forum/).
  • redirect: formato da 2 parti:
    • endinstall.html: è un file che viene mostrato alla fine dell'installazione
    • url e timeout: sono rispettivamente un percorso a cui si verrà reindirizzati alla fine dell'installazione dopo un certo periodo di tempo definito in millisecondi nel parametro timeout.
Di tutti questi l'unico veramente indispensabile è il tag modification. Tutti gli altri sono opzionali e non è necessario che vi siano affinché il mod funzioni correttamente (ovviamente dipende da cosa il mod deve fare).

Infine l'ultimo blocco definisce le operazioni per la disinstallazione:
Codice:
<uninstall for="1.1.*">
<code>uninstall.php</code>
<modification reverse="true">install.xml</modification>
<remove-file name="$sourcedir/demomod_admin.php" />
<remove-dir name="$boarddir/demomod" />
<remove-file name="$themedir/demomod_admin.template.php" />
</uninstall>
La struttura è molto simile al blocco d'installazione, cambiano i nomi e la struttura di alcuni tag (in particolare quelli per rimuovere i file e le cartelle, che diventano "remove-file/dir" e in cui appare l'attributo (? non son sicuro della terminologia xml...) name in cui verrà indicato il percorso ed il nome del file da rimuovere). Da notare che al tag modification è stato aggiunto reverse="true" che indica al package manager di SMF che per effettuare la disinstallazione dovrà fare l'esatto contrario di quanto è indicato nel file xml (che per inciso è lo stesso indicato nel blocco "install"). Similmente all'install, nella prima riga si può specificare la versione di SMF per cui la disinstallazione è pensata e similmente all'install è possibile creare più blocchi per definire diverse procedure di disinstallazione per differenti versioni di SMF.

E per il file package-info.xml mi pare sia tutto.
Per quanto ne so, quanto ho appena scritto permette di creare mod compatibili con tutte le versioni di SMF dalla 1.1 in poi. Per la 1.0 non saprei, ma credo interessi relativamente poco. Grin
Domande, errori, ecc., dite la vostra. Smiley
Loggato

Se vedo "urgente" nell'oggetto rispondo il giorno dopo.
Se ricevo un PM per sollecitare rispondo due giorni dopo. (e chi mi manda il PM finisce nella ignore list)

Aiutateci ad aiutarvi: spiegate bene il vostro problema!! (no, "non funziona" non è una spiegazione!)
Emanuele
Supporter
***
Offline Offline

Posts: 2.639

SMI Staff


Guarda Profilo
« Risposta #1 il: 06 Luglio 11, 21:02:47 »

La principale differenza tra il package-info.xml per SMF 1.x e quello per SMF 2.x è rappresentata dal tag <database> che va a sostituire il tag <code> d'ora in poi deprecato.

Come funziona il tag <database>?
Risulta essere molto simile al tag <modification>, vediamo come diventerebbe il precedente esempio aggiornato a SMF 2.x.
Per SMF 1.x avevamo:
Codice:
<install for="1.1.*">
[...]
<code>install.php</code>
[..]
</install>
<uninstall for="1.1.*">
<code>uninstall.php</code>
[...]
</uninstall>

Per SMF 2.x questo diventerà:
Codice:
<install for="2.*">
[...]
<database>install.php</database>
[..]
</install>
<uninstall for="2.*">
<database reverse="true">install.php</database>
[...]
</uninstall>
Quindi, come potete vedere, senza addentrarmi nel perché (dettagli a richiesta), non serve più lo script uninstall.php, ma si usa lo stesso script indicando nel tag <database> reverse="true", che quindi "dice" al package manager di applicare le modifiche al contrario (quindi se in install.php c'è l'istruzione per aggiungere una tabella durante la disinstallazione il packagemanager cancellerà quella tabella (sempre che venga esplicitamente confermato durante la disinstallazione che si vogliono eliminare tutti i dati del mod dal database.
Loggato

Se vedo "urgente" nell'oggetto rispondo il giorno dopo.
Se ricevo un PM per sollecitare rispondo due giorni dopo. (e chi mi manda il PM finisce nella ignore list)

Aiutateci ad aiutarvi: spiegate bene il vostro problema!! (no, "non funziona" non è una spiegazione!)
ereduz
Jr. Member
**
Offline Offline

Sesso: Maschile
Posts: 61



Guarda Profilo
« Risposta #2 il: 19 Luglio 11, 11:04:35 »

Ciao eppure per la mod Tidy Child Board io non trovo questa differenza nel package-info:

Codice:
<install for="1.1 - 1.1.99">

<modification type="file">1-1-x/install11.xml</modification>

<modification type="file">1-1-x/11-core.xml</modification>

<modification type="file">languages/english.xml</modification>

<modification type="file">languages/english_british.xml</modification>

<modification type="file">languages/german.xml</modification>

<require-file name="tidyboards.css" destination="$themes_dir/default" /><!-- one specific place since it's entirely common! -->

<code>install.php</code>

</install>

Codice:
<install for="2.0 RC2, 2.0 RC3">

<modification type="file">2-0/install20.xml</modification>

<modification type="file">2-0/rc2-curve.xml</modification>

<modification type="file">2-0/rc2-core.xml</modification>

<modification type="file">languages/english.xml</modification>

<modification type="file">languages/english_british.xml</modification>

<modification type="file">languages/german.xml</modification>

<require-file name="tidyboards.css" destination="$themes_dir/default/css" /><!-- one specific place since it's entirely common! -->

<code>install.php</code>

</install>

come mai?
Loggato
Emanuele
Supporter
***
Offline Offline

Posts: 2.639

SMI Staff


Guarda Profilo
« Risposta #3 il: 19 Luglio 11, 11:27:42 »

Deprecato non significa che non funziona, significa solo che per i nuovi mod sarà caldamente consigliato l'utilizzo di database.

D'altronde il tag database è veramente utile solo quando si aggiungono campi o tabelle perché fornisce la possibilità automatica di rimuoverli durante l'uninstall senza dover creare uno script apposito.
In casi come questo invece i due tag sono sostanzialmente equivalenti dato che comunque è usato solo durante l'installazione del mod e l'unica cosa che fa è aggiungere un record a settings per la configurazione, nulla di più.
Loggato

Se vedo "urgente" nell'oggetto rispondo il giorno dopo.
Se ricevo un PM per sollecitare rispondo due giorni dopo. (e chi mi manda il PM finisce nella ignore list)

Aiutateci ad aiutarvi: spiegate bene il vostro problema!! (no, "non funziona" non è una spiegazione!)
Pagine: [1]   Vai Su
  Stampa  |  Bookmarks  
 
Salta a:  


+ Thread Correlati o Similari
Powered by MySQL Powered by PHP Powered by SMF 1.1.16 | SMF © 2011, Simple Machines | TinyPortal v0.9.7 © Bloc XHTML 1.0 Valido! CSS Valido!

Tutti i contenuti di SMItalia sono pubblicati secondo la licenza di utilizzo di Creative Commons, salvo diverse indicazioni. Lo Staff non assume alcuna responsabilità nel caso di eventuali errori contenuti negli articoli o di errori in cui fosse incorso nella loro riproduzione sul sito. Tutte le pubblicazioni su SMItalia avvengono senza eventuali protezioni di brevetti d'invenzione; inoltre, i nomi coperti da eventuale marchio registrato vengono utilizzati senza tenerne conto.

Pagina creata in 0.124 secondi con 26 queries.| ServerUptime: 288 days, 16 hours, 57 minutes