desenv-web-rp.com

Como criar um upload de imagem simples para componente personalizado

Estou desenvolvendo um componente personalizado para criar, editar e salvar dados de registros únicos, incluindo imagens. Eu sei que em admin/models/forms/record.xml deve haver um campo name="image" type="file" accept="image/*", Mas como e onde eu preciso escrever o código php simples para fazer upload de imagens para uma pasta específica, em qual arquivo e como? Onde escrever o código do exemplo pelo link https://docs.joomla.org/How_to_use_the_filesystem_package ?

EDITADO: Agora adicionei no meu admin/com_mycom/controllers/record.php o código:

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' que recebi da função allowEdit ()

RESOLVIDO MAS ... Portanto, o problema estava no nome da entrada. JRequest :: getVar contém 'imagem', mas o tipo de entrada = "arquivo" possui nome = " jform [imagem] ". Encontrei o código:

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

ao invés de

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

e agora o arquivo está sendo carregado, mas infelizmente seu nome não está sendo atualizado no banco de dados

Ok, eu adicionei sob if (JFile::upload($src, $dest)) { o código:

$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);

mas existe alguma maneira mais simples de atualizar o nome do arquivo no banco de dados?

4
stckvrw

Você deve adicioná-lo ao seu controlador, provavelmente controllers/record.php. Substitua a função save.

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

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

ATUALIZAÇÃO

erro "Falha ao mover o arquivo"

Isso veio de errado $dest valor. O destino deve ser o caminho completo.

Errado :

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

Correto:

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

Sugiro que você indique parte do administrador de com_media componente. Possui todas as funcionalidades relacionadas ao upload de arquivos desenvolvidas.

Também inclui tratamento de erros e outras verificações relacionadas ao sistema de arquivos.

1
SD.