Back to top

Autore Topic: upload file per sviluppo componente  (Letto 3050 volte)

Offline t.vicarelli

  • Nuovo arrivato
  • *
  • Post: 13
    • Mostra profilo
upload file per sviluppo componente
« il: 31 Gen 2013, 10:14:04 »
Buongiorno a tutti,
sto cercando di costruire un mio componente e ho bisogno di un campo che faccia l'upload di un file dalla parte back-end del componente ma sto riscontrando dei problemi.
Non posso usare il campo "media" in quanto non mi permette di scegliere le estensioni dei file; (o sbaglio?)
non sono in grado di usare il campo "file" in quanto non è documentato, (sapete dove posso ottenere informazioni a riguardo?)
Ho quindi pensato di costruire un field personalizzato seguendo la guida ma non ho ancora avuto successo.

il metodo getInput che ho scritto è il seguente:
Codice: [Seleziona]
        public function getInput() {
        $str = $str.'<input type="file"  name="'.$this->name.'" id="'.$this->id.'" size="10" />';
        return $str;
        }

e sul form del file edit.php ho messo encrypte="form/multidata";
Inoltre ho sovrascritto il metodo save() nel modello per includere l'upload del file ma qui la variabile $_FILES risulta essere vuota...

Cosa sbaglio?

mau_develop

  • Visitatore
Re:upload file per sviluppo componente
« Risposta #1 il: 31 Gen 2013, 10:40:32 »
cosa sbagli non vedendo nulla è difficile dirlo.
Perchè non scarichi un componente con quella funzionalità e guardi come fa?

Offline simone83

  • Appassionato
  • ***
  • Post: 362
  • Sesso: Maschio
    • Mostra profilo
Re:upload file per sviluppo componente
« Risposta #2 il: 31 Gen 2013, 10:53:02 »
Sbagli che nella form non è encrypte="form/multidata" ma  enctype="multipart/form-data"
BRAINCODE
Da Psd a Joomla - Sviluppo componenti joomla - SEO con Joomla
x-brain

Offline t.vicarelli

  • Nuovo arrivato
  • *
  • Post: 13
    • Mostra profilo
Re:upload file per sviluppo componente
« Risposta #3 il: 01 Feb 2013, 09:14:13 »
Grazie per la risposta... nella form il testo è giusto, ho solo sbagliato a riportarlo qui sul forum...

Ho provato a guardare altri componenti, ma o trovo alcuni che non seguono la struttura MVC, o trovo componenti troppo complicati per fare quello che voglio io (tipo Phoca Download che apre un'altra finestra per l'upload).

Io ho bisogno semplicemente di un "field" di tipo file e di caricare il file che viene scelto dall'utente.

Non dovrebbe essere sufficiente creare il field nel file models/fields/miofield.php e dichiararlo nel relativo mioModel.xml, aggiungere l'attributo enctype="multipart/form-data" alla form e riscrivere il metodo save() nel file mioModel.php?

in particolare, come faccio a catturare il contenuto del campo da me creato dall'interno di mioModel.php?

grazie ancora...

Offline simone83

  • Appassionato
  • ***
  • Post: 362
  • Sesso: Maschio
    • Mostra profilo
Re:upload file per sviluppo componente
« Risposta #4 il: 01 Feb 2013, 09:34:45 »
LA procedura è quella, ma senza codice è impossibile capire il perche non funzioni.

Comunque il campo file esiste ed e documentato
http://docs.joomla.org/File_form_field_type
BRAINCODE
Da Psd a Joomla - Sviluppo componenti joomla - SEO con Joomla
x-brain

Offline t.vicarelli

  • Nuovo arrivato
  • *
  • Post: 13
    • Mostra profilo
Re:upload file per sviluppo componente
« Risposta #5 il: 01 Feb 2013, 10:06:50 »
Ma il campo file effettua l'upload o devo effettuarlo io?

in ogni caso ecco il codice che ho scritto:


edit.php

