Ankündigung

Einklappen
Keine Ankündigung bisher.

Parameter der onClick function über Twig übergeben

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Parameter der onClick function über Twig übergeben

    Hallo Zusammen,

    in ein twig template habe ich ein Array"fahrerListe" in der For-Schleife hole ich mir jeden Fahrer und erzeuge damit eine Tabelle.
    Die Tabelle hat am Ende zwei Buttons Edit und Delete. Beim onClick würde ich gerne eine Funktion aufrufen und als Parameter das "fahrer" Objekt(Array) übergeben.
    Das gelingt mir leider nicht. Ich habe verschiedene Ansätze aus dem Internet darüber gefunden doch keines hat funktioniert.
    Hat jemand eine Idee?


    HTML-Code:
                {% for fahrer in fahrerListe %}
                    <tr>
                        {% set tmp_fahrer = fahrer %}
    
                        <td class="text-right">{{ fahrer.mitgliedsnr }}</td>
                        <td class="text-left">{{ fahrer.namen }}</td>
                        <td class="text-left">{{ fahrer.vorname }}</td>
                        <td class="text-center">{{ fahrer.geburtstadum }}</td>
                        <td class="text-center">{{ fahrer.mitgliedseit }}</td>
                        <td class="text-center">{{ fahrer.ausgetretenam is empty ? "" : fahrer.ausgetretenam|date("m.d.Y") }}</td>
                        <td>
    
                            <button type="button" class="btn btn-primary btn-sm" onclick="UpdateFahrer({{ tmp_fahrer }})"><i     <<<<<<<<<<<<<<<<<<<onClick soll UpdateFahrer( fahrer ) aufrufen
                                        class="fa fa-pencil-alt"></i></button>
                            <button type="button" class="btn btn-danger btn-sm" onclick="DeleteFahrer({{ tmp_fahrer }})"><i
                                        class="fa fa-trash-alt"></i></button>
                        </td>
    
                    </tr>

    Code:
    <script>
        function UpdateFahrer(fahrerObj){
        window.alert(fahrerObj.mitgliedsnr);
        };
    
        function DeleteFahrer(fahrerObj){
        window.alert(fahrerObj.mitgliedsnr);
        };
    
    </script>

  • #2
    Twig nutzt an der Stelle nur die Objekt-Noation, aber nicht das Objekt an sich, wie Du es vermutest.
    Die Twig-Blöcke werden per PHP ausgelesen und verarbeitet. Wenn er überhaupt etwas an UpdateFahrer übergibt, dann maximal den Begriff object o.ä.
    So wie Du das vor hast, ist das glaube ich nicht möglich.
    Competence-Center -> Enjoy the Informatrix
    PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

    Kommentar


    • #3
      Code:
      UpdateFahrer({{tmp_fahrer|json_encode|raw}})
      geht auch nicht?

      Kommentar


      • #4
        Zitat von kaminbausatz Beitrag anzeigen
        Code:
        UpdateFahrer({{tmp_fahrer|json_encode|raw}})
        geht auch nicht?
        oh, das war der richtige Hinweis. Das JSON Array muss ich nur ohne |raw übergeben.
        So funktioniert es:
        HTML-Code:
                    {% for fahrer in fahrerListe %}
                        <tr>
                            {% set tmp_fahrer = fahrer|json_encode %}
        
                            <td class="text-right">{{ fahrer.mitgliedsnr }}</td>
                            <td class="text-left">{{ fahrer.namen }}</td>
                            <td class="text-left">{{ fahrer.vorname }}</td>
                            <td class="text-center">{{ fahrer.geburtstadum }}</td>
                            <td class="text-center">{{ fahrer.mitgliedseit }}</td>
                            <td class="text-center">{{ fahrer.ausgetretenam is empty ? "" : fahrer.ausgetretenam|date("m.d.Y") }}</td>
                            <td>
        
        
                                <button type="button" class="btn btn-primary btn-sm" onclick="UpdateFahrer({{ tmp_fahrer }})"><i
                                            class="fa fa-pencil-alt"></i></button>
        
                                <button type="button" class="btn btn-danger btn-sm" onclick="DeleteFahrer({{ tmp_fahrer }})"><i
                                            class="fa fa-trash-alt"></i></button>
                            </td>
        
                        </tr>
                    {% endfor %}
        tausend Dank nochmals.

        Kommentar


        • #5
          Da habe ich dann auch was gelernt, hätte nicht gedacht, dass das so geht...
          Competence-Center -> Enjoy the Informatrix
          PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

          Kommentar


          • #6
            Ich lerne permanent von Euch das ist so cool.

            Kommentar


            • #7
              Zitat von Arne Drews Beitrag anzeigen
              (..) hätte nicht gedacht, dass das so geht...
              Schaut man sich da generierte HTML an, kommt einem schon die Idee ob das so gehen sollte.

              ein onclick event liesst data-action und data-fahrer-id und setzt den ajax call zusammen .....

              Kommentar


              • #8
                Ich habe einem Bootstrap Modalen Dialog um das Fahrer-Objekt zu bearbeiten. Ich könnte natürlich in der Methode UpdateFahrer nur die ID übergeben die ich vorher als Data-Attribut des Buttons speichern könnte um danach in UpdateFahrer über AJAX ein Select in der Datenbank auszuführen um den modalen Dialog zu befüllen. Im Multiuser Betrieb hätte ich dann die aktuellsten Daten und könnte bearbeiten. Da die Anwendung nur einer nutzt, dachte ich mir, ich übergebe das gesamte Objekt und befüllte damit gleich den modalen Dialog ohne erneutes Select auf die DB. Das funktioniert auch bestens.

                Das gesamte Projekt dient übrigens dazu zu lernen wie man effizient über eine Web-Anwendung Daten bearbeiten kann. Ich schreibe Datenbank-Anwendungen mit Delphi(Native 32-64Bit Windows Anwendungen). Da ist die Produktivität extrem hoch. Ich versuchte herauszufinden wie man über Web-Anwendungen im Bereich Datenbank-Anwendungen ebenfalls eine gute Produktivität erzielt, gerne auch mit eingekauften Komponenten. Ich habe die Komponenten DataTables eingekauft. Die kann z.B.: den kompletten Select, Insert, Update und Delete kram selbst erledigen und kann auch in einer Table Inline-Edit oder auch über ein modalen Dialog als Form den Datensatz bearbeiten. Hört sich für meinen Fall perfekt an. Wenn man aber etwas mehr benötigt, wird es so richtig kompliziert. Ich wollte z.B.: eine klassische Rechnung umsetzen. Also benötige ich ein LookUp Form um nach einem Artikel zu suchen. Das ist nicht vorgesehen. Was geht ist autocomplete auf Feldebene. Das reicht mir nicht. Ich möchte einen Dialog indem ich nach ArtikelNr, Bezeichnung u.s.w. suchen können und danach über Mehrfachauswahl alle Artikel in die Tabelle übernehmen. Eigentlich eine Standartaufgabe, ist nicht vorgesehen. Oder ich habe mal eine Datenquelle die nicht in einer Datenbank liegt sondern über einen Rest-Server bedient werden muss oder einfach nur ein Array als Datenquelle nutzen. Ist auch nicht vorgesehen. Ich meine hierbei natürlich die Technik für Select, Insert, Update und Delete direkt in das Array.

                Möglicherweise gibt es andere Frameworks die dafür geeignet sind.

                Kommentar


                • #9
                  Ich könnte natürlich in der Methode UpdateFahrer nur die ID übergeben die ich vorher als Data-Attribut des Buttons speichern könnte um danach in UpdateFahrer über AJAX ein Select in der Datenbank auszuführen um den modalen Dialog zu befüllen.
                  ein click event handler heisst ein click event handler auf dem driver-container (evnet delegation).

                  man überigbt auch nicht ein model einem clickhandler sonden versucht das die modelle in dre ganzen seite verfügbar sind.
                  inwiefern du diese per ajax abfragst oder nicht, sei dein ding.
                  für die einführung in ein client side mvc, rate ich dir das backbone celluar tutorial danach kannst du dich mit angualr beschäaftigen.

                  den zweiten absatz verstehe ich nicht, jdenfalls irgendwie nicht der bezug zum thread.

                  und was heisst "die Produktivität ist extrem hoch" ?
                  ist deine anwendug eine produktionsmaschine ?

                  Kommentar


                  • #10
                    Zitat von tomBuilder Beitrag anzeigen

                    ...
                    und was heisst "die Produktivität ist extrem hoch" ?
                    ist deine anwendug eine produktionsmaschine ?

                    Ich versuche herauszufinden wie eine Mitgliederverwaltung für einen Verein als Web-Anwendung umgesetzt werden kann. Die Datenhaltung ist in einer MySQL Datenbank. In Delphi erzeuge ich ein neues Projekt, nehme eine Form, auf dieser Form platziere ich die DB Zugriffskomponenten, einen Navigator, ein Grid(eine Art Tabelle). Die Datenzugriffskomponenten bieten mir eine Query-Object an in dieses das Select für die Mitgliedertabelle schreibe. Nach etwa 10 Minuten ist die Anwendung fertig. Ich kann neue Mitglieder aufnehmen, Mitlgieder bearbeiten, und die Datenmänge navigieren, Mitglieder löschen und nach jeder Spalte im Grid sortieren. Dabei habe ich keine Zeile code geschrieben. Lediglich das Select SQL. Die Datenzugriffskomponenten erzeugen selbstständig das SQL für Update, Edit und Delete, auch wenn es um eine gejointes Select handelt. Die Master-Tabelle ist dabei immer editable. Delphi kompiliert, linkt und zeigt mir gleich wenn ich Fehler gemacht habe. Wenn der Source Fehlerfrei ist, wird eine native .Exe erzeugt. Das meine ich mit Produktivität. Fairerweise muss ich sagen, Delphi kostet in der Anschaffung ca. 4000€(je nach Ausprägung) und ca. 1000€/Jahr Support. Zuzüglich Fremdkomponenten die man zwangläufig braucht wenn man professionelle Anwendungen die optisch ansprechend sind entwickelt.

                    Exakt das gleiche versuche ich jetzt über PHP, PDO, JavaScript, Ajax und Bootstrap zu realisieren. Der Aufwand um nur eine Mitgliedetabelle zu bedienen, ist mit diesen Werkzeugen enorm. Dennoch setzen die meisten auf Webanwendungen. Selbstverständlich würde ich auch in Werkzeuge investieren. Aktuell bin ich dabei die benötigten Werkzeuge zu finden.


                    Kommentar


                    • #11
                      Dafür wurden CMS und Websitebuilder geschaffen um effizienter zu arbeiten und die Komponenten nicht jedes Mal neu zu erfinden, ähnlich verhält es sich mit Frameworks wie Laravel. sie sollen dem Entwickler Arbeitszeit einsparen, wenn er sich ein mal eingearbeitet hat.
                      PHP kann man da eher als Rohprodukt bezeichnen.

                      Kommentar


                      • #12
                        Nach etwa 10 Minuten ist die Anwendung fertig. Ich kann neue Mitglieder aufnehmen, Mitlgieder bearbeiten, und die Datenmänge navigieren, Mitglieder löschen und nach jeder Spalte im Grid sortieren. Dabei habe ich keine Zeile code geschrieben.
                        Jaja die klickie welt.
                        ich war wirklich so naiv, dass ich davon ausging, du sprachst über die user experience beim nutzen deiner anwendung..

                        Wie üblich interessieren dich die anderen Punkte nicht, leider...

                        Kommentar


                        • #13
                          Off Topic....

                          Hi tomBuilder,

                          die Kurzfassung: Wenn die Umsetzung zu aufwendig ist, wird das Produkt zu teuer und man bekommt den Auftrag nicht.

                          Ich schätze dich sehr! Deshalb ist mir deine Meinung nicht egal!! Gerade Du und BlackScorp haben ein großen Anteil an meinem Wissen! Möglicherweise hast du mich missverstanden, zumindest hört sich dein Kommentar ziemlich enttäuscht an . Ich bin mir nicht sicher was dich dazu verleitet hat. Ich muss leider etwas ausholen um zu verdeutlichen was meine Intension ist.
                          Für den Gokart-Verein in dem mein Sohn fährt, möchte ich eine Trainings-Verwaltung als Webanwendung schreiben. Natürlich Ehrenamtlich. Jeder meiner Web-Projekte dienen dazu mich zu "zwingen" mich mit dem Web zu beschäftigen. Für die kleine Anwendung benötige ich das DB Schema:

                          DB Schema:
                          Benutzer(ID, Name, Vorname, Passwort, Rechte_Bitmaske)
                          Fahrer(ID, Name, Vorname, Adresse +1:n Kontaktdaten)
                          Trainer(D, Name, Vorname(Adresse +1:n Kontaktdaten)
                          Figuren(ID, Figurbezeichnung, Bild)
                          Saisonen(ID, Saison)
                          Trainings(ID, SaisonID, Datum) FK Saisonen
                          TrainingTraener(ID, TrainingID, TrainerID) FK Trainings, FK Trainer
                          TrainingFahrer(ID, TrainingID, FahrerID, TeamNr) FK Trainings, FK Fahrer
                          TrainingFiguren(ID, TrainingID, FigurenID) FK Trainings, FK Figuren
                          TrainingZeiten(ID, TrainingFahrerID, Start, Stopp) FK TrainingFahrer

                          Der Anwender meldet sich an, legt ein neues Training an, per Drag & Drop zieht er die Fahrer aus dem Pool in das Training und weist denen eine TeamNr zu. Dann zieht er per Drag & Drop die Trainer und die Figuren in das heutige Training rein.Wenn ein Lauf beginnt, wird der Timer des ersten Fahrer gestartet und wenn er das Ziel erreicht der Timer gestoppt. Das ist alles. Aus den gewonnen Daten können verschiedene Auswertungen erzeugt werden.

                          Wenn es ein offizieller Auftrag wäre würde diese Anwendung incl. Stammdatenerfassung ohne Auswertungen in Delphi in einem Tag fertigstellen werden können. Natürlich als geübter langjähriger Delphi Entwickler!
                          Als PHP fast Anfänger habe ich eine Woche gebraucht und habe NUR eine Form umgesetzt die Fahrer zu erfassen. Wenn ich es wiederholen soll, würde ich für das gleiche zwei Tage brauchen. Dazu habe ich das MVC(routen) paradigma eingesetzt. Ich habe einen DAL-Controller um die SQL Methoden für Select, Insert, Update und Delete mittels PDO. Ein Controller für die Methoden der Seitenaufrufe die über Routen ausgeführt werden, Twig für die html templates, Bootstrap für die Seitengestalltung, etwas Javascript, etwas jQuery und AJAX für das senden der Formulardaten an den DAL-Controller. Das alles ist Notwendig um die Fahrer in einer Bootstrap-Tabelle zu bearbeiten. Editiert wird über einen Bootstrap modalen Dialog. Was noch nicht enthalten ist, Sortierung auf Column Ebene und Pagination. Zu ca. 70% des Wissens dazu haben ich aus diesem Forum! Für dieses ich sehr sehr dankbar bin! Der gesamte Ablauf interessiert mich durchaus und ich werde auf jeden Fall weitermachen.

                          Wenn es ein offizieller Auftrag wäre, dürfte ich das so nicht machen denn dann wir die Anwendung zu teuer. Durch ein paar Hinweise wieder aus dem Forum habe ich weitergesucht und bin auf Lavarel gestoßen. Meine Begeisterung zu Lavarel ist gerademal zwei Tag jung. Die Arbeiten auch mit dem MVC paradigma. Sie verwenden einen ORMapper(Wollte ich nie einsetzen da ich Datenbanken gerne voll ausnutze) aber dadurch ist CRUD umgesetzt). Auch ein Derivat von Twig ist inkludiert. So wie ich das sehe, könnte dass das Werkzeug sein um produktive Webanwendung zu erzeugen. Mal sehen wie brauchbar das Teil ist.

                          Lieber tomBuilder, ich hoffe ich habe dich nicht verärgert.
                          Dir noch eine schöne Zeit.

                          Kommentar


                          • #14
                            Wirklich schade, dass Delphi for PHP aufgegeben wurde. Für solche Quick and Dirty Geschichten hätte das etwas werden können.

                            Kommentar


                            • #15
                              Delphi for PHP vermisse ich eigentlich nicht. PHPStorm ist sehr brauchbar. Was mich an Delphi ärgert ist, die Dokumentation sie ist sehr schlecht gepflegt und mit großen Löschern versehen. Der Sprachumfang von PHP ist gewaltig, ebenso die Community, die Dokumentation und die Beispiel die man findet. Deshalb kommt man sehr schnell rein.Delphi zeichnet seine Produktivität aus. Am Ende hat man eine ausführbare binäre .exe und benötigt kein Framework wie c.B.: c# oder Java. Eine .exe die von Windows 98 bis windows 10 einfach läuft ohne Setup ohne nix.

                              Kommentar

                              Lädt...
                              X