it-swarm.it

Come creare un semplice upload di immagini per componenti personalizzati

Sto sviluppando un componente personalizzato per la creazione, la modifica e il salvataggio di dati di singoli record, comprese le immagini. So che in admin/models/forms/record.xml ci deve essere il campo name="image" type="file" accept="image/*" Ma come e dove devo scrivere il semplice codice php per caricare immagini in una cartella specifica, in quale file e come? Dove scrivere il codice dall'esempio tramite il collegamento https://docs.joomla.org/How_to_use_the_filesystem_package ?

EDITED: Ora ho aggiunto nel mio admin/com_mycom/controller/record.php il codice:

public function save($data = array(), $key = 'id')
    {
        $file = JRequest::getVar('image', null, 'files', 'array');
        $filename = JFile::makeSafe($file['name']);
        $src = $file['tmp_name'];
        $dest = "media/com_mycom/img/".$filename;
        if (JFile::upload($src, $dest)) {
              //Redirect to a page of your choice
        } else {
              //Redirect and throw an error message
        }
        parent::save();
    }

$ data = array (), $ key = 'id' che ho ricevuto dalla funzione allowEdit ()

RISOLTO MA ... Quindi il problema era nel nome dell'input. JRequest :: getVar contiene 'image' ma input type = "file" ha name = " jform [image] ". Ho trovato il codice:

$jinput = JFactory::getApplication()->input;
$files = $jinput->files->get('jform');
$file = $files['image'];

invece di

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

e ora il file viene caricato, ma sfortunatamente il suo nome non viene aggiornato nel DB

Ok, ho aggiunto sotto if (JFile::upload($src, $dest)) { il codice:

$thisID = JRequest::getVar('id');
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$fields = array($db->quoteName('image') . " = " . $db->quote($filename));
$conditions = array($db->quoteName('id') . " = " . $thisID);
$query->update($db->quoteName('#__mycom'))->set($fields)->where($conditions);
$db->setQuery($query);
$db->execute($query);

ma esiste un modo più semplice per aggiornare il nome file nel DB?

4
stckvrw

Dovresti aggiungerlo al tuo controller, probabilmente controllers/record.php. Ignora la funzione save.

public function save($key = NULL, $urlVar = NULL)
{
  // Upload your image

  // Save item
  parent::save();
}

[~ ~ #] aggiornamento [~ ~ #]

errore "Impossibile spostare il file"

Questo è venuto da un errore $dest valore. La destinazione deve essere il percorso completo.

Sbagliato:

$dest = "media/com_mycom/img/".$filename;

corretta:

$dest = JPATH_SITE."/media/com_mycom/img/".$filename;
4
Rene Korss

Vorrei suggerire di fare riferimento alla parte amministratore di com_media componente. Ha sviluppato tutte le funzionalità relative al caricamento di file.

Include anche la gestione degli errori e altri controlli relativi al file system.

1
SD.