Formular: Dateiupload via PHP

Fragen zum Erstellen von Templates für webEdition.
dehrich
Member
Beiträge: 44
Registriert: Mo 2. Dez 2013, 17:36

Formular: Dateiupload via PHP

Beitragvon dehrich » Fr 9. Feb 2018, 16:34

Hallo,

geplant ist ein Formular zu erstellen, welches mehrere Dateiuploads mit Mehrfachauswahl enthalten soll. Dies soll idealerweise über PHP realisiert werden, aber dennoch in webEdition als Dokument verfügbar sein. Idealerweise wird hier in einem bestimmten webEdition Verzeichnis ein Unterverzeichnis für den angemeldeten Kunden angelegt.
Außerdem sollen die hochgeladenen Dateien innerhalb webEditions direkt dem auf der Seite angemeldeten Kunden zugewiesen werden.

Ablauf:

  • Kunde sendet Formular ab
  • Formularfelder werden als Objekt gespeichert
  • Sollte für den Kunden innerhalb webEditions noch kein Dokumentenordner angelegt sein, soll dieser angelegt werden
  • Die Dateien werden innerhalb webEditions hochgeladen, mit dem Kunden verknüpft und in dem Kundenordner gespeichert.

In einem älteren Post habe ich eine analoge Variante zu "new we_objectFile()" für Dokumente gesehen.

Gibt es dafür ein Beispiel? Primär geht es mir um den Fileupload.

Benutzeravatar
blickfang
webEdition Partner
webEdition Partner
Beiträge: 812
Registriert: Mo 15. Dez 2003, 16:00
Kontaktdaten:

Re: Formular: Dateiupload via PHP

Beitragvon blickfang » Fr 9. Feb 2018, 16:57

Hallo dehrich,
schau Dir mal

Code: Alles auswählen

http://documentation.webedition.org/wiki/webedition/php-we-objects/changing-the-content-of-a-field-of-any-object-with-php
an. mit we_new() kannst Du neue Objekte erzeugen.
Ein Objekt kannst Du aber auch mit webEdition Bordmitteln erzeugen.
<we:form type="object" />
<we:write type="obejct" ... />
Ein Verzeichnis anlegen wird out-of-the-box aktuell leider nicht funktionieren. Hier könnte Dir aber dies evtl. weiterhelfen - Objektverzeichnis anlegen (nicht updatesicher):

Code: Alles auswählen

	$dir = new we_Folder();
	$dir->we_new(OBJECT_FILES_TABLE, 123, 'verzeichnisname'); // 123 ID des parentVerzeichnisses
	$dir->Text = '2339';
	$dir->Filename = 'dateiname';
	$dir->Path = 'pfadZumObjektVerzeichnis';
	$dir->we_save();
	$dir->we_publish();
Für Dokumentverzeichnisse mit php anzulegen solltest Du Dir

Code: Alles auswählen

$folder = new we_folder();
anschauen.
Der Fileupload ist in webEdition derzeit nur für Bilder möglich. Upload anderer Dateien müsste selbst gebaut werden...

Viele Grüße
Timo
webEdition Partner - https://www.blickfang-media.com
Ehemals im Vorstand des webEdition e.V.

dehrich
Member
Beiträge: 44
Registriert: Mo 2. Dez 2013, 17:36

Re: Formular: Dateiupload via PHP

Beitragvon dehrich » Mo 12. Feb 2018, 10:48

Hallo, danke für die rasche Antwort!

Objekte via PHP zu erstellen ist ja problemlos möglich, habe ich so auch schon öfter umgesetzt.

Primär wäre es wichtig, wie man beispielsweise PDF Dateien per Formular und anschließender Verarbeitung über PHP in webEdition Verfügbar macht. Zusätzlich sollte das PDF noch mit dem Kunden verknüpft werden.

Deine Lösung bezieht sich leider nur auf Objekte. Gibt es hier was ähnliches Auch für Dateien?

Benutzeravatar
blickfang
webEdition Partner
webEdition Partner
Beiträge: 812
Registriert: Mo 15. Dez 2003, 16:00
Kontaktdaten:

Re: Formular: Dateiupload via PHP

Beitragvon blickfang » Mo 12. Feb 2018, 11:06

Hi,

für sonstige Dkumente gibt es das leider nicht. Du könntest Dir aber die webEditon Document-Klasse anschauen (we_document oder so ähnlich muss die heissen, da wirst Du we_new() etc. finden um ein Dokument via php zu erstellen. Das ist aber alles nicht updatesicher und eigentlich derzeit nicht für die Verwendung ohne webEdition Oberfläche oder we:tags vorgesehen ;-)

Viele Grüße
Timo
webEdition Partner - https://www.blickfang-media.com
Ehemals im Vorstand des webEdition e.V.

dehrich
Member
Beiträge: 44
Registriert: Mo 2. Dez 2013, 17:36

Re: Formular: Dateiupload via PHP

Beitragvon dehrich » Di 13. Feb 2018, 10:12

Ich habe bis jetzt folgendes:

Erstellung eines neuen Ordners via PHP mit Rückgabe der ID

