Aggiungere campi personalizzati in joomla 2.5

Come abbiamo visto nell’ultimo tutorial, Visualizzare una lista degli utenti registrati con profilo e avatar, Joomla permette di estendere i 4 campi di default per un utente in qualcosa di più completo aggiungendo altre informazioni come indirizzo, città, cap, telefono, ecc…

Ma molti utenti hanno bisogno di personalizzare la proprio scheda di registrazione utenti, aggiungendo nuovi campi per profilare al meglio i propri utenti in base al tipo di sito. Ad esempio, nel tutorial precedente avevamo fatto l’esempio di un sito per una consulta universitaria, allora in questo caso io ho bisogno di aggiungere il campo “Ente di riferimento”, “Dipartimento”, “Responsabilità”, e così via. Proprio per questo oggi andremo a vedere come aggiungere infiniti campi senza, anche in questo caso, installare complicati plugin, ma basta editare un paio di file; questo, oltre a evitarci rompi capo nel cercare il plugin più adatto, ci permette di avere un controllo completo sui campi creati e inoltre avere una gestione completamente integrata in Joomla, lo stesso motore di ricerca interno al sito ad esempio è in grado di ricercare anche in questi nuovi campi, inoltre possono essere disabilitati, resi opzionali, o obbligatori ptoptio come per i campi di default e appariranno in front-end nella scheda contatto, come in fase di registrazione e di modifica da parte dell’utente. Insomma quello che andremo a vedere in questo tutorial sarà sicuramente di utilità a molti.

Step 1 – duplicare il plugin:

La prima cosa che andremo a fare sarà quello di duplicare il plugin User Profile, questo per evitare che al prossimo aggiornamento vengano sovrascritte le nostre modifiche, il tutorial si può applicare anche sul plugin originale, ma a vostro rischio e pericolo non dite che non vi ho avvertito (in ogni caso fate un backup prima di ogni aggiornamento):

  1. Quindi, creiamo una cartella sul nostro desktop e chiamiamola profile_v2
  2. Accediamo con il nostro FTP alle cartelle di Joomla sul nostro server, e andiamo in plugins/user/profile, copiamo tutti i file in locale nella cartella profile_v2 appena creata.
  3. Poi copiamo da administrator/language/en-GB i seguenti file:
  • en-GB.plg_user_profile.ini
  • en-GB.plg_user_profile.sys.ini
  1. Rinominiamo i file di lingua in en-GB.plg_user_profile_v2.in e GB.plg_user_profile_v2.sys.ini
  2. Il prossimo passo sarà quello di rinominare tutte le occorrenze di profile con profile_v2 nei file profile.xml e profile.php
    1. profile.xml
      Reinominiamo profile.xml in profile_v2.xml
      LINEA 3: <name>plg_user_profile_v2</name>
      LINEA 14: <filename plugin=”profile_v2″>profile_v2.php</filename>
      LINEA 19: <language tag=”en-GB”>en-GB.plg_user_profile_v2.ini</language>
      LINEA 20: <language tag=”en-GB”>en-GB.plg_user_profile_v2.sys.ini</language>
    2. profile.php
      Rinominiamo profile.php in profile_v2.php
      LINEA 18: class plgUserProfile_v2 extends JPlugin

Adesso creiamo un archivio ZIP di tutta la cartella profile_v2 e installiamo il nostro nuovo plugin profile_v2.zip da Gestione Estensioni come un normale plugin, dopodiché se è abilitato, disabilitiamo il plugin User Profile e abilitiamo il nostro User Profile_v2 appena installato.

Step 2 – un nuovo campo:

Il prossimo passo sarà quello di aggiungere un nuovo campo di testo, ad esempio il campo “Mobile” per inserire un ulteriore numero di telefono. Per prima cosa editiamo il file:

/plugins/user/profile_v2/profiles/profile.xml

All’interno del file XML, come possiamo notare, troviamo dichiarati tutti i campi attualmente disponibili per un’utente, ogni campo è identificabile dal tag <field …. />.

