Sammlungen per PHP erstellen

Fragen zum Erstellen von Templates für webEdition.
Benutzeravatar
Carrear
webEdition Partner
webEdition Partner
Beiträge: 636
Registriert: Do 17. Jan 2013, 03:02
Wohnort: Hannover

Sammlungen per PHP erstellen

Beitragvon Carrear » Mo 31. Jul 2017, 08:59

Hallo Leute :)

beim Relaunch einer Seite beginnen wir mit einer Neu-Installation um Altlasten los zu werden. Nun wollen wir beim Übertragen der zahlreichen Objekte auch umstrukturieren um die neuen Möglichkeiten zu nutzen.

Wo wir bisher mit einer begrenzten, genau definierten Zahl von Bildfeldern (Bild1, Bild2, Bild3) gearbeitet haben, möchten wir nun die Möglichkeiten durch die Nutzung von Sammlungen im Objekt verbessern.

Wir übertragen per PHP, da wir verschiedene Dinge modifizieren. Nun habe ich aber noch keine dokumentierte Möglichkeit entdeckt, Sammlungen per PHP zu erstellen, wie es bei Dokumenten und Objekten ja schon möglich ist.

Könnt ihr mich da mal aufklären und mir ggf. einen Link zur Doku geben?

Beste Grüße
Martin

Benutzeravatar
Carrear
webEdition Partner
webEdition Partner
Beiträge: 636
Registriert: Do 17. Jan 2013, 03:02
Wohnort: Hannover

Re: Sammlungen per PHP erstellen

Beitragvon Carrear » Do 3. Aug 2017, 09:04

?

mokraemer
Senior Member
Beiträge: 2333
Registriert: So 8. Aug 2010, 01:23
Wohnort: Mainz

Re: Sammlungen per PHP erstellen

Beitragvon mokraemer » Mo 7. Aug 2017, 10:12

Ich denke dir hat keiner geantwortet weil es noch keiner benutzt hat. Das schließt mich hierbei auch ein.
Die Collection ist erst mal für das Backend gebaut worden, ich vermute das die Methoden zur "manuellen" Befüllung einfach noch fehlen,weil es noch keinen Bedarf gab.
webEdition-Kern-Entwickler

Benutzeravatar
Carrear
webEdition Partner
webEdition Partner
Beiträge: 636
Registriert: Do 17. Jan 2013, 03:02
Wohnort: Hannover

Re: Sammlungen per PHP erstellen

Beitragvon Carrear » Do 10. Aug 2017, 14:51

mokraemer hat geschrieben:Ich denke dir hat keiner geantwortet weil es noch keiner benutzt hat. Das schließt mich hierbei auch ein.
Die Collection ist erst mal für das Backend gebaut worden, ich vermute das die Methoden zur "manuellen" Befüllung einfach noch fehlen,weil es noch keinen Bedarf gab.