Code: Alles auswählen

    $db = new DB_WE();
    $folderID = f("SELECT ID FROM " . FILE_TABLE . " WHERE Filename LIKE '".$lieferantenID."' AND ParentID = ".$parentID." AND ContentType LIKE 'folder'");

    if(!empty($folderID) && $folderID != 0) {
      return $folderID;
    } else {
      $dir = new we_Folder();
      $dir->we_new(FILE_TABLE, $parentID, $lieferantenID); // 123 ID des parentVerzeichnisses
      $dir->we_save();
      $dir->we_publish();
      p_r($dir);
      return($dir->ID);
    }
Nachdem Upload wird die Datei in einen Temporären Ordner geschoben. Von dort aus nutze ich die die Importfunktion von webedition (aus we_import_site.class.php) um die Datei innerhalb webeditions verfügbar zu machen.


Code: Alles auswählen

    $lieferantenID = 546423
    $parentID = 4;
    $file = /tmp_uploads/123-testupload.pdf;
    
    $newFolderPath = f("SELECT Path FROM " . FILE_TABLE . " WHERE Filename LIKE '".$lieferantenID."' AND ParentID = ".$parentID." AND ContentType LIKE 'folder'");

    $folderID = f("SELECT ID FROM " . FILE_TABLE . " WHERE Filename LIKE '".$lieferantenID."' AND ParentID = ".$parentID." AND ContentType LIKE 'folder'");

    $up = new we_import_site();
    $up->importFile($file, mime_content_type($file), $newFolderPath, $folderID, true, '', '', '', '', '', '', '', '', true, true);
Das funktioniert soweit auch ziemlich gut. Das einzige Problem ist der Dateipfad. Hier wird in der Datenbank der Name der Datei fehlerhaft hinterlegt. In dem Fall müsste der richtige Pfad lauten:

Code: Alles auswählen

/_uploads/546423/123-testupload.pdf
Stattdessen wird folgender Pfad eingetragen:

Code: Alles auswählen

/_uploads/546423/-testupload.pdf
Hab ich hier in der Importfunktion etwas vergessen?


Desweiteren wird der Filehash mit "0x00000000000000000000000000000000" eingetragen. Ist das relevant oder hat das vielleicht auch wasd mit dem Pfad zu tun?

Benutzeravatar
blickfang
webEdition Partner
webEdition Partner
Beiträge: 812
Registriert: Mo 15. Dez 2003, 16:00
Kontaktdaten:

Re: Formular: Dateiupload via PHP

Beitragvon blickfang » Di 13. Feb 2018, 12:44

die Import-Funktion habe ich selbst so noch nicht genutzt, kann ich leider nichts dazu sagen. Die I des Folders kannst Du aber leichter mit

Code: Alles auswählen

path_to_id($path); 
abholen, da musst Du nicht extra ein query selbst bauen.
webEdition Partner - https://www.blickfang-media.com
Ehemals im Vorstand des webEdition e.V.

dehrich
Member
Beiträge: 44
Registriert: Mo 2. Dez 2013, 17:36

Re: Formular: Dateiupload via PHP

Beitragvon dehrich » Mi 14. Feb 2018, 10:43

Danke, manchmal sieht man vor lauter Bäumen den Wald nicht :D

Mittlerweile ist alles lauffähig, auch der Kunde wird dem hochgeladenen Dokument zugeordnet.

Jetzt hab ich allerdings das Problem, dass die entsprechende Listview keine Dokumente liefert.

Code: Alles auswählen

<we:listview type="document" name="files" workspaceID="4" recursive="true" customers="$userID">
	<we:ifFound>
		<we:repeat>
			<p>
				<we:field name="Title" alt="we_path" hyperlink="true"/>
			</p>
		</we:repeat>
	</we:ifFound>
</we:listview>
Entferne ich das Attribut "customers" werden mir richtigerweise alle Dokumente angezeigt. Das Dokument in webEdition ist auf "durchsuchbar" und auch der Kunde ist richtig verknüpft. Habe die Version 8.0.1, hab ich hier was übersehen oder könnte das ein Bug sein?

Benutzeravatar
blickfang
webEdition Partner
webEdition Partner
Beiträge: 812
Registriert: Mo 15. Dez 2003, 16:00
Kontaktdaten:

Re: Formular: Dateiupload via PHP

Beitragvon blickfang » Mi 14. Feb 2018, 11:26

ruf mal das Dokument das nicht angezeigt wird in webEdition auf und speichere es neu über die Oberfläche ab. Ggf. fehlt Dir doch noch irgendeine INformation ind er Datenbank, so dass die Listview es nicht findet. Wenn das Dokument über die Oberfläche neu gespeichert wird, sollten alle nfos passen. Wenn es dann gefunden wird, musst Du Dich evtl. an zwei Beispielen mal durchhangeln und schauen, welche Info beim Erstellen des Dokuments noch fehlt.
webEdition Partner - https://www.blickfang-media.com
Ehemals im Vorstand des webEdition e.V.

dehrich
Member
Beiträge: 44
Registriert: Mo 2. Dez 2013, 17:36

Re: Formular: Dateiupload via PHP

Beitragvon dehrich » Mi 14. Feb 2018, 16:34

Testweise habe ich ein Dokument per webEdition Import geholt und über die webEdition Oberfläche verknüpft. Auch hier bekomme ich leider keine Ausgabe.


Zurück zu „webEdition Templates erstellen (we:Tags)“

Wer ist online?

Mitglieder in diesem Forum: Ahrefs [Bot] und 12 Gäste