2017-03-21 2 views
0

J'essaye de créer un module spécifique pour télécharger des fichiers.Télécharger un fichier dans joomla en utilisant un module

J'utilise ce code:

côté client:

<?php 
// No direct access 
defined('_JEXEC') or die; $resposta =""; ?> 
<form name="upload" method="post" enctype="multipart/form-data"> 
<input type="file" name="file_upload" /> 
<input type="submit" name="submit_file" value="submit_file"/> 
<input type="text" name="resposta" value=<?php echo $resposta; ?> /> 
</form> 

Mon Module:

<?php 
    defined('_JEXEC') or die; 

include_once __DIR__ . '/helper.php'; 

//trigger the event 


// Instantiate global document object 
defined('_JEXEC') or die; 

    // Include the syndicate functions only once 
    require_once dirname(__FILE__) . '/helper.php'; 

    $resposta = ModuploadfileHelper::getuploadfile($params); 
    require JModuleHelper::getLayoutPath('mod_upload_file'); 


?> 

Mon aide:

<?php 


    class ModuploadfileHelper { 


     public static function getuploadfile($params) { 
     /* 
      * File upload example 
            */ 
     //Retrieve file details from uploaded file, sent from upload form 
     $file = JFactory::getApplication()->input->get('file_upload'); 

     //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']); 

     //Set up the source and destination of the file 
     $src = $file['tmp_name']; 
     $dest = JPATH_COMPONENT . DS . "uploads" . DS . $filename; 
     if(!JFolder::exists($dest)) 
     { 
      $mode = 0755; 
      JFolder::create($dest, $mode); 
     } 
     $resposta = null; 
     //First check if the file has the right extension, we need jpg only 
     if (strtolower(JFile::getExt($filename)) == 'jpg') 
     { 
     // TODO: Add security checks 

      if (JFile::upload($src, $dest)) 
      { 
       $resposta = "Sucesso ao arquivar a imagem"; 
      }  
      else 
      { 
       $resposta = "Insucesso ao arquivar a imagem"; 
      } 
     } 
     else 
     { 
      $resposta = "O ficheiro não é uma imagem"; 
     } 
     return $resposta; 
     } 
    } 

?> 

Première question: Est-ce que quelque chose comme ce travail? Deuxième question: Comment effectuer un déclenchement pour que le module fonctionne? Treizième question: Comment passer le module à l'ajax?

J'ai quelque chose comme ceci:

Code du module:

<?php 
    defined('_JEXEC') or die; 

include_once __DIR__ . '/helper.php'; 

// Instantiate global document object 
defined('_JEXEC') or die; 

    // Include the syndicate functions only once 
    require_once dirname(__FILE__) . '/helper.php'; 

    $resposta = ModuploadfileHelper::getuploadfile($params); 


defined('_JEXEC') or die; 

include_once __DIR__ . '/helper.php'; 

// Instantiate global document object 
$doc = JFactory::getDocument(); 

$js = <<<JS 
(function ($) { 
    $(document).on('click', 'input[type=submit]', function() { 
      formdata = new FormData(); 
      var file = this.files[0]; 
      formdata.append("image", file); 

     $.ajax({ 
      type : 'POST', 
      data : request, 
      success: function (response) { 
       $('.search-results').html(response); 
      } 
     }); 
     return false; 
    }); 
})(jQuery) 
JS; 


$doc->addScriptDeclaration($js); 
require JModuleHelper::getLayoutPath('mod_upload_file'); 

?> 

Aidez-moi s'il vous plaît.

Répondre

0

Il est possible, ce que vous devez faire, est d'utiliser l'interface Joomla ajax.

Voir la documentation ici: https://docs.joomla.org/Using_Joomla_Ajax_Interface

Il y a un exemple complet d'un module implantant ce, que vous pouvez modifier facilement adapter à télécharger le fichier: https://github.com/Joomla-Ajax-Interface/Ajax-Session-Module

+0

J'ai fait quelques recherches et de ce que je lire certains navigateurs ne supportent pas la soumission de formulaires via ajax. Je voudrais garder le téléchargement de fichier simple. –

+0

Je ne vois pas quel navigateur ... mais si vous ne voulez pas ajax, je ne vois pas vraiment le problème, juste votre module doit être publié sur la page où le formulaire sera posté, donc il est déclenché et peut agir sur la variable $ _FILES. ou plutôt JFactory :: getApplication() -> input-> files-> get ('file_upload'); – JulienV

+0

encore mieux, vous pouvez même faire une demande de publication régulière à l'URL du module 'com_ajax', et faire une redirection une fois que le téléchargement est géré. – JulienV