Cont. - Add File Uploader to Joomla Admin ComponentComment enregistrer le nom du fichier téléchargé dans la base de données
Je pourrais télécharger le fichier et l'enregistrer sur le disque. Mais ce n'est pas son nom de fichier sur la base de données.
Comment puis-je le faire?
Voici le contrôleur -
class InvoiceManagerControllerInvoiceManager extends JControllerForm
{
function save(){
$file = JRequest::getVar('jform', null, 'files', 'array');
$path = JPATH_BASE;
// Make the file name safe.
jimport('joomla.filesystem.file');
$file['name']['invoice'] = JFile::makeSafe($file['name']['invoice']);
// Move the uploaded file into a permanent location.
if (isset($file['name']['invoice'])) {
// Make sure that the full file path is safe.
$filepath = JPath::clean($path. DS ."components". DS ."com_invoicemanager". DS ."files". DS .strtolower($file['name']['invoice']));
// Move the uploaded file.
JFile::upload($file['tmp_name']['invoice'], $filepath);
}
return parent::save();
}
}
champ de formulaire XML -
<field name="invoice" type="file"/>
MISE À JOUR: a travaillé après avoir ajouté les lignes suivantes, prises à partir du code @Andras Gera
$data = JRequest::getVar('jform', null, 'post', 'array');
$data['invoice'] = strtolower($file['name']['invoice']);
JRequest::setVar('jform', $data);
Je pense que nous devrions renvoyer la donnée $ modifiée à la méthode POST, car le parent :: save() revient au système save(). D'une façon ou d'une autre, si j'ajoute $ data à save(), la fonction n'est pas bonne. Enregistre tout, mais seul le champ de fichier est vide dans la base de données. –
avez-vous trouvé de toute façon de le faire? – ChamingaD
Oui, c'est résolu! Merci à Irfan de mentionner la fonction setVar. Sa solution ne fonctionne pas car elle crée un autre enregistrement au lieu de placer la variable nécessaire dans le tableau jform dans le tableau $ _REQUEST. Ma solution remplace la variable jform. –