Ergebnis 1 bis 8 von 8

Thema: Kann MM in Attributen eingegebene numerische Werte berechnen oder überprüfen?

  1. #1
    Contao-Nutzer
    Registriert seit
    24.10.2023.
    Ort
    France
    Beiträge
    4

    Standard Kann MM in Attributen eingegebene numerische Werte berechnen oder überprüfen?

    Hallo,

    Ich bin neu bei MM 2.3 und es tut mir leid, dass ich kein Deutsch spreche, was mir nicht hilft, alle Konfigurationsparameter zu verstehen :-(.
    Also lege ich mit meinem Freund DeepL los und hoffe, dass ich mich verständlich ausdrücken kann!

    Ich weiß nicht, ob MM anhand der eingegebenen Attribute numerische Werte berechnen oder überprüfen kann... ich kann es nicht finden.

    Ich habe eine Tabelle mm_references, in die ein Benutzer (mit FEE) eine Gesamtlagerkapazität einträgt:
    z.B. :
    800

    Ich habe eine Tabelle mm_materialien, in der dieser Benutzer seine Lagerkapazität für 5 definierte Materialien (immer die gleichen, unabhängig vom Benutzer) eingibt :
    z.B. :
    sand = 200
    Kalkstein = 400
    Granit = 100
    Erde = 0
    Ton = 100

    Ich möchte überprüfen, ob die Summe der 5 Materialien = Gesamtkapazität ist, sonst kann das Formular nicht validiert werden.

    Ich möchte auch den Prozentsatz jeder Lagerung anzeigen (oder in der Tabelle mm_materialien? speichern), z. B. Sand = 25%.

    Können Sie mir sagen, ob das, was ich tun möchte, mit MM 2.3 möglich ist?
    Stéphane
    aka Badel aus Frankreich
    Deutsch von DeepL

  2. #2
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.719
    User beschenken
    Wunschliste

    Standard

    Hallo Stéphane,

    wir können auch zu Englisch wechseln, wenn das für Dich leichter zu lesen ist - ich denke aber, DeepL bekommt das schon gut hin

    Zu Deiner Frage

    Kann MM in Attributen eingegebene numerische Werte berechnen oder überprüfen?
    Die Antwort ist Ja - dazu gibt es mehrere Möglichkeiten:

    1.) Prüfung mehrerer Werte oder Speicherung von berechneten Werten:

    Dazu gibt es vom DCG das Event PrePersistModelEvent, welches direkt vor dem Speichern in die Datenbank (DB) aufgerufen wird. Beispiele findest Du in den Folien und Dateien von meinem Vortrag zur Contao-Konferenz 2023 - siehe Seite 19 und 20

    Das Event PrePersistModelEvent gibt es sowohl für das Backend (BE) als auch für das Frontend (FE) - also für das Frontend-Editing (FEE). Beim Backend kann man die Speicherung mit dem Event noch unterbinden und eine Fehlermeldung anzeigen - für das Frontend muss dieses Feature noch eingebaut werden.

    2.) Prüfung eines Widgets:

    Zum Beispiel mit dem EncodePropertyValueFromWidgetEvent - siehe Vortrag Seite 25

    3.) Validierung mit Contao-Boardmitteln:

    Siehe Contao-Dev-Handbuch (eval)


    In Deinem Fall würde ich aber etwas anders vorgehen und die Prüfung mit JavaScript machen. In MM 2.3 kannst Du eigene Templates für die Widgets im Frontend anlegen und auswählen - dort würde ich ein span-Feld einfügen, so dass bei jedem Eingabefeld die Prozentangabe steht

    PHP-Code:
    Sand      [200  25,0%
    Kalkstein [400  50,0%
    Granit    [100  12,5%
    Erde      [0    ]  0,0%
    Ton       [100  12,5
    und die Speicherbuttons disablen, bis die Werte passen. Das JavaScript kannst Du in das Template der Eingabemaske einbauen. Alle Widgets sind über IDs bzw. Klassen eindeutig mit JavaScript ansteuerbar.

  3. #3
    Contao-Nutzer
    Registriert seit
    24.10.2023.
    Ort
    France
    Beiträge
    4

    Standard

    Hallo zonky,

    Vielen Dank für all diese Informationen und Ressourcen.

    Viel zu verarbeiten für mich... und das ist kein Problem der Sprache, sondern meiner php-Kenntnisse und meines Verständnisses von contao: Ich habe seit einem catalog to MM-Projekt im Jahr 2015 nicht mehr an so etwas gearbeitet
    Jetzt liegt es an mir, mich an die Arbeit zu machen!

    Eine weitere Frage zur Datenmanipulation:
    Ich habe gesehen, wie ich meine Werte zum Debuggen anzeigen kann.
    https://metamodels.readthedocs.io/en...templates.html

    PHP-Code:
    Array
    (
        [
    0] => Array
            (
                [
    raw] => Array
                    (
                        [
    id] => 1
                        
    [pid] => 0
                        
    [sorting] => 0
                        
    [tstamp] => 1698261533
                        
    [a12] => 200
                        
    [a11] => 100
                        
    [a16] => 0
                        
    [a15] => 0
    ... 
    Früher konnte ich diese Werte in Templates mit etwas wie $arrItem['raw']['xxx']['xxx'] anzeigen oder verwenden.
    Ich kann noch so viele verschiedene Syntaxen ausprobieren, es gelingt mir einfach nicht.
    Ich muss etwas in der Doku übersehen haben, ich kann es nicht finden?
    Stéphane
    aka Badel aus Frankreich
    Deutsch von DeepL

  4. #4
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.719
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von Badel Beitrag anzeigen
    Ich muss etwas in der Doku übersehen haben, ich kann es nicht finden?
    Wie ich Dir schon geschrieben hatte: leider ist nur das Handbuch in Deutsch aktuell

    Mit Symfony gibt es schönere Wege, das Template zu debuggen - siehe https://metamodels.readthedocs.io/de...templates.html

    MM bringt inzwischen auch ein eigenes Template zum Debuggen mit - bei den Rendersettings kannst Du dafür auf "metamodel_prerendered_debug" umstellen.

    An der Ausgabe im Template hat sich nichts geändert - Du solltest immer den Knoten raw und text sehen und mit den Standardeinstellungen auch html5

    Nicht vergessen, bei den Rendersettings die gewünschten Attribute laden! Am leichtesten über den Button "Alle hinzufügen".

    $arrItem['raw']...
    $arrItem['text']...
    $arrItem['html5']...

    "neu" ist der Knoten "actions" - da sind z. B. Weiterleitungen (jumpTo) enthalten

  5. #5
    Contao-Nutzer
    Registriert seit
    24.10.2023.
    Ort
    France
    Beiträge
    4

    Standard

    Es ist wirklich noch nicht so weit... aber die fernen Erinnerungen an den Deutschunterricht kommen seit einigen Tagen wieder hoch

    Es gibt etwas, das ich nicht verstehe:
    Wenn ich diesen Code in metamodel_prerendered.html5 einfüge.
    PHP-Code:
    <?= $arrItem['raw']['a11'] + $arrItem['raw']['a12'?>
    Das Ergebnis "300" wird korrekt angezeigt.

    Aber wenn ich denselben Code in z. B. mm_attr_numeric_test.html5 einfüge, weil ich bestimmte Verarbeitungen durchführen möchte, funktioniert es nicht.

    Ich habe wieder etwas übersehen!?
    Stéphane
    aka Badel aus Frankreich
    Deutsch von DeepL

  6. #6
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.719
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von Badel Beitrag anzeigen
    Es gibt etwas, das ich nicht verstehe:
    Wenn ich diesen Code in metamodel_prerendered.html5 einfüge.
    PHP-Code:
    <?= $arrItem['raw']['a11'] + $arrItem['raw']['a12'?>
    Das Ergebnis "300" wird korrekt angezeigt.

    Aber wenn ich denselben Code in z. B. mm_attr_numeric_test.html5 einfüge, weil ich bestimmte Verarbeitungen durchführen möchte, funktioniert es nicht.

    Ich habe wieder etwas übersehen!?
    mit "mm_attr_*" bist du im Template eines einzelnen Attributes - an das Template werden erstmal nur die Daten übergeben, die für die Ausgabe als Text oder HTML5 notwendig sind.

    Somit ist es eigentlich "logisch", dass dort die Berechnung so nicht funktioniert.

    Du kannst aber in dem Template mal einen Dump auf $this machen

    PHP-Code:
    dump($this); 
    und gucken, was neben $this->raw noch so ankommt

  7. #7
    Contao-Nutzer
    Registriert seit
    24.10.2023.
    Ort
    France
    Beiträge
    4

    Standard

    Das ist in der Tat logisch.
    Ich notiere mir den Dump, den ich morgen testen werde.

    Mit meiner Installation, die munter Informationen in Französisch, Englisch und Deutsch mischt... bin ich manchmal etwas verwirrt: Ich habe nicht herausgefunden, wie man die Beschreibung der Attribute (Human Readable Description) auf FEE anzeigt?
    Konfiguration C4.13 + MM2.3
    Stéphane
    aka Badel aus Frankreich
    Deutsch von DeepL

  8. #8
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.719
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von Badel Beitrag anzeigen
    Mit meiner Installation, die munter Informationen in Französisch, Englisch und Deutsch mischt... bin ich manchmal etwas verwirrt: Ich habe nicht herausgefunden, wie man die Beschreibung der Attribute (Human Readable Description) auf FEE anzeigt?
    Konfiguration C4.13 + MM2.3
    Ob MM 2.3 oder niedrigere Version ist egal...

    dazu muss ich etwas ausholen - im Backend ist für die Darstellung der DCG zuständig mit Backend-Widgets von Contao - beim FEE muss das Backend ins Frontend transferiert werden und dann werden aus den Widgets Formulareingaben - auf HTML-Basis sind zwar beide das selbe, aber nicht bei Contao... die Formulareingaben haben nur ein Label/Legend und keinen Erklärungstext.

    Wenn man Contao-Bootstrap einsetzt, haben die Formulartemplates diesen Text - Du kannst auch die Formulartemplates entsprechend anpassen. Ab MM 2.3 ist das per Templateauswahl möglich.

    Ähnliches Beispiel: https://pdir.de/news/formularfelder-...ergaenzen.html

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •