Hallo alle zusammen
Hier kommt wie versprochen der aktuelle Entwicklungsstatus der Module sowie meine persönliche Roadmap die künftige Weiterentwicklung.
Aktuell können wir ein Formular über die Datenbank mit Daten befüllen und dieses dann in einer beliebigen Tabelle speichern (Update oder Insert). Dazu ist es möglich über eine eigene Tabellenspalte, welche die zum Editieren berechtigten Frontendgruppen enthält, sicherzustellen, das nur berechtigte FrontendUser eine Änderung an einzelnen Datensätzen vornehmen können. Die Berechtigung zum Einfügen neuer Daten kann außerdem im Formular über das Feld "Mitgliedergruppen die neue Datensätze in die Tabelle einfügen dürfen" vergeben werden.
Das ganze ist inzwischen schon weitgehend verwendbar und kann in meinem Testsystem http://contaocrud.janbartel.de/ (user:test passwort:testtest) betrachtet werden.
Wenn ihr euch selbst ein Testsystem einrichten möchtet findet ihr eine Anleitung zum Einrichten der Testinstallation in den Folien von:"ContaoCRUD - Frontendediting mal anders.".
Die Git-Hub Repositories sind inzwischen aktuell und unter https://github.com/barteljan zu finden.
Ihr könnt Sie gerne forken,rumspielen,testen und implementieren worauf ihr Bock habt .
Mein Plan zum weiteren Vorgehen teilt sich in drei Steps, auf die in den nächsten Monaten Schritt für Schritt abarbeiten werde. Da es sich das ganze langsam zu einem doch recht umfangreichen Projekt entwickelt, bin ich für jede Hilfe sehr dankbar. Es kann sich also jeder von euch Todos oder Ideen herauspicken, die er umsetzen möchte.
Wenn wir uns miteinander abstimmen und vermeiden das mehrere Leute an der gleichen Funktion arbeiten, können wir damit nur gewinnen .
Folgenden Plan habe ich für mich gemacht:
1.) Step 1 - Eine stabile und produktiv nutzbare Version der drei vorhanden Module.
1.1) Umleiten der Formulare auf Ursprungsseite korrekt ermöglichen.
Wenn wir ein Formular über einen Edit-Link öffnen, wollen wir das es nach dem Speichern auf die ursprüngliche Seite umleitet. Das bedeutet das wir eine "dynamische" Weiterleitungsseite benötigen, was leider gar nicht so einfach ist wie man denkt. (siehe: dieser Post).
Aktuell ist dies zwar implementiert, ich musste dafür aber im Modul eine Core-Klasse überschreiben. Dies muss sich für eine stabile Version noch ändern.
1.2) Den editieren Link im Template in einer Klasse erzeugen und einfach einbindbar (per Inserttag) zur Verfügung stellen.
Aktuell verwende ich zum einbinden des Links zum Edit-Formular folgenden PHP Code im Template:
PHP-Code:
<?php
/**
* @var Contao\FrontendTemplate $this
*/
$data = $this->getData();
$contentId = $data['id'];
$userGroups = FrontendUser::getInstance()->groups;
$allowedGroups = deserialize($data['member_edit_groups']);
$currentPageId = $this->replaceInsertTags('{{page::id}}');
\Contao\Session::getInstance()->set("jumpToPageId",$currentPageId);
$allowed = false;
if(is_array($userGroups) && is_array($allowedGroups)){
foreach($userGroups as $userGroup){
if(in_array($userGroup,$allowedGroups)){
$allowed = true;
}
}
}
?>
<?php if($allowed):?>
<a href="bearbeiten.html?id=<?php echo $contentId;?>">edit</a><br />
<?php endif;?>
Dieses Skript muss durch ein Objekt welches den Link erzeugt ersetzt und idealer Weise per InsertTag (Hier gibt es noch ein paar Hürden) eingebunden werden.
1.3 Im Formular werden die Daten akuell über eine SQL-Query eingelesen. Das ist zu kompliziert.
Aus diesem Grund sollen hier ähnlich wie beim Speichern Felder eingefügt werden, welche es dem Backendnutzer erleichtern das Formular ohne große SQL-Kenntnisse zu konfigurieren.
1.4 Hooks einbauen welche zum Erweitern der Module genutzt werden können.
Aktuell ist ein großer Teil des Source-Codes einfach herunter geschrieben. Es gibt jedoch viele Stellen an denen über Hooks in das Geschehen eingegriffen werden kann. Hier muss ich noch ein entsprechendes Refactoring durchführen.
Step 2 - Ein Backend-Modul ContaoCRUD implementieren
2.1 Grundsätzliches Backendmodul erstellen
Ich stelle mir hier ein einfaches Backendmodul mit einer Liste von Tabellen (und Ihren Paletten) vor, in welchem man das Frontend-Editing für jede tl_tabelle/Palette konfigurieren kann.
Über dieses können dann die einzelnen Tabellen/Paletten welche im Frontend editier- oder updatebar sein sollen im Backend gepflegt werden.
2.2 Dem DCA werden dann dynamisch die entsprechenden Permissionfelder hinzugefügen
Allen konfigurierten Tabellen sollen dann automatisch entsprechende Berechtigungsfehler hinzugefügt werden.
2.3 Weiterleitungslink für Editieren und Einfügen Link einfügen
Es können Weiterleitungsseiten erstellt werden welche festlegen auf welche Seiten ein Editieren/Insert Link dieser Tabelle/Palette verweist.
2.4 Auswahl der Frontend-Templates ermöglichen in die automatisch für diese Tabelle/Palette ein Editieren/Insert Link eingefügt werden soll
Da wir nun wissen welche Tabellen und Paletten (z.B. Content-Element-Typen) mit welchen Formularen und Seiten verknüpft werden, können wir über den parseFrontendTemplate-Hook automatisch einen edit und insert Link einbinden.
Step 3 - Fromulare automatisch generieren
Im dritten Step könnten die Formulare für die im DCA konfigurierten Tabellen dynamisch generiert werden.
Dies würde den Aufwand zum Einrichten des Frontendediting drastisch reduzieren.
Step 4 - Formulare im Frontend per Ajax an Stelle des ursprünglichen Contents einbinden.
Dies ermöglicht dem User die Seite einfach "per Click" an Ort und Stelle zu administrieren und würde uns die Edit-Links ersparen.
Wenn Ihr Lust habt euch an einem dieser Punkte zu beteilligen, sagt mir einfach bescheid, würde mich sehr freuen aus diesem "Einzelkämpfer-Projekt" ein "Community-Projekt" zu machen.
VG,
Euer Jan