Codice: [Seleziona]
<form action="<?php echo JRoute::_('index.php?option=com_courses&layout=edit&id='.(int) $this->item->id); ?>" method="post" name="adminForm" id="material-form" class="form-validate" enctype="multipart/form-data">
<div class="width-60 fltlft">
<fieldset class="adminform">
<legend><?php echo empty($this->item->id) ? JText::_('COM_COURSES_MATERIALS_NEW') : JText::sprintf('COM_COURSES_MATERIALS_EDIT'$this->item->id); ?></legend>
<ul class="adminformlist">
<li><?php echo $this->form->getLabel('title'); ?>
<?php echo $this->form->getInput('title'); ?></li>

<li><?php echo $this->form->getLabel('file'); ?>
<?php echo $this->form->getInput('file'); ?></li>



miomodel.xml
Codice: [Seleziona]

<field name="file" type="file"
class ="inputbox"
label="JGLOBAL_TITLE"
description="COM_COURSES_FIELD_TITLE_DESC"/>


miomodel.php:
Codice: [Seleziona]
public function save($data){

$file = JRequest::getVar('jform_file', null, 'files', 'array');
JFactory::getApplication()->enqueueMessage( 'var: ' . $file);

//Import filesystem libraries. Perhaps not necessary, but does not hurt
jimport('joomla.filesystem.file');

//Clean up filename to get rid of strange characters like spaces etc
$filename = JFile::makeSafe($file['name']);
JFactory::getApplication()->enqueueMessage( 'filename: ' . $file);

//Set up the source and destination of the file
$src = $file['tmp_name'];
$dest = JPATH_COMPONENT . DS . "folder" . DS . $filename;

//First check if the file has the right extension, we need jpg only
if ( strtolower(JFile::getExt($filename) ) == 'jpg') {
if ( JFile::upload($src, $dest) ) {
JFactory::getApplication()->enqueueMessage( 'upload successfull');
//Redirect to a page of your choice
} else {
JFactory::getApplication()->enqueueMessage( 'upload failed');
//Redirect and throw an error message
}
} else {
JFactory::getApplication()->enqueueMessage( 'wrong extension');
//Redirect and notify user file is not right extension
}

parent::save($data);
}

io credo di sbagliare sulla save, in quanto la variabile $file risulta essere vuota....

Offline simone83

  • Appassionato
  • ***
  • Post: 362
  • Sesso: Maschio
    • Mostra profilo
Re:upload file per sviluppo componente
« Risposta #6 il: 01 Feb 2013, 10:38:24 »
risulta vuota xhce hai sbagliato

Citazione
$file = JRequest::getVar('jform_file', null, 'files', 'array');

Jform è un array e non è quello il nome del file

vuoi scommettere che se fai un die(print_r($_FILES)) c'e

il file lo becchi con

$file = JRequest::getVar('jform', '', 'files', 'array');

ma stai attento che dopo file è un array a sua volta
BRAINCODE
Da Psd a Joomla - Sviluppo componenti joomla - SEO con Joomla
x-brain

Offline t.vicarelli

  • Nuovo arrivato
  • *
  • Post: 13
    • Mostra profilo
Re:upload file per sviluppo componente
« Risposta #7 il: 01 Feb 2013, 12:07:42 »
grazie mille! Ha funzionato proprio come hai detto!

ora però mi da il messaggio "Save failed with the following error: " e non da nessun messaggio di errore...

Quello che non capisco è che l'upload funziona e gli altri campi vengono salvati nel db, quindi non capisco cosa fallisce!
Ho notato che se elimino il metodo save che ho scritto non mi da nessun errore. L'errore invece compare anche se lascio il metodo e gli faccio solo richiamare il metodo save del parent...

Codice: [Seleziona]
public function save($data){

       parent::save($data);
}



Offline simone83

  • Appassionato
  • ***
  • Post: 362
  • Sesso: Maschio
    • Mostra profilo
Re:upload file per sviluppo componente
« Risposta #8 il: 01 Feb 2013, 12:34:27 »
1) l'upload lo devi fare te e non lo fa da sol
2) Chiaramente nel database mica salvi la variabile file ma il nome o il path o quello che vuoi
3) ti da errore xche qualcosa la funzione save dovra far tornare devi mettere return parent::save in caso
4) quindi devi prima caricare il file nella riscrittura di save e inserire il nome del file nel campo $data['file'] e poi richiamare il parent save
BRAINCODE
Da Psd a Joomla - Sviluppo componenti joomla - SEO con Joomla
x-brain

 



Web Design Bolzano Kreatif