Irgendwie bin ich davon ausgegangen, dass du mir das beantworten kannst, weil du in den entsprechenden Klassen als Author genannt wirst ( https://fossies.org/linux/www/webEditio ... .class.php ). Da müssen doch schon funktionen angesteuert werden, welche die entsprechenden Dinge dann erledigen?

Das vorhaben ist per PHP die Sammlung zu erstellen und dann (schon in wE vorhandene) Bilddateien darin einzupflegen. Im Anschluss soll diese Sammlung in einem Objekt in das entsprechende Sammlungs-Feld gesteckt werden. Wenn ich diese Prozesse im Backend auslöse, passiert doch wahrscheinlich nichts anderes, als dass entsprechende Funktionen angesprochen werden und die Parameter übergeben werden. Diese Funktionen und die Parameter würde ich gerne erkunden um sie manuell zu nutzen.

mokraemer
Senior Member
Beiträge: 2333
Registriert: So 8. Aug 2010, 01:23
Wohnort: Mainz

Re: Sammlungen per PHP erstellen

Beitragvon mokraemer » Do 10. Aug 2017, 16:43

ich stehe fast überall als Autor drin, das hat aber u.a. mit Aufräumarbeiten zu tun.

Nein, ich kann dir die Frage nicht beantworten. Es werden auch einige Dinge über Requests geregelt bzw. befüllt, oder in der Session gesetzt. Das Funktioniert dann auch als WebApp genau wie man das will. Geht aber nicht, oder umständlich, wenn man es nicht explizit als Funktionsaufrufe baut. Einen Großteil der Sammlungen stammen von Lukas, ob der die Frage beantworten kann, weiß ich nicht. Wir stecken grad viel mehr bei der 7.1 drin.

Die Klasse die für die Sammlungen zuständig ist, ist die we_collection.class.php müßte man also hier mal reinschauen und ggfs. Funktionen schreiben/umschreiben und die dann als Patch einreichen.
webEdition-Kern-Entwickler

lukasimhof
Junior Member
Beiträge: 16
Registriert: Do 30. Aug 2012, 16:09
Wohnort: Berlin

Re: Sammlungen per PHP erstellen

Beitragvon lukasimhof » Do 10. Aug 2017, 22:29

Die einfachsten Funktionen sind in we_collection schnell ersichtlich:

$coll = new we_collection;
$coll->Text = 'dieSammlung';
$coll->Path = '/dieSammlung';
$coll->ContentType = we_base_ContentTypes::COLLECTION;
$coll->remCT = we_base_ContentTypes::IMAGE; // optional: hier als CSV die zuläßigen Inhaltstypen
$coll->IsDuplicates = 0; // Dubletten zulassen oder nicht
$coll->we_save();

$coll->ID liefert die ID der eben angelegten Sammlung

=> Leider fehlt in tblVFile noch der UNIQUE über ParenID + Text: dadurch kannst du mit obigem Kode mehrere Sammlungen mit gleichem Pfad anlegen. Das wird im Backend angefangen, im PHP musst du die Eindeutigkeit des Sammlungspfades selbst gewährleisten.

Zum bestücken:
$coll = new we_collection();
$coll->initByID(16); // ID der bereits angelegten Sammlung
$coll->setCollection([491,496,491,495]); // damit legst du die gesamte Sammlung in genau dieser Reihenfolge an
$coll->we_save();

=> Mit $coll->we_save() (und in dieser einfchen Variante erst hier) werden zulässige Inhaltstypen (remCT) und IsDuplicates durchgesetzt: die Sammlung wird also je nach Bedarf gefiltert.

Das Ergebnis siehst du z.B. mit:
$coll->getCollection(); // jegliche -1 spielen nur im Backend eine Rolle und werden beim Speichern ausgefiltert

Weitere sinnvolle Funktionen:

- $coll->addItemsToCollection($items, $pos = -1) // $items als Array, $pos = Position ist optional
=> Achtung: wenn $pos gesetzt ist, wird das Element an dieser Position durch das erste einzufügende Element ersetzt; die weiteren einzufügenden Elemente folgen, ohne weitere bestehende Elemente zu überschreiben

- $coll->getValidCollection() // liefert die Collection mit durchgesetzten Filtern (schon vor dem we_save)

- $coll->getValidItemsFromIDs($ids, false, $recursive); // IDs als Array, $recursive true|false
=> wird z.B. beim Einfügen aus dem Tree verwendet, um für die jeweilige Sammlung valide IDs zu identifizieren (bei Verzeichnis-IDs die enthaltenen validen IDs, rekursiv oder nicht). Man kann damit also IDs validieren und dann mit setCollection() bzw. addItemsToCollection() einfügen.

HINWEIS:
All dies funktioniert JETZT, ist aber nicht Teil einer offiziellen öffentlichen API. Will heißen: Die Existenz sowie die Signaturen der genannten Methoden sind nicht garantiert und können sich im Zuge der weiteren Entwicklung ändern (v.a. wird nicht alles genannte auch langfristig public bleiben).
Core-Entwickler webEdition e.V.

Benutzeravatar
Carrear
webEdition Partner
webEdition Partner
Beiträge: 636
Registriert: Do 17. Jan 2013, 03:02
Wohnort: Hannover

Re: Sammlungen per PHP erstellen

Beitragvon Carrear » Fr 11. Aug 2017, 08:22

Vielen Dank!

Es wäre super und wir wären dankbar, wenn ihr entweder hier einen Link zu den Infos postet sobald sich etwas ändert oder ihr eben hier einen kurzen Hinweis loswerdet.

Beste Grüße
Martin

lukasimhof
Junior Member
Beiträge: 16
Registriert: Do 30. Aug 2012, 16:09
Wohnort: Berlin

Re: Sammlungen per PHP erstellen

Beitragvon lukasimhof » Fr 11. Aug 2017, 10:55

Hi Martin,
sorry, aber das können wir nicht leisten (uns zu merken, wo man mal jemandem Tipps zu internen Funktionen gegeben hat...).

Änderungen an Funktionen, bei denen wir davon ausgehen, dass sie auch (am Backend vorbei) direkt genutzt werden, sind jeweils hier angekündigt: https://www.webedition.org/de/dokumenta ... tionen.php
=> Das sollte i.d.R. bei allen Ableitungen von we_contents_base der Fall sein (also sämtlichen Dokumenttypen).

Schöne Grüße, Lukas
Core-Entwickler webEdition e.V.


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

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste