Seite 1 von 2

Objekt per PHP erstellen

Verfasst: Mi 20. Jan 2010, 13:51
von QuadBlade
Hallo zusammen!

Leider bin ich mir nicht sicher, ob diese Unterkategorie die Richtige ist für mein Anliegen.

Ich habe möchte einen Import von Daten aus einer CSV-Datei in WE-Objekte umsetzen.
Das könnte ich prinzipiell über den bereits eingebauten CSV-Import machen, leider ist der aber nicht flexibel genug.
Zum Beispiel möchte ich darüber Bilder importieren, usw.

Nun habe ich das Codebeispiel unter http://documentation.webedition.de/de/w ... t-with-php gefunden, die mir ja schon mal weiterhilft, wenn ich Objekte ändern möchte. Das ist Teil 1, prima!

Da nicht alle Objekte bereits im System existieren, benötige ich die Möglichkeit, Objekte auch anzulegen.
Wie geht das?

Code: Alles auswählen

$obj = new we_objectFile();
$obj->initByID($ArtikelNr);
Das funktioniert nicht, eine neue Nummer kann ich der Funktion initByID scheinbar nicht übergeben...

Hat jemand einen Tipp?

Gruß aus Hamburg
QuadBlade

Re: Objekt per PHP erstellen

Verfasst: Mi 20. Jan 2010, 14:05
von haydi
mit
$obj = new we_objectFile();
legst du eine Instanz (initialisierst ein Objekt) der Klasse we_objectFile an. Damit wird kein neues Objekt erzeugt.

und damit
$obj->initByID($ArtikelNr);
wird mitgeteilt, um welche existierende ID es im folgenden gehen soll (auslesen,manipulieren, usw.)

damit generierst du also kein neues objekt.

Re: Objekt per PHP erstellen

Verfasst: Mi 20. Jan 2010, 14:21
von QuadBlade
Hey haydi,
danke für die schnelle Antwort!

Dass es damit nicht funktioniert, habe ich leider auch schon feststellen müssen.
Deshalb die Frage, wie es denn funktioniert?

Re: Objekt per PHP erstellen

Verfasst: Mi 20. Jan 2010, 14:32
von MarS
Ich leg' die immer über <we:write> an?
Theoretisch müsste man "nur" gucken, was das we:write type="object" macht und das nachbauen.

Gruß, Martin

Re: Objekt per PHP erstellen

Verfasst: Di 9. Feb 2010, 21:23
von Sophia
also im Prinzip geht das so:

include_once($_SERVER["DOCUMENT_ROOT"]."/webEdition/we/include/we_import/importFunctions.class.inc.php");

alle erforderlichen Parameter füllen:
$classid = ..; // id der Klasse

alle Objektfelder als richtig gefülltes array anlegen, in diesem Beispiel steht alles bereits im array $fields
$objfields=
array(
"hotel_nr"=> $fields[0],
"ort_id"=> $fields[1],
"hotel_name"=> $fields[2],
"hotel_description"=>$fields[3],
"hotel_pic_url1"=>$fields[4],
"hotel_pic_url2"=>$fields[5],
"email"=> $fields[6]
);
$rcd_name = $objfields["hotel_nr"]; // der Name des neuen Objektes, in diesem Beispiel das, was in $fields[0] steht
$collision="replace"; // überschreibt vorhandene Objekte
$categories=""; // weiß nicht, wie man die angibt

Objekt anlegen:
importFunctions::importObject($classid, $objfields, $categories, $rcd_name,true,$collision);

LG Sophia

Re: Objekt per PHP erstellen

Verfasst: Do 16. Feb 2012, 20:34
von blickfang
Hi,

Objekte mit imporObject erstellen klappt wunderbar, nur kann ich trotz stöbern in der KLasse nicht herausfinden, wie man ein Objekt in ein bestimmtes Verzeichnis der Objekt- Klasse speichern kann. Kann man das mit ParentID oder ähnlich übergeben?

Danke für Hilfe - auch wenn ich schon vermute dass das einfach nicht geht...

Re: Objekt per PHP erstellen

Verfasst: Fr 17. Feb 2012, 02:42
von mokraemer
die Importfunktion killt automatisch alle Pfade, wenn ich das grad richtig gesehen hab.

Re: Objekt per PHP erstellen

Verfasst: Fr 17. Feb 2012, 13:21
von ThomasGoebe
liefert sie denn eine ID zurück? Dann könnte man anschließend mit initbyID arbeiten und den Pfad neu setzen.

Aber dann kann man auch gleich das Objekt ohne importFunction selbst erstellen.

@Marc: ich brauche das auch oft, wir sollten mal über eine Möglichkeit nachdenken, per PHP Objekte anzulegen, die unabhäniger von den internen Funktionen werden. Vielleicht lässt sich we:write noch anpassen, so dass die Daten auch aus einem Array statt den REQUEST Vars kommen können?

Re: Objekt per PHP erstellen

