Joomla! - Upload field per contact form

google-plus Scritto da . Postato in Joomla!

Tags: joomla 2.5 joomla 3 plugin com_contact

Molto probabilmente, se usate Joomla!, avete affrontato il problema di inserire campi aggiuntivi nel contact form del componente com_contact.

Cercando su Google, mi è capitato di vedere che in molti si sono cimentati nel tentativo di creare un upload field senza ricorrere a componenti o plugin di terzi che sostituissero il componente com_contact di Joomla!

Caso strano, è che se anche Joomla! è predisposto per accettare plugin di tipo content che aggiungano campi dinamicamente alla form dei contatti, secondo la mia esperienza, questi non sembrano funzionare.

Infatti per creare un plugin gruppo content e inserire un nuovo campo nel form, bisogna agire sul file components/com_contact/models/forms/contact.xml di Joomla!. Mi spiego meglio:

Per dare modo a Joomla! di inserire nella parte inferiore del form il codice necessario per descrivere il campo che si desidera aggiungere, un ipotetico plugin (come spiegato dalla guida della comunity) lavorando secondo il trigger onContactPrepareForm, dovrebbe aggiungere il codice innestato nel file xml in esso contenuto, al file contact.xml di Joomla!. Ma così sembra non essere.

Modifica del file contact.xml

Per questo primo passo da compiere è aggiungerlo direttamente a mano nel file contact.xml: Aprite il file e prima del campo captcha inserite il seguente codice:

<fieldset name="uploadfield" label="Allega file">
                <field
                        name="contact_upload"
                        type="file"
                        id="contact_upload"
             description="COM_CONTACT_UPLOADLABEL"
                        label="COM_CONTACT_UPLOAD"
                />
</fieldset>

Ora il campo sarebbe fisicamente visibile nella form.

Modifica del file contact.php

Ma perché il tutto funzioni e il file in upload non sia caricato sul server e poi vi rimanga (infatti così facendo l'upload lo porterebbe solo all'interno del vostro spazio dominio), dovete aprire il file components/com_contact/controllers/contact.php e prima della riga.

 $sent = $mail->Send();

aggiungere:

$mail->addAttachment($data['contact_upload']);

Ciò fa in modo che al messaggio spedito, venga aggiunto come allegato il file che è stato caricato attraverso il campo di upload.

Aggiungere le chiavi di lingua

Ora mancano le chiavi di lingua, etichetta e descrizione del campo: Aprite il file language/it-IT/it-IT.com_contact.ini e in fondo ad esso aggiungete le seguenti chiavi (copia/incolla):

COM_CONTACT_UPLOADLABEL="Allega un file"
COM_CONTACT_UPLOAD="Seleziona file"

Al contrario di quello che si può pensare, non bisogna agire sulla view default_form.php aggiungendo fisicamente il campo con il codice php, anche se penso funzioni ugualmente. Già con i passaggi descritti il campo comparirà nel form.

Override della view contact

Comunque, perché l'upload funzioni, bisogna comunque fare l'override ( potrebbe essere utile la lettura dell'articolo sull'override ) del file components/com_contact/views/contact/tmpl/default_form.php. Andando nella cartella del vostro template, (es. templates/vostro_template) create la cartella "html" se già non esiste e al suo interno la cartella com_contact/contact e all'interno copiate il file default_form.php menzionato prima. Apritelo e nel tag <form ... > aggiungete il seguente attributo:

enctype="multipart/form-data"

Ora, perché il tutto funzioni, manca il plugin che ho prelevato dal sito rupostel.com soluzione interessante, ma il plugin non funzionava in fase di upload e lo ho leggermente modificato.

Scaricare e installare il plugin

Il plugin, lo potete scaricare da qui:

Una volta scaricato, installatelo in Joomla da Estensioni > Gestione > Installa > Installa da file - pacchetto compresso

Aggiornamento:

A seguito di una segnalazione, ho notato che il plugin non effettuava più l'upload dei file in quanto non riusciva a creare la cartella temporanea per lo stoccaggio del file prima dell'invio.

Per ovviare al problema, indico i seguenti passaggi e modifiche da fare al file attachment.php contenuto nella cartella plugins/contact/attachment:

Sostituisci la costruzione della variabile $dir con: 
 
$dir = JPATH_BASE.DS.'upload'.DS;
 
Commentare o elimina la riga:
 
JFolder::create($dir);
 
Creare manualmente la cartella upload nella root di Joomla.    

Questo farà in modo che non venga creata una directory per ogni file in upload come prima prevedeva il plugin, bensì i file inviati dagli utenti del sito verranno tutti salvati nella cartella "upload" da noi creata.

Una volta seguita la guida, installato, attivato e modificato il plugin, i file uplodati dalla contact form verranno messi nella cartella upload della vostra installazione Joomla! oltre che reindirizzati nella vostra casella mail.

Come potete leggere sul sito di origine, il plugin non è stato realizzato con particolari misure di sicurezza. Quindi usatelo a vostro rischio e pericolo. Sarebbe da modificare introducendo un filtro sulle possibili estensioni in upload e utilizzando le classi che Joomla! mette a disposizione per l'upload dei file.

Se hai gradito l'articolo, condividilo, basta un click:

Commenti   

Daniele Gagliardi
0 #2 Daniele Gagliardi 2019-11-07 09:41
Citazione Gianni:
Ciao
Ho fatto tutto quello che mi ha detto, ma non funziona, come mai?
DIpende dalla versione di Joomla?
Grazie per la risposta

Ciao Gianni, ti ho risposto via mail
Citazione
Gianni
0 #1 Gianni 2019-11-05 09:47
Ciao
Ho fatto tutto quello che mi ha detto, ma non funziona, come mai?
DIpende dalla versione di Joomla?
Grazie per la risposta
Citazione

Aggiungi commento


Codice di sicurezza
Aggiorna

  • logo teoca
  • logo arcotraslochi
  • materexcel collabora
  • koilab japan and tropical fish farm
  • logo flash pulizie
  • revolution srl
  • logo planetkoi small
  • logo elevatori sito
  • logo finiture
  • logo prontopro
  • montaggio mobili trento

Realizzato da: Daniele Gagliardi
Viale Monache 3 - 38062 Arco - TN
- Contattami -

Per essere più facile ed intuitivo, il blog fa uso dei cookie, piccole porzioni di dati che consentono di capire come gli utenti navighino e ne visualizzino le pagine. I cookie non registrano alcuna informazione personale sull'utente ed eventuali dati identificabili non verranno memorizzati. La nostra Privacy Policy è cambiata (11/09/2019): Ti invitiamo a prenderne visione. Oppure visiona la nostra Cookie Policy (aggiornata il 17/10/2019):