Come creare una Hack-Plugin-Product per vBulletin (fino a 3.8.x)

logo-vbulletin-articoli-klayz
Come creare una Hack-Plugin-Product per vBulletin – Guida Completa!

Volete creare una hack-plugin-product per vBulletin e non sapete come fare? Non c’è nessun problema, potete utilizzare questa guida completa per capire come fare! Continuate a leggere…

Introduzione

Molti utenti chiedono come creare una hack/product/plugin per vBulletin. Bene, in questo articolo vi guiderò nella creazione del vostro primo product. Attraverso la creazione di product e di plugin possiamo modificare il nostro forum aggiungendo, eliminando o modificando piccole cose (come ad esempio le funzioni della board stessa) oppure grandi cose (ad esempio aggiungere una chat scritta da noi all’interno del forum). Prima di iniziare però è bene specificare cos’è un product (“Prodotto”).

Cos’è un Product?

Un product è un file .xml che contiene del codice che una volta caricato nel sistema vBulletin viene eseguito aggiungendo opzioni al pannello admin, aggiungendo plugin, e tutto quello previsto dal codice al suo interno. A questo punto inoltre è bene specificare che un product è diverso da un plugin. Anche se spesso si usano entrambi i termini per dire la stessa cosa.

  1. Il Product: come detto, è un file .xml che viene caricato dal Pannello Amministratore o manualmente nella cartella /includes/xml.
  2. Il Plugin: è il codice PHP che viene eseguito dal vBulletin dove noi specifichiamo che venga eseguito.
  • Si crea un product quando si vuole in seguito pubblicare la propria modifica e renderla disponibile per altri.
  • Si crea un product quando si ha da aggiungere più plugin contemporaneamente.
  • Si crea un product attraverso un file .xml.
  • Si crea un plugin quando si vuole aggiungere del codice PHP alla propria board, usando gli hook di default.
  • Si crea un plugin quando si vuole aggiungerte del codice PHP alla propria board, usando hook creati e aggiunti da noi.
  • Si crea un plugin attraverso il pannello admin o attraverso il codice all’intero di un product.

Esempio: se devo pubblicare una hack che per funzionare dovrà andare ad aggiungere al sistema due plugin e delle frasi, creerò un product che, dopo essere stato uploadato nel sistema, mi inserirà in automatico il codice desiderato. Se invece devo inserire una linea di codice PHP nella mia board personale, nell’header, senza aver intenzione di pubblicare in seguito nessuna hack, agirò manualmente dal pannello admin nel pannello di Gestione Plugin.

Teoria

Dopo questa introduzione, possiamo passare alla teoria su come creare una hack/plugin/product per vBulletin. Recatevi nella cartella del vostro forum e aprite il seguente file: *forum*/includes/xml/hooks_vbulletin.xml. Vedrete questo codice qui:

<hooktype type="general">
        <hook>global_start</hook>
        <hook>global_complete</hook>     </hooktype>

Il primo tag: <hooktype type=”*”> è un nome unico che differenzia i tag <hook> al suo interno.

Cos’è un Hook?

Un hook è in teoria un “aggancio” all’intero di un file vBulletin. Un aggancio attraverso il quale possiamo far eseguire del codice nella posizione nel quale esso si trova. Ad esempio, un hook alla linea 10 del file index.php, ci permette di inserire del codice tramite plugin che verrà eseguito alla linea 10 del file index.php. Che differenza c’è dunque tra eseguire del codice attraverso un plugin/hook e eseguire del codice inserendo manualmente linee di PHP all’intero del file che vogliamo? Semplice. Con una modifica manuale al codice possiamo agire e far eseguire una linea (o più) di PHP dove vogliamo, in qualsiasi punto del file, con un plugin/hook possiamo eseguire il codice solo dove, rispettivamente (plugin/hook), esso si trova o dove esso deve trovarsi (vedi: aggiunta manuale di hook).

I tag <hook> fanno specifico riferimento al codice PHP all’interno dei file del vBulletin il quale si presenta in questo modo:

($hook = vBulletinHook::fetch_hook('global_start')) ? eval($hook) : false;

Notate come global_start è sia in un tag <hook> nel file hooks_vbulletin.xml sia nel codice PHP del file vB. Adesso, considerando che nel file global.php esiste un hook chiamato global_start, se vogliamo creare un plugin (tramite product, file .xml) che si va ad agganciare al file global.php, inseriremo questo codice:

<?xml version="1.0" encoding="ISO-8859-1"?>

