Questo post è diretta conseguenza della mia pignoleria. Come scritto in precedenza sono un accanito cinefilo e amo tenere in ordine la mia collezione privata. Proprio per questo utilizzo GCstar per gestirla e GCweb per visualizzarla da browser.
Però con le funzioni avanzate messe a disposizione da GCstar e qualche "magheggio" in GCweb è possibile creare del campi personalizzati e poi visualizzarli: ad esempio la posizione fisica del film nella libreria o qualsiasi altra cosa che più preferite. Fortunatamente lo sviluppatore di GCstar ha previsto questa opzione e creare un campo personalizzato è estremamente semplice ( o come direbbero gli americani "piece of cake" 😉 ). Invece per adattare GCweb bisogna mettere mano al codice PHP e aggiungere delle righe.
Passiamo quindi alla pratica. Aprite GCstar andate in Modifica -> Cambia campi della collezione e aggiungete i campi che più preferite, io ad esempio ho inserito il campo "posizione". Dovo aver dato un etichetta al campo definite il tipo di dato che il campo dovrà contenere ( numero, stringa, bool, ecc. ), lasciate "User fields" come gruppo. Potrete inserire dei parametri aggiuntivi e opzionali che varieranno a seconda del tipo di dato. Ad esempio con un numero potrete scegliere a priori il valore di default o impostare un range di validità. Ovviamente tutte queste opzioni dipendono dalla tipologia di informazione che volete salvare nel campo.
Ora nella scheda di ogni elemento potrete trovare sotto la tab User Fields i campi da voi aggiunti.
Adesso un po' di spiegazioni su come GCstar archivia le informazioni. Sfortunatamente questo programma non fa uso di un database, ad esempio SQLlite, per memorizzare le informazioni a livello fisico. Utilizza semplicemente un file di testo, che ha una struttura molto simile ad un file XML. Questo significa che tutte le informazioni salvate sono disposte tra due tag. GCweb quindi non fa altro che "strippare" i tag e si crea degli array in cui è contenuta l'informazione. Quindi per visualizzare i nuovi campi inseriti su GCweb dovremmo inserire il nome del campo nell'array, in modo che l'informazione contenuta nel campo possa essere salvata nell'array e poi visualizzata.
Il nome del campo tuttavia non è uguale al nome dell'etichetta che diamo al campo stesso. Questo si chiamerà "gcfieldX", dove con la X si indica un numero progressivo. Per trovare il nome effettivo corrispondente all'etichetta inserita dovrete aprire il file .gc ( ossia il file della collezione ) e alla riga 12 troverete tutti i campi personali inseriti. Alla voce "displayedname" si trova il nome dell'etichetta da voi inserito, mentre alla voce "value" si trova il nome effettivo del campo. Segnatevi quest'ultimo ed aggiungetelo al file filetype.php, che trovate nella cartella /conf di GCweb. Andate nel blocco GCfilm, se state lavorando con una collezione di film, altrimenti trovate il blocco corrispondente al tipo di collezione in cui volete inserire i campi personalizzate. Qui inserite il nome del campo ( quindi gcfield1 ad esempio ) nell'array corrispondente al tipo di dato alla quale il campo fa riferimento. Se si tratta di un numero scrivete gcfieldX in numeric, se stringa in string, e così via. Salvate e chiudete il file.
Ora per ogni elemento delle collezione il programma non dovrà far altro che trovare il tag del campo personalizzato, catturare il valore memorizzato ( c'è giù una procedura che fa questo 😀 ), inserirlo nell'array e poi visualizzare il campo nelle informazioni relative all'elemento selezionato. Ecco un esempio:
Ora però bisogna sporcarsi le mani, ed aggiungere un paio di righe nei file php adibiti a visualizzare le informazioni ( quindi sappiamo già che dovremmo piazzare qualche echo ). 😀
Per prima cosa posizionatevi nella cartella /templates/default/, sempre se utilizzate il tema di default.
Apriamo nel nostro editor di testo i file item_GCfilms.php e list_GCfilms.php. Nel primo file andiamo alla riga 92 e notiamo che le righe che seguiranno saranno quelle responsabili alla visualizzazione delle informazioni sull'elemento. Ora aggiungiamo una cosa simile a questa ( io la ho piazzata alla riga 116 ):
if (test($item['gcsfield4'])) echo '<br><li><span>'.__('Raccoglitore').' : </span><span>'.filter('gcsfield4==',$item['gcsfield4']).'</span></li>'; if (test($item['gcsfield3'])) echo '<li><span>'.__('Posizione').' : </span><span>'.$item['gcsfield3'].'</span></li><br>';
Queste due righe vengono visualizzate in due modi distinti. La prima visualizza una stringa che indica il raccoglitore in cui si trova il DVD, ma nello stesso tempo è un link che, se premuto, visualizza tutti i film nello stesso raccoglitore. La seconda riga invece visualizza solo la posizione, e non fornisce nessun link.
Andate poi nel secondo file ( list_GCfilms.php ) e aggiungete le stesse righe ( io le ho aggiunte alla riga 60 ):
<?php if (test($item['gcsfield4'])) {?> <li><span><?php echo __('Raccoglitore') ?> :</span> <span><?php aff_filter('gcsfield4==',$item['gcsfield4']) ?></span></li><?php } ?> <?php if (test($item['gcsfield3'])) {?> <li><span><?php echo __('Posizione') ?> :</span> <span><?php echo $item['gcsfield3'] ?></span></li><?php } ?>
Allo stesso modo potrete aggiungere qualsiasi campo personale da voi creato. 😉 Ovviamente questo lo potete fare per ogni tipologia di collezione: videogiochi, libri, film. Dovrete solo editare i file corretti. 😉