it-swarm.com.de

Laden Sie bei der Installation der Komponente eine Datei aus dem Ordner für benutzerdefinierte Komponenten hoch

Ich weiß, wie man eine von jform angegebene Datei hochlädt, wenn eine Komponente bereits installiert ist. Aber wie lade ich eine Datei aus meinem Admin/Assets/Ordner meiner Komponente hoch, wenn ich die Komponente installiere? In meiner script.php versuche ich den folgenden Code:

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

Der Ordner wird erfolgreich erstellt, aber die Datei wird nicht in den Ordner hochgeladen, und der Fehler "Kann nicht verschoben werden" wird angezeigt

1
stckvrw

Führen Sie Ihre Dateibewegungsaufgaben in der Postflight-Funktion Ihrer script.php-Datei aus

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

Diese Funktion wird aufgerufen, nachdem Dateien aus Ihrem Paket kopiert wurden, Datenbanken aktualisiert wurden usw.

1
Nagarjun

Ich denke, Sie haben hier oben Durcheinander. Wenn Sie eine Erweiterung installieren, laden Sie bereits eine Zip-Datei hoch. Sobald Joomla diese Zip verarbeitet hat, befinden sich die Dateien bereits auf dem Server. Sie können keine Datei von einem Verzeichnis in ein anderes "pload". Sie müssen es "verschieben" oder "kopieren".

Der Code, den Sie verwenden müssen, lautet entweder:

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

oder:

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

Und wie @Nagarjun bereits sagte, müssen Sie diesen Code in die Funktion postflight und nicht in die Funktion install einfügen. Wenn Sie die Funktion install verwenden, wird die Funktion $src Datei, die Sie definieren, existiert möglicherweise noch nicht;)

Hoffe das hilft

1
Lodder