Joomla! - Upload field per contact form
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/
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:
Per ovviare al problema, indico i seguenti passaggi e modifiche da fare al file attachment.php contenuto nella cartella plugins/contact/attachment:
$dir = JPATH_BASE.DS.'upload'.DS;
JFolder::create($dir);
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.
Commenti
Ciao Gianni, ti ho risposto via mail
Ho fatto tutto quello che mi ha detto, ma non funziona, come mai?
DIpende dalla versione di Joomla?
Grazie per la risposta
RSS feed dei commenti di questo post.