Web Dev Blog

Artikel lesen

Contao MetaModels per Formular befüllen: Einen Alias erstellen

von Daniel Erlinger

von Daniel Erlinger

Ansicht des Backends von Contao

Da das MetaModels-Spendenziel für's Frontend-Editing bisher nur zur Hälfte erfüllt ist, muss man einen kleinen Umweg über ein selbst erstelltes Formular gehen. Besonderes Augenmerk gilt hier dem Alias.

Achtung! Dieser Beitrag ist älter als 5 Jahre. Sein Inhalt kann veraltet sein und sollte deshalb mit Vorsicht genossen werden.

Eigentlich wollte ich diesen Beitrag dem Erstellen eines geeigneten Formulars im Allgemeinen widmen. Doch dazu gibt es eigentlich nicht viel zu berichten. Die Schritte sind recht übersichtlich:

  1. Erstellung eines MetaModels
  2. Festlegen der benötigten Attribute
  3. Formular erstellen (mit oder ohne EFG) und Werte in die MetaModels-Tabelle speichern
  4. Formularfelder erstellen und darauf achten, dass der Feldname dem Spaltennamen des MetaModels-Attribut entspricht

Im Groben und Ganzen war's das auch schon. Wenn da nicht der Alias wäre.

Vorüberlegungen: den passenden Alias suchen

Der Alias wird zur eindeutigen Identifizierung des Datensatzes gebraucht. Normalerweise wird er beim Speichern des MetaModels-Datensatzes im Backend generiert. Dieser Fall scheidet jedoch aus, da der Datensatz über das Frontend aus dem Formular kommen soll. Was also tun? Der Alias muss selbst erstellt werden.

Als erstes sollte man sich überlegen, aus welchen Formularfeldern sich der Alias zusammensetzen soll. Je nach Anforderung des Projekts können das ein oder mehrere Felder sein, beispielsweise der Vor- und Nachname einer Person. Das wichtigste Kriterium fehlt aber noch: die Eindeutigkeit.

Wenn ich mich nun für den Vor- und Nachnamen als Aliasbestandteil entschieden habe, dann ist dies nicht eindeutig.

Eine Überlegung wäre, die ID des in der Datenbanktabelle gespeicherten Datensatzes hinzuzufügen. Nehmen wir an, der letzte in der Tabelle gespeicherte Datensatz hat die ID 5. Nun müsste man sich beim Speichern des Formulars diese ID aus der Tabelle holen, um 1 erhöhen, um sie mit den beiden anderen Feldern zu kombinieren. Dieser Weg erscheint mir allerdings zu heikel und kompliziert.

Was also stattdessen nehmen? Der Timestamp wäre eine Lösung. Er ist eindeutig und kompromittiert nicht die Sicherheit der Anwendung.

Einen Alias erstellen

Alles, was man aus MetaModels Sicht braucht, ist ein Attribut mit diesem Namen. Als Zweites erstellt man im Formular ein verstecktes Feld mit dem Namen alias. Dieses Feld wird in einem weiteren Schritt per Javascript befüllt. Dafür erstellt man ein letztes Formularfeld vom Typ HTML, in welchem man folgenden Code ablegt:

<script>
    var $timestamp = Date.now(),
        $aliasElement = document.querySelector('input[name="alias"]'),
        $foreNameElement = document.querySelector('input[name="forename"]'),
        $surNameElement = document.querySelector('input[name="surname"]');

    document.getElementById('f1').addEventListener('submit', function(event) {
        var $foreNameValue = $foreNameElement.value.toLowerCase().replace(/\s+/g, ''),
            $surNameValue = $surNameElement.value.toLowerCase().replace(/\s+/g, '');

        $aliasElement.value = $foreNameValue + '.' + $surNameValue + '-' + $timestamp;
    });
</script>

Es ist wichtig, dass Script-Tag vorher in den Contao-Einstellungen zu erlauben.

Das Script holt nun beim Abschicken des Formulars die Werte aus den Feldern Vorname und Nachname. Diese beiden Werte werden in Kleinbuchstaben umgewandelt und von Leerzeichen getrennt. Anschließend werden sie mit dem Timestamp kombiniert und als Wert in das alias-Feld geschrieben:

vorname.nachname-1409058151

Somit ist der gespeicherte Datensatz mit einem eindeutigen Alias versehen und kann im Frontend zum Aufruf der Detailseite genutzt werden.

Zurück zur Newsübersicht

Ihnen gefällt das was Sie sehen?

Gern können wir darüber sprechen. Schreiben Sie mir oder rufen mich an.

Meine Kontaktdetails Referenzen ansehen