Nel punto dove più ci piace, ad esempio nel nostro caso sotto al field phone, per essere coerenti, inseriamo il nuovo campo Mobile, andando a scrivere questo pezzo di codice:

<field

name=”mobile

description=”Il tuo numero di telefonino

filter=”string”

label=”Mobile

message=”PLG_USER_PROFILE_FIELD_WEB_SITE_MESSAGE”

size=”30″

/>

Possiamo anche decidere di inserire una select, con alcune opzioni, in questo caso il codice sarà così:

<field
name=”pagamenti

description=”Dichiara se l’utente è in regola o no con i pagamenti

filter=”string”

label=”Pagamenti

message=”PLG_USER_PROFILE_FIELD_WEB_SITE_MESSAGE”

size=”30″

>

<option value=”in regola”>In regola</option>

<option value=”non in regola”>Non in regola</option>

</field>

In <option> inseriamo le varie opzioni, che possono essere più di 2, nell’esempio sopra abbiamo inserito un campo per identificare se l’utente è in regola o meno con i pagamenti.

Step 3 – configurazioni per il nuovo campo:

Ora rendiamo il nostro campo “configurabile” da back-end, ovvero come succede per gli altri user profile fields, inseriamo il codice necessario a configurare il campo come Opzionale, Obbligatorio o Disabilitato.

Editiamo il file:

plugins/user/profile_v2/profile_v2.php intorno alla riga 71 aggiungendo il campo “mobile” nell’arrey in questo modo:

$fields = array(
‘address1′,
‘address2′,
‘city’,
‘region’,
‘country’,
‘postal_code’,
‘phone’,
mobile’,
‘website’,
‘favoritebook’,
‘aboutme’,
‘tos’,
‘dob’,
);

Ora editiamo il file:

plugins/user/profile_v2/profile_v2.xml

in 2 punti:

  1. Per il form di registrazione e amministratore
  2. Per il form di modifica da parte dell’utente

Per il primo punto scriviamo intorno alla riga 100 questo codice:

<field “name”=register-require_mobile” type=”list”
description=”Il numero di telefonino
label=”Mobile
>
<option value=”2″>JOPTION_REQUIRED</option>
<option value=”1″>JOPTION_OPTIONAL</option>
<option value=”0″>JDISABLED</option>
</field>

Per il secondo punto nello stesso file intorno alla riga 320, o comunque nel punto dove più si addice in base al tipo di campo, è indifferente:

<field “name”=profile-require_mobile” type=”list”
description=”Il numero di telefonino
label=”Mobile
>
<option value=”2″>JOPTION_REQUIRED</option>
<option value=”1″>JOPTION_OPTIONAL</option>
<option value=”0″>JDISABLED</option>
</field>

Come vedete dall’immagine ora il campo è visibile anche per una configurazione da back end.

e ovviamente da front-end:

Ripetete i punti 2 e 3 per ogni campo che volete inserire.