Verfasst: Fr 17. Feb 2012, 16:06
von WBTMagnum
ThomasGoebe hat geschrieben:@Marc: ich brauche das auch oft, wir sollten mal über eine Möglichkeit nachdenken, per PHP Objekte anzulegen, die unabhäniger von den internen Funktionen werden. Vielleicht lässt sich we:write noch anpassen, so dass die Daten auch aus einem Array statt den REQUEST Vars kommen können?
Das wäre wirklich eine feine Sache. Aber warum über PHP? Warum nicht gleich über das we-Markup? Ich könnte mir das so vorstellen:

Code: Alles auswählen

<we:write classid="1"....>
  <we:data name="" [value=""] [id=""] [from="" namefrom=""]>/
</we:write>
Das ist jetzt natürlich nicht komplett durchgedacht und müsste für die verschiedenen Anwendungsfälle durchgespielt werden. Aber so etwas in der Art würde die Erstellung von Objekten auch ohne PHP erlauben. Der Weg über die REQUEST Variablen ist ja ein Notbehelf.

LG,
Sascha

Re: Objekt per PHP erstellen

Verfasst: Fr 17. Feb 2012, 18:23
von mokraemer
ja, wenn dann über we-tags - ich weiß auch nicht, warum der Pfad gekillt wird, ist aber so. Hab das nur kurz mal nachgeschaut.

Wenn dann FR, und nicht mehr für 6.3

Re: Objekt per PHP erstellen

Verfasst: Sa 18. Feb 2012, 01:14
von WBTMagnum
@FR: http://qa.webedition.org/tracker/view.php?id=6070

Ich hab zwar keinen Einblick in die Entwicklung/Roadmap, hätte das jetzt aber auch noch nicht in der Version gesehen.


LG,
Sascha

Re: Objekt per PHP erstellen

Verfasst: Mo 10. Mär 2014, 12:20
von Creutzburg
Dieser Thread ist zwar schon etwas älter, aber hat denn jemand ein Beispiel, wie man neue Objekte per PHP (d.h. ohne WE-Tags) anlegen kann und gleichzeitig den Pfad setzen kann (was ja bei der von Sophia erwähnten Import-Klasse nicht geht)?

Oder anders gefragt: hat jemand ein funktionierendes Beispiel, was auf dem Konstrukt $obj = new we_objectFile() basiert und am Ende ein neues Objekt anlegt?

Dank & Gruß,
Alex

Re: Objekt per PHP erstellen

Verfasst: Mi 16. Dez 2015, 17:58
von Carrear
Man muss den Code wohl für die neueren Versionen etwas aktualisieren:

Code: Alles auswählen

	foreach($members as $member) {
		$classid = 1;
		$objfields = array("Nummer"=> $member);
		$rcd_name = $objfields["Nummer"];
		$collision = "replace";
		$categories = "";
		$rcd_name =  we_import_functions::correctFilename($objfields["Nummer"]);
		we_import_functions::importObject($classid, $objfields, $categories, $rcd_name, true, true);
	}
Davon ab - es funktioniert bei mir nicht. Es läuft zwar alles ohne Probleme durch und meckert nicht, aber Objekte finde ich im Anschluss weder in der DB noch im Backend. Sieht man einen offensichtlichen Fehler? Die Nummer, welche ich als einziges Feld einpflege ist immer eine Kombination aus Zahlen und je einem Unterstrich.

Re: Objekt per PHP erstellen

Verfasst: Do 17. Dez 2015, 13:41
von Carrear
Nach einem Update von 6.3.9 auf die aktuellste Version 6.4.X klappte das ganze. Allerdings musste ich dann den Import der Objekte auf 200 pro durchlauf reduzieren. Da hat jeder Skriptaufruf 16 Sekunden gedauert und das ist bei 80.000 Datensätzen etwas heftig für den Benutzer (ca.50 Minuten). Habe es jetzt per PDO in eine webEdition-Fremde Tabelle geschoben, da dauert der Import in 1000er-Schritten insgesamt ca. 1 Minute.

Re: Objekt per PHP erstellen

Verfasst: So 27. Dez 2015, 13:47
von planb
Wie kann man verhindern, dass eine Objekt welches es schon gibt (gleicher Name) nochmals erstellt wird? Nutze den Code um die Inhalte eines Instagram-Accounts auszulesen und als Objekte in webEdition zu speichern.

Code: Alles auswählen

<?php
 foreach($result->data as $post):
  $classid = 4;
  $timestamp = $post->created_time;
  $date = gmdate("Y-m-d-H-i-s", $timestamp);
  $objfields = array("url"=> $post->images->standard_resolution->url);
  $rcd_name = $objfields["id"];
  $categories = "";
  $collision = "replace"; 
  $rcd_name =  we_import_functions::correctFilename($date);
  we_import_functions::importObject($classid, $objfields, $categories, $rcd_name, true, true);
 endforeach
?>
Vielen lieben Dank schon mal für eure Hilfe.