web-dev-qa-db-fra.com

Télécharger un fichier à partir du dossier du composant personnalisé lors de l'installation du composant

Je sais comment télécharger un fichier donné à partir de jform si un composant est déjà installé. Mais comment télécharger un fichier à partir de mon dossier admin/assets/de mon composant lors de l'installation du composant? Dans mon script.php j'essaie le code suivant:

jimport('joomla.filesystem.folder');
jimport('joomla.filesystem.file');
...
public function install($parent)
{
   // creating a folder
   $path = JPATH_ADMINISTRATOR . DIRECTORY_SEPARATOR . "templates" . DIRECTORY_SEPARATOR . "isis" . DIRECTORY_SEPARATOR . "html" . DIRECTORY_SEPARATOR . "com_content" . DIRECTORY_SEPARATOR . "article";
   $mode = 0755;
   JFolder::create($path, $mode);

   // uploading a file
   $file = JPATH_COMPONENT_ADMINISTRATOR . DIRECTORY_SEPARATOR . "assets" . DIRECTORY_SEPARATOR . "edit.php";
   $filename = JFile::makeSafe($file['name']);
   $src = $file['tmp_name'];
   $dest = JPATH_ADMINISTRATOR . DIRECTORY_SEPARATOR . "templates" . DIRECTORY_SEPARATOR . "isis" . DIRECTORY_SEPARATOR . "html" . DIRECTORY_SEPARATOR . "com_content" . DIRECTORY_SEPARATOR . "article" . DIRECTORY_SEPARATOR . $filename;
   JFile::upload($src, $dest);
}

Le dossier a été créé avec succès mais le fichier n'est pas en cours de téléchargement dans le dossier et le message d'erreur "impossible de déplacer" s'affiche.

1
stckvrw

Effectuez vos tâches de déplacement de fichier dans la fonction postflight de votre fichier script.php

function postflight($type, $parent) 
{
  // do it here
  JFile::move($src, $dest);
}

Cette fonction est appelée après la copie des fichiers de votre paquet, les bases de données sont mises à jour, etc.

1
Nagarjun

Je pense que vous vous êtes embrouillé ici. Lorsque vous installez une extension, vous téléchargez déjà un fichier Zip. Donc, une fois que Joomla a traité ce fichier Zip, les fichiers sont déjà sur le serveur. Vous ne pouvez pas "pload" un fichier d'un répertoire à un autre. Vous devez "déplacer" ou "copier" le.

Le code que vous devrez utiliser sera soit:

JFile::move($src, $dest);

ou:

JFile::copy($src, $dest);

Et comme @Nagarjun l'a déjà dit, vous devez mettre ce code dans la fonction postflight plutôt que dans la fonction install. Si vous utilisez la fonction install, la fonction $src le fichier que vous définissez peut ne pas exister;)

J'espère que cela t'aides

1
Lodder