Finito.

  • Gabriele

    Ciao, intanto grazie per questo tutorial. Premetto che di programmazione ne so davvero poco ma volevo fare una precisazione e contemporaneamente farti una richiesta d’aiuto.

    Nello Step 2 del tuo tutorial ho avuto la necessità di inserire un campo select con una lista di
    Per far effettivamente comparire la lista ho dovuto aggiungere:

    type=”list”

    e, nel caso si volesse dare l’opportunità all’utente di eseguire scelte multiple:

    multiple=”true”

    A parte questo… ora non ho errori, ho inserito il nuovo campo (anche nel backend) ma in fase di modifica di un profilo questo nuovo campo non viene assolutamente salvato (come funziona? non dovrebbe essere salvato nel db?) Se provo ad andare nel mio profilo utente e nel nuovo campo che ho creato assegno un valore dalla lista e poi clicco su SALVA mi esce l’avviso ‘Profilo correttamente salvato’ e vedo la mia pagina Profilo. In questa pagina, di fianco a MOBILE (il nuovo campo) esce la scritta Array…

    mi puoi aiutare?
    Grazie

    • Davide Calignano

      Fai delle prove con un campo di testo semplice e vedi se funziona. Fammi sapere.

  • Gabriele

    ok ho risolto, era il multiple=”true” che avevo aggiunto io che dava il problema.
    Ora vedo una lista con più opzioni, posso sceglierne una e viene regolarmente registrata.

    Io però avrei bisogno di consentire una scelta multipla… hai idee di come si possa fare?
    Con il multiple=”true” funziona la scelta multipla ma poi ti va a scrivere nel db ‘Array’

    • Davide Calignano

      Ciao Gabriele, prova a togliere filter=”string” quando utilizzi il multiple.

      Davide

  • Gabriele

    Ho provato ma non funziona. Se tolgo filter=”string” praticamente non inserisce il valore che seleziono e poi se vado in ‘Profilo’ vedo i valori sfalsati di 1.
    Per farti capire meglio:

    Categoria: (qui dovrebbe esserci il valore o i valori che scelgo)
    Indirizzo: Via Roma 11

    Senza il filter=”string” risulta così:

    Categoria: Via Roma, 11
    Indirizzo: Nessuna informazione inserita

  • Giuseppe

    Ciao, grazie per il tuo tutorial.
    Ho personalizzato questo modulo inserendo i campi a me necessari, cambiando anche le stringhe di testo, ma ho un problema con il campo per accettare le condizioni di utilizzo del sito: non visualizzo più il radio button per l’accettazione….al suo posto un semplice campo da compilare.
    Da back end è tutto come dovrebbe essere, posso disabilitare l’accettazione facendo scomparire il campo “accetta condizioni di utilizzo”.

  • Giuseppe

    ho risolto, mancava la cartella “fields” nel file xml, ho controllato nel file originale e manca anche li.

    fields

    Grazie mille lo stesso!

    • Giacomo

      Ho il tuo stesso problema .. come hai risolto non ho ben capito.. cos’è la cartella fields e come va aggiunta? Grazie in anticipo

      • http://www.hicsuntdracones.it Alex

        la cartella “fields” mancante non è nel file xml, la trovi in ftp nella cartella del plugin originale. la devi copiare quindi in FTP da “profile” a “profile_v2″. Alex

  • Antonio

    Ottima guida, ma penso manchino i riferimenti al database, non si deve modificare nulla?

    • Davide Calignano

      Ciao Antonio, no i campi sono “dichiarati” in dei file xml come spiegato, poi vengono riportati nel DB, ma è un processo che fa in automatico la piattaforma.

      Davide

  • Davide

    Buongiorno,
    inserendo un campo personalizzato (ad esempio numero tessera) con l’opzione required è attivo il controllo dei valori duplicati? Il numero della tessera deve essere univoco.

    Grazie davide

    • Davide Calignano

      Buongiorno, no, il campo è un semplice campo di testo. Dovresti agire sul codice per implementare un controllo lato db o php.

  • http://incostruzione Francesca

    Complimenti per i tutorial chiari e comprensibili anche per me che non conosco i linguaggi.
    Ti chiedo un aiuto poichè devo realizzare con urgenza un sito con joomla 2.5 nel quale inserire un form di ricerca personalizzato. Essendo un portale turistico il visitatore deve poter scegliere di fare una ricerca per località, categoria, sottocategoria o nome azienda. Joomla a un modulo di ricerca avanzata ma con parametri che non si possono modificare; ho anche cercato di risolvere il problema cercando nei forum ma nulla. Potresti aiutarmi? Credo che un tutorial sarebbe di aiuto a molti poichè da mesi che girovago sul web ed è un problema comune a molti. Grazie.

    • Davide Calignano

      Ciao Francesca e grazie, puoi provare ad utilizzare il componente k2 con modulo “JA K2 Filter and Search”. Il componente è un po’ ostico all’inizio, ma se impari ad utilizzarlo ti semplifica la vita.

      Davide

  • http://incostruzione Francesca

    Davide sai indicarmi dove poter cercare una guida per l’utilizzo del modulo indicato o la sua configurazione? devo installare k2 sul sito e poi il modulo?. Ti ringrazio scusandomi delle domande forse banali.

    • Davide Calignano

      Ciao Francesca figurati. Qui una guida: http://www.joomla.it/video-guide/4436-come-utilizzare-k2-per-joomla-15.html

      Si installa prima il componente e poi il modulo. Impara prima ad usare il componente, il mio consiglio è di installare il tutto su un’installazione di testing, in locale, in modo da non fare danni sul tuo sito. Se hai dimestichezza con joomla lo impari in un giorno anche senza guida.

      Ciao,
      D

  • http://incostruzione Francesca

    Buongiorno Davide, ti scrivo nuovamente dopo aver segnalato a molte persone il tuo sito e la tua disponibilità. Ho provato a vedere la guida attraverso il link che mi hai segnalato; tuttavia il modulo è acquistabile al costo di 30 euro circa con una documentazione da tradurre. Ti chiedo gentilmente se esiste un sistema alternativo. Coiè un modulo, plug-in o componente che dia la possibilità di effettuare una ricerca avanzata da front-end all’utente che imposti la ricerca sul sito in base ai criteri di ricerca. Come già detto in precedenza dovendo fare un sito turistico l’utente deve poter effettuare una ricerca per categoria (es. b&b, alberghi, agriturismi, ect.), località. Spero di esser stata chiara e confido in una tua risposta. Grazie F.

    • Davide Calignano

      Si ho capito, però con i moduli joomla standard non saprei darti. Prova a ricercare una discussione sul forum di joomla.it, oppure a creare una nuova. Io ti ho detto come l’avrei fatto io con k2 :)

      Davide

  • http://www.marcogarulli.com/hotel MARCO

    Salve ottima guida peccato che non mi funziona non mi fa installare il nuovo plugin mi da questo errore
    Fallito caricamento file XML
    C:xampphtdocsJoomla1tmpinstall_511376bcc55daprofile_v2/profile_v2.xml
    XML: AttValue: ” or ‘ expected
    XML: attributes construct error
    XML: Couldn’t find end of Start Tag filename line 14
    XML: Opening and ending tag mismatch: files line 13 and filename
    XML: Opening and ending tag mismatch: extension line 2 and files
    XML: Extra content at the end of the document
    JInstaller: :Install: Non è stato possibile trovare il file di setup XML di Joomla

    • salvo86roma

      Marco sono quasi sicuro che il tuo problema sono le virgolette che nel fare copia e incolla dal sito si impostano come virgolette di apertura e chiusura, devi modificare quelle che hai copiato e riscriverle “

  • Giacomo

    ERRORE.. ( quando provo ad istallare il plugin…)

    PLG_USER_PROFILE_XML_DESCRIPTION

    JInstaller: :Install: il file non esiste /web/htdocs/www.thecalabria.com/home/tmp/install_514c881b57db9/profile_v2.php

  • Giacomo

    ok risolto, avevodimenticato di rinominare un file :/

  • Alessandro

    Scusa io fatta tutta la procedura ma mi si legge in Inglese…come risolvo?
    Ancora grazie.

  • Federica

    ciao Davide, grazie per il 2 tutorial, è tutto molto chiaro !
    Ho un problema nella visualizzazione del singolo contatto. Ho duplicato il pugin user profile_v2 e inserito i nuovi campi e tutto funziona da back-end. Da front-end quando visualizzo per modificare il mio profilo è tutto a posto e mi fa vedere i campi aggiunti e posso modificarli; ma quando visualizzo la scheda contatto non stampa le informazioni del profile ma solo quelle del contatto. Con il vecchio user profile la scheda contatto invece funziona correttamente e visualizzo i campi di profile. Dove sbaglio?

    • Federica

      scusate, ma nessuno ha riscontrato il mio stesso problema ? Funziona tutto tranne la visualizzazione della parte relativa al profilo nella singola scheda di contatto. Eppure i dati sono inseriti… infatti li ritrovo modificando il profilo sia da front-end che da back-end. Non visualizzo i dati inseriti nel profilo solo nella scheda contatto ! Qualcuno sa indicarmi dove cercare l’errore ?
      grazie comunque ciao ciao

  • Federica

    Un’altra indicazione: se sovrascrivo il plugin user profile funziona tutto ! Ma poi al prossimo upgrade mi tocca rifare… Se invece mi faccio la copia del plugin come descritto… non visualizzo i campi del profilo (profile_v2) nella scheda contatto… :-(

    • Federica

      RISOLTO !
      La parte del PROFILE non veniva stampata nella scheda profilo utente perchè bisognava cambiare il nome del plugin da profile a profile_v2 anche nei file di visualizzazione del componente com_contact.
      Nello specifico io sono interventuta qui:
      ../com_contact/views/contact/tmpl/default.php
      e qui:
      ../com_contact/views/contact/tmpl/default_profile.php
      ed ho sostituito profile con profile_v2 così:
      JPluginHelper::isEnabled(‘user’, ‘profile_v2′))

      Spero che possa servire… a qualcun altro senza che stia ad impazzire…

      • Davide Calignano

        Ti ringrazio per la condivisone della risoluzione Federica! Sarà sicuramente di aiuto a molti.

        Davide

  • valerio

    ciao Davide, grazie delle informazioni.
    Avrei solo una domanda da farti: come dovrei modificare i files per aggiungere un campo di tipo Upload File?

    Grazie

  • Luca

    Ciao, io sto usando Joomla 3.0 e non so se è lo stesso, comunque non riesco a modificare i vari campi in front-end dal menù utente cliccando su Modifica Profilo. In pratica cliccandoci mi apre la schermata dove posso modificare i dati, poi unavolta modificati ricliccando su invia, mi restituisce il messaggio di Successo ma i campi rimangono vuoti (Nessuna informazione inserita). Ho fatto tutto quello che è stato spiegato. Qualcuno sa come fare? Grazie

  • Giuggiola

    Ciao,
    questi dati in quale tabella del database si salvano? Nella tabella “standard” jos_users non li vedo…
    Mi servirebbe sapere questo perchè dovrei esportare i dati periodicamente.

    ciao e grazie

  • Fabrizio

    Ciao Davide, Ottimo tutorial. Ora ho un piccolo problema, ma non riesco a far abilitare i termini di utilizzo. e Poi avrei necessuta di creare una check box con 3 possibili scente.

    Ciao grazie

    • Luitos

      Fabrizio,
      guarda bene.
      la soluzione è già riportata, per le scelte multiple, nel tutorial stesso e, per i termini di utilizzo, nell’intervento di Alex: cartella “fields” mancante.
      Ciao.

  • Luca

    Salve, utilissimo post!!!
    Premettendo di avere poche conoscenze di php e sql, volevo chiederti se era possibile inserire un campo per fare l’upload di un file.
    Avrei bisogno che l’utente in fase di registrazione possa inserire un pdf per il curriculum vitae.
    In modo da poterlo visualizzare successivamente nella scheda contatti, creata da me seguendo il tuo post precedente: Visualizzare una lista degli utenti registrati con profilo e avatar.
    Ti ringrazio in aticipo.
    Ciao.

  • Serena

    Buongiorno,

    sono una stra neofita di joomla e affini e sto provando a realizzare un sito web…(versione di prova all’indirizzo http://www.demoblueline1.joomlafree.it/ ) sono giorni che cerco su internet di capire come fare per far funzionare al meglio il plugin user_profile…provo a spiegarmi meglio: ho installato il template yougrids e creato il modulo contatti che “di serie” riporta solo alcuni campi quali nome, username, password, ecc, mentre io vorrei aggiungere altri obbligatori come indirizzo, città, cap, p.i. e via discorrendo….cercando sul web ho capito che esiste appunto il plugin user_profile che se attivato aggiunge a piacimento altri campi, volendo anche modificabili…il problema è che il template che sto utilizzando non ne vuole sapere di visualizzarli….ho provato a cambiare template e magicamente appaiono, solo che io vorrei continuare ad utilizzare yougrids e sto letteralmente impazzendo…qualcuno potrebbe aiutarmi per favore ?
    Grazie mille
    Serena

  • Stefano

    Salve, utilissima guida, vorrei sapere se fra questi campi potrei aggiungere la possibilità di caricare video da youtube e tracce da souncloud , vedo che in molti form c’è l’apposito spazio per inserire il codice video o il codice modulo che poi verrà implementato nel front-end. spero di essere stato chiaro grazie in anticipo.

    • Davide Calignano

      Si credo di si, in teoria in un text-field puoi inserire testo libero che può essere un codice. Non so dirti con certezza se richiederebbe qualche hack per non far pulire il testo dai tag html. Poi una volta che hai il testo lo puoi trattare come qualsiasi altro embed code.

  • Giuggiola

    Ciao,
    c’è la possibilità di suddividere il modulo di registrazione su 2 pagine? Cioè la parte del modulo standard (nome, username, email, password) nella prima pagina e quella generata con i campi personalizzati sulla seconda?
    grazie

  • mauro

    Ciao Davide stamattina ho scoperto il tuo sito. Sei stato bravissimo, perchè sono giorni che stavo cercando questo tipo di soluzione. Ho necessità di consentire anche l’upload di u file (curriculum in pdf). E’ possibile?

  • nicola

    Ciao Davide, ho seguito le istruzioni della tua guida ma non riesco a capire perché non vedo il campo aggiunto né in front-end né in back-end. Se disattivo il plugin profile_v2 e attivo quello di joomla, allora riesco a visualizzare tutti i campi standard in entrambi i casi, in “Modifica il tuo profilo”, da front-end sotto i campi di default (nome utente, email, password) vedo tutti i campi del plugin “Profilo utente” di joomla. Però se provo a disabilitarlo e attivo il tuo profile_v2 non li vedo più… Uso Joomla 3.3.6 – Cosa posso fare? Grazie

    • http://www.graphical.it Davide Calignano

      Ciao nicola, l’articolo si riferisce alla versione 2.5 di joomla, non funziona per la 3.x

      • nicola

        Che sfortuna!! Ma tu sapresti indicarmi un tutorial (in italiano, possibilmente) che spieghi bene come ottenere la stessa cosa della tua guida ma con Joomla 3.x?

        • http://www.graphical.it Davide Calignano

          Purtroppo non saprei dirti, ma ti consiglierei di cercare un componente che faccia già questo, con joomla 3, le cose sono migliorate parecchio

  • Ugo

    Salve Davide, ho cercato su internet senza trovare una risposta alla mia domanda legata a questo argomento: ho eseguito su un sito Joomla 2.5 la modifica al Profilo Utente come descritto nella tua guida.
    Ora ho la necessità di aggiornare Joomla alla versione 3.x.
    Che tu sappia le modifiche fatte allo User Profile sono totalmente incompatibili con Joomla 3? Non c’è verso di portarsele dietro durante l’upgrade?
    Chiedo ciò perchè provando ad effettuare l’upgrade, il sito ‘crasha’ alla selezione del menù di gestione utenti.
    Grazie e complimenti!

  • Federico Davolio

    Salve a tutti, ho provato la modifica sopra, ma se attivo i termini di utilizzo viene visualizzato un campo di testo, ho visto la soluzione proposta più in basso, ma non è quello il problema, la cartella fileds è presente nella cartella del plugin. Qualche idea?
    Grazie

  • http://www.ingrossofornitureantennistica.it Simone Cusano

    Salve
    Utilissima guida anche ben implementata dalle risposte degli utenti.
    Sono riuscito in tutto, ma ho solo un problema con l’utilizzo del tag “list” perchè a funzionare funziona, però mi appare una colonna lunghissima mentre io utilizzo solo 4 scelte.

    nel file profile.xml è presente solo l’attributo size che modifica la larghezza delle celle di solo testo. Quale attributo devo utilizzare nel mio caso?
    Grazie per eventuali consigli