<plugins>
    <plugin active="1" devkey="Il tuo Nome" product="vbulletin">
        <title>Titolo Plugin</title>
        <hookname>global_start</hookname>
        <phpcode><![CDATA[// // INIZIO CODICE PHP $variabile = "test"; // FINE CODICE PHP //]]></phpcode>
    </plugin>
</plugins>
  • <plugin active=”1″> – L’attributo ‘attivo’ determina il valore di default dell’impostazione “Il Plugin è Attivo”, nel pannello Gestione Plugin.
  • <title></title> – Si piega da solo, è il campo del titolo del plugin stesso.
  • <hookname></hookname> – La ‘Locazione Hook’ che vuoi selezionare.
  • <phpcode><![CDATA[ ]]></phpcode> – Tutto quello aggiunto dentro questo e il Codice PHP Plugin.

Ipotizzando dunque di salvare questo product.xml e di uploadarlo via admincp o via FTP direttamente nella cartella *forum*/includes/xml/, il nostro codice verrà eseguito nel file global.php quando questo raggiungerà questa linea:

($hook = vBulletinHook::fetch_hook('global_start')) ? eval($hook) : false;

Dunque, quel che abbiamo appreso è che noi possiamo creare un plugin attraverso un product (.xml). Il nostro plugin esegue del codice attraverso l’hook (<hookname>hook_name</hookname>) il quale si ripresenta nel codice PHP del file vBulletin, il quale a sua volta funziona solo se è anche presente nel file hooks_vbulletin.xml, che raggruppa tutti gli hook presenti nei file del vB.

Volendo in un product (.xml) si possono creare più plugin che eseguono codice su più file. Ecco qui un esempio di due plugin che agiscono sia sul file global.php sia sul file index.php:

<?xml version="1.0" encoding="ISO-8859-1"?>

<plugins>
    <plugin active="1" devkey="Il tuo Nome 1" product="vbulletin">
        <title>Titolo Plugin 1</title>
        <hookname>global_start</hookname>
        <phpcode><![CDATA[// // INIZIO CODICE PHP $variabile1 = "test1"; // FINE CODICE PHP //]]></phpcode>
    </plugin>
    <plugin active="1" devkey="Il tuo Nome 2" product="vbulletin">
        <title>Titolo Plugin 2</title>
        <hookname>forumhome_start</hookname>
        <phpcode><![CDATA[// // INIZIO CODICE PHP $variabile2 = "test2"; // FINE CODICE PHP //]]></phpcode>
    </plugin>
</plugins>

Ecco, quest’ultimo esempio esegue il codice quando il file global.php raggiunge questa linea:

($hook = vBulletinHook::fetch_hook('global_start')) ? eval($hook) : false;

.. e quando il file index.php raggiunge questa linea:

($hook = vBulletinHook::fetch_hook('forumhome_start')) ? eval($hook) : false;

E anche qui notate come l’<hookname>hook_name</hookname> nel plugin all’interno del product torna con il fetch_hook(‘hook_name’) all’interno del codice PHP del file vB che torna con l’<hook>hook_name</hook> presente nel file hooks_vbulletin.xml.

Inserire un plugin senza usare un product

Poco fa abbiamo detto come inserire uno o più plugin attraverso un product (.xml), adesso vedremo come inserire un plugin attraverso il pannello admin. Aptite il vostro AdminCp e recatevi a questa pagina: /admincp/plugin.php?do=add.

AdminCp -> Plugin & Prodotti -> Aggiungi Nuovo Plugin

  • Locazione Hook: questa è la specifica di dove verrà eseguito il codice PHP.
  • Titolo: il titolo del plugin stesso. Usate un nome che vi ricorderete in seguito, un nome che vi aiuti ad identificarlo.
  • Codice PHP Plugin: questo è il codice PHP del vostro plugin. Nota: non dovrete aggiungere i tag di apertura/chiusura (<?php / ?>). Quindi, questo sarà corretto:
$var = true;

E questo sarà incorretto:

<?php $var = true; ?>
  • Il Plugin è Attivo: da qui possiamo decidere se abilitare il plugin e farlo eseguire quando viene caricata la pagina, oppure se disabilitarlo temporaneamente senza doverlo per forza rimuovere del tutto.

Inserendo queste informazioni e premendo su Salva avremo aggiunto il nostro plugin manualmente dal nostro Pannello Admin.

Pratica

Adesso vederemo un esempio aiutandoci con una semplice hack sviluppata per vB-Italy.org. Prima di iniziare però, create sul vostro desktop un file chiamato product.xml. Apritelo con un semplice Notepad oppure con il vostro editor preferito. Al suo interno copia-incollate questo codice:

<?xml version="1.0" encoding="ISO-8859-1"?>

<product productid="*" active="1">
    <title>*</title>
    <description>*</description>
    <version>*</version>
    
 <plugins>
<plugin active="1">
        <title>*</title>
        <hookname>*</hookname>
        <phpcode><![CDATA[ * ]]></phpcode>
    </plugin>
 </plugins>
</product>

Ecco, adesso avete un codice di base ovviamente vuoto dove potrete personalizzare i campi contrassegnati con l’asterisco blu (*). Vediamo adesso la hack Gestione Account in Forumhome. Il product Forumhome – Account Manager (product) v1.10.xml‎ contiene questo codice:

<?xml version="1.0" encoding="ISO-8859-1"?>

<product productid="forumhome_accountmanager" active="1">
    <title>Gestione Account in Forumhome</title>
    <description>Questo prodotto aggiunge un box di gestione account nella vostra forumhome.</description>
    <version>1.0.0</version>
    <url />
    <versioncheckurl />
    <apm_releasedate>0</apm_releasedate>
    <apm_author />
    <apm_relatedurl />
    <apm_extrainfo />
    <apm_extraedit />
    <dependencies>
    </dependencies>
    <codes>
    </codes>
    <templates>
        <template name="forumhome_accountmanager" templatetype="template" date="1215006178" username="Norman" version=""><![CDATA[
<table class="tborder" cellpadding="6" cellspacing="1" border="0" width="100%" align="center">

<thead>

<tr align="center">



<td class="thead" colspan="5">
&nbsp;</td>

    </tr>



<tr>

<td class="tcat" colspan="5">

<a style="float:$stylevar[right]" href="#top" onclick="return toggle_collapse('accountmanager')"><img id="collapseimg_accountmanager" src="$stylevar[imgdir_button]/collapse_tcat$vbcollapse[collapseimg_accountmanager].gif" alt="" border="0" /></a>

        Gestione Sito

<div class="smallfont">Gestisci il tuo account</div>

    
        </td>

    </tr>


<tbody id="collapseobj_accountmanager" style="$vbcollapse[collapseobj_accountmanager]">

     <if condition="$show['guest']">

<tr align="center">


<td class="alt2" width="35" valign="top"><img src="$stylevar[imgdir_misc]/forumhome_account.png" alt="" border="0" /></td>


<td class="alt1Active" align="left">    

<div style="font-weight: bold; font-size: 10pt">Hey Visitatore!</div>



<div class="smallfont">Ciao visitatore, non sai cos'&egrave; questo? Questo &egrave; un pannello di gestione da quale potrai modificare le impostazioni del tuo account!
 
Per poterlo visualizzare devi registrati sul nostro forum.

<ul>
<li class="smallfont">apri nuovi thread</li>


<li class="smallfont">rispondi ai messaggi</li>


<li class="smallfont">modifica il tuo profilo</li>


<li class="smallfont">etc..</li>
</ul>

Stai ancora aspettando!? <strong><a href="register.php">Registrati adesso, &egrave; gratis!</a></strong>!
</div>

    
    </td>


</tr>

     <else />
     

<tr align="center">

<td class="alt2" width="35" valign="top"><img src="$stylevar[imgdir_misc]/forumhome_options.png" alt="" border="0" /></td>


<td class="alt1Active" align="left">

<div>
            <a href="usercp.php" target="_blank"><strong>Gestisci Account</strong></a>

        </div>


<div class="smallfont">Fai le tue modifiche: 
<a rel="nofollow" href="profile.php?do=editpassword">Modifica Account</a> | 
<a rel="nofollow" href="profile.php?do=editoptions">Modifica Opzioni</a> | 

<a rel="nofollow" href="profile.php?do=editprofile">Modifica Profilo</a> | 
<a rel="nofollow" href="profile.php?do=editavatar">Modifica Avatar</a> | 
<a rel="nofollow" href="profile.php?do=editprofilepic">Modifica Immagine</a> | 
<a rel="nofollow" href="profile.php?do=editsignature">Modifica Firma</a> 

Gestisci: 
<a href="private.php">Messaggi Privati</a> | 

<a rel="nofollow" href="subscription.php?do=viewsubscription">Guarda Sottoiscrizioni</a> | <a rel="nofollow" href="profile.php?do=buddylist">Contatti &amp; Amici</a> | <a rel="nofollow" href="group.php">Social Group</a></div>

    
    </td>


</tr>

     </if>


<tr>

<td class="tfoot" align="center" colspan="5">&nbsp;</td>


    </tr>

</tbody>

</thead>

</table>

]]></template>
            </templates>
    <plugins>
        <plugin active="1" executionorder="5">
            <title>ForumHome Account Manager (Cache)</title>
            <hookname>cache_templates</hookname>
            <phpcode><![CDATA[$globaltemplates = array_merge($globaltemplates, array('forumhome_accountmanager'));]]></phpcode>
        </plugin>
        <plugin active="1" executionorder="5">
            <title>ForumHome Account Manager</title>
            <hookname>forumhome_start</hookname>
            <phpcode><![CDATA[eval('$forumhome_accountmanager = "' . fetch_template('forumhome_accountmanager') . '";');]]></phpcode>
        </plugin>
            </plugins>
        <helptopics>
    </helptopics>
    <cronentries>
    </cronentries>
    <faqentries>
    </faqentries>
</product>

Vedete come per primo aggiunge un template chiamato forumhome_accountmanager. Tra i tag <![CDATA[ ]]> viene inserito tutto il codice HTML del template. Scorrendo giù vediamo la parte relativa ai plugin:

<plugins>
        <plugin active="1" executionorder="5">
            <title>ForumHome Account Manager (Cache)</title>
            <hookname>cache_templates</hookname>
            <phpcode><![CDATA[$globaltemplates = array_merge($globaltemplates, array('forumhome_accountmanager'));]]></phpcode>
        </plugin>
        <plugin active="1" executionorder="5">
            <title>ForumHome Account Manager</title>
            <hookname>forumhome_start</hookname>
            <phpcode><![CDATA[eval('$forumhome_accountmanager = "' . fetch_template('forumhome_accountmanager') . '";');]]></phpcode>
        </plugin>
            </plugins>

Inizialmente il template viene caricato in cache per ridurre il carico delle pagine, memorizzandolo nel sistema. Poi viene impostata una variabile: $forumhome_accountmanager. Attraverso questa variabile, potremo aprire un qualsiasi template presente nella forumhome e inserirci l’altro template presente nel product. Come? Inserendo la variabile $forumhome_accountmanager.

Dopo questo esempio passiamo ad una dimostrazione pratica che potrete effettuare sui vostri forum. Includeremo un file .php nell’header utilizzando un product.

Apriamo il nostro file sul desktop, precedentemente creato (product.xml). Il suo contenuto dovrà essere questo:

<?xml version="1.0" encoding="ISO-8859-1"?>

<product productid="prodotto_include_phpcodeheader" active="1">
    <title>Prodotto codice PHP nell'Header</title>
    <description>Questo prodotto richiama un file .php che verrà visualizzato nell'header.</description>
    <version>1</version>
    <plugins>
        <plugin active="1" executionorder="5">
            <title>File .php nell'Header</title>
            <hookname>global_start</hookname>
            <phpcode><![CDATA[ ob_start(); include('/sites/sito.com/htdocs/forum/file.php'); $variabile_file_php = ob_get_contents(); ob_end_clean(); ]]></phpcode>
        </plugin>
            </plugins>

</product>

Quindi modificatelo, cambiando se volete il nome dei plugin al suo interno. Inoltre modifichiamo la parte in blu con il percorso relativo del file ‘file.php‘ che adesso creeremo e inseriremo nella nostra cartella /*forum*/ con il seguente codice PHP:

 <?php echo 'Il testo del file php viene visualizzato nel template header'; ?> 

Avendo dunque sito.com/*forum*/file.php
Salviamo il produc.xml e il file.php uppato sul nostro sito.

Adesso possiamo caricare il nostro product.xml dal nostro AdminCp:

AdminCp -> Prodotti & Plugin -> Gestione Prodotti -> Carica Prodotto -> Sfoglia..

Una volta caricato, l’ultima cosa che dovremo fare per visualizzare il contenuto del file.php nel nostro header (o in qualsiasi altra parte noi vogliamo.. l’header è solo un esempio) sarà inserire la seguente variabile, impostata precedentemente nel plugin, nel template header:

$variabile_file_php

Inserendo questa variabile nella posizione che vogliamo nel template, nel nostro forum verrà visualizzato il contenuto del file.php. Inserendo tale variabile dopo questo codice (nel template header):

$spacer_open

Quindi adesso che sappiamo come includere del file PHP all’interno del nostro vBulletin, oppure inlcudere direttamente un file .php e il suo contenuto, non ci resta altro che sperimentare con i nostrri script per personalizzare il nostro vBulletin!

Bene, la guida è finita. 🙂

Nota: il sistema di Plugin può essere disabilitato dal pannello admin o manualmente con una modifica al file config.php. Per far si che i plugin inseriti funzionino, è ovviamente necessario accertarsi che il sistema sia abilitato.

Vedi anche:

 
0 Kudos
Non ti
muovere!

Condividi il Post