{"id":880,"date":"2018-02-23T11:17:13","date_gmt":"2018-02-23T10:17:13","guid":{"rendered":"http:\/\/evileu.de\/zum-schwarzen-pinguin\/?p=880"},"modified":"2018-02-23T14:19:06","modified_gmt":"2018-02-23T13:19:06","slug":"zusaetzliche-felder-in-breezingforms-nee-da-mach-ich-lieber-was-eigenes","status":"publish","type":"post","link":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/2018\/02\/23\/zusaetzliche-felder-in-breezingforms-nee-da-mach-ich-lieber-was-eigenes\/","title":{"rendered":"Zus\u00e4tzliche Felder in BreezingForms &#8211; nee, da mach ich lieber was eigenes"},"content":{"rendered":"<h2>BreezingForms machts einem nicht leicht<\/h2>\n<p>Also, ich sag das ja ungern, aber nach einigen Tagen fruchtloser Recherche bin ich fast soweit zu sagen: ich gebs auf. Was ich wollte: mein BreezingForms-Formular um ein dynamisches Feld erweitern, in dem entweder die ID oder der Titel des Rezeptes erscheint, von dem aus das Formular abgeschickt wurde. Im Prinzip sollte das mit einem versteckten Feld funktionieren, aber das liess sich bei mir nicht speichern &#8211; eine Einschr\u00e4nkung der Free Edition? Bei Crosstec war nichts zum Thema zu finden, direkten Support gibts dort nur gegen Cash. In den Joomla-Foren hab ich auch nichts zielf\u00fchrendes gefunden, vielleicht war mir auch nur Tante Google nicht gewogen, aber ich mach da jetzt erstmal einen Break und denke \u00fcber eine andere L\u00f6sung nach.<\/p>\n<h2>Doch was selbergestricktes?<\/h2>\n<p>K\u00f6nnte ja eigentlich so schwer nicht sein. Ich muss ja noch nicht mal unbedingt eine E-Mail schicken, mir w\u00fcrde es reichen wenn die Rezeptbewertungen in einer eigenen Tabelle gesammelt werden. Aber eben mit dem Titel bzw. der ID des Rezeptes, sonst ist die ganze Mechanik nichts wert. Ich zieh mich mal zur\u00fcck und gehe brainstormen. Schaun mer amal, was dabei herauskommt.<\/p>\n<h2>Wir fangen mal mit dem Sourcerer an<\/h2>\n<p>Ein kleines HTML-Formular ist schnell gestrickt, das sieht jetzt mal im ersten Ansatz so aus:<\/p>\n<p>&lt;form action=&#8220;#&#8220; method=&#8220;post&#8220;&gt;<br \/>\nIhre Meinung ist mir wichtig &#8211; bitte bewerten Sie dieses Rezept!&lt;br&gt;<br \/>\n&lt;!&#8211; Radio buttons f\u00fcr Wahl der Bewertung &#8211;&gt;<br \/>\n&lt;input type=&#8220;radio&#8220; name=&#8220;Bewertung&#8220; value=&#8220;War nix&#8220;&gt;War nix&lt;br&gt;<br \/>\n&lt;input type=&#8220;radio&#8220; name=&#8220;Bewertung&#8220; value=&#8220;War prima&#8220;&gt;War prima&lt;br&gt;<br \/>\n&lt;input type=&#8220;submit&#8220; name=&#8220;absenden&#8220; value=&#8220;Bewertung absenden&#8220;&gt;<br \/>\n&lt;\/form&gt;<\/p>\n<p>Einfach zwei Radiobuttons und ein &#8222;absenden&#8220;-Button, mehr ist nicht dran. Der erste Ansatz zum Auswerten w\u00e4re dann dieser:<\/p>\n<p>&lt;?php<\/p>\n<p>if (isset($_POST[&#8218;absenden&#8216;])){<br \/>\nif (isset($_POST[&#8218;Bewertung&#8216;])){<br \/>\n$note = $_POST[&#8218;Bewertung&#8216;];<br \/>\necho &#8222;Vielen Dank f\u00fcr Ihre Bewertung: &#8222;.$note;<\/p>\n<p><strong>\u00a0\/\/hier kommt die Mechanik f\u00fcrs Wegschreiben hin<\/strong><\/p>\n<p>}<br \/>\nelse{<br \/>\necho &#8222;Bitte eine Bewertung ausw\u00e4hlen!&#8220;;<br \/>\n}<br \/>\n}<br \/>\n?&gt;<\/p>\n<h2>Was brauchen wir noch?<\/h2>\n<p>Die ID\/den Titel des Rezepts. Na dann mal ran, das hatten wir alles so oder \u00e4hnlich schonmal, wir holen uns aus der JFactory die aktuelle Artikel-ID, und aus der Query das Feld title:<\/p>\n<p><em>$article_id = JFactory::getApplication()-&gt;input-&gt;get(&#8218;id&#8216;);<br \/>\n<\/em>$db=JFactory::getDbo();<br \/>\n<em>$db-&gt;setQuery(&#8217;select title from #__content where id= &#8218;.$article_id.&#8220;);<\/em><br \/>\n<em>$title=$db-&gt;loadResult();<\/em><\/p>\n<p>Bitte, da haben wir doch alles was wir brauchen!<\/p>\n<h2>Jetzt k\u00f6nnte man zum Beispiel schon eine Mail zusammenbasteln:<\/h2>\n<p><em>\/\/ Die Nachricht<\/em><br \/>\n<em>$nachricht = $article_id.&#8220; &#8222;.$title.&#8220; &#8222;.$note.&#8220; &#8222;.$datum;<br \/>\n$nachricht = wordwrap($nachricht, 70);<\/em><\/p>\n<p><em>\/\/ Send<\/em><br \/>\n<em>mail(&#8218;benutzer@example.com&#8216;, &#8218;Rezeptbewertung&#8216;, $nachricht);<\/em><\/p>\n<p>Und das wars auch schon! In meinem Mailtodisk-Output kommt dabei Folgendes an:<\/p>\n<p><em>To: benutzer@example.com<\/em><br \/>\n<em>Subject: Rezeptbewertung<\/em><br \/>\n<em>X-PHP-Originating-Script: 0:sourcerer_php_640dafb7b21f4d69df5677f28a8472eb<\/em><\/p>\n<p><em>31 Schweinsbarten mit Sourcerer War prima 22-02-2018<\/em><\/p>\n<p>Das ist genau das, was ich wollte, mir reicht dieser spartanische Output v\u00f6llig, steht alles drin was ich wissen muss.<\/p>\n<h2>Wollen wirs noch in die Datenbank schreiben?<\/h2>\n<p>Klar wollen wir! Wir legen erstmal eine kleine Tabelle namens rezeptbewertungen an:<\/p>\n<p>CREATE TABLE `jsite`.`<strong>rezeptbewertungen<\/strong>` ( `Datum` TEXT NULL , `artikelid` TEXT NULL , `artikeltitel` TEXT NULL , `note` TEXT NULL ) ENGINE = InnoDB;<\/p>\n<p>Viele Wege f\u00fchren nach Rom, ich hab mich f\u00fcr insertObject() entschieden. Daf\u00fcr holen wir uns ein neues Objekt der stdClass und belegen es mit unseren Feldnamen aus der Tabelle (Gro\u00df- und Kleinschreibung beachten!). Die Values f\u00fcr den Insert haben wir ja schon parat, die liegen alle auf <strong>Variablen<\/strong>, die schreiben wir einfach rein:<\/p>\n<p><em>$data = new stdClass();<\/em><br \/>\n\/\/Objekt f\u00fcllen<br \/>\n<em>$data-&gt;Datum = <strong>$datum<\/strong>;<\/em><br \/>\n<em>$data-&gt;artikelid = <strong>$article_id<\/strong>;<\/em><br \/>\n<em>$data-&gt;artikeltitel = <strong>$title<\/strong>;<\/em><br \/>\n<em>$data-&gt;note = <strong>$note<\/strong>;<\/em><\/p>\n<p><em>$tablename = &#8222;rezeptbewertungen&#8220;;<\/em><\/p>\n<p>\/\/Insert ausf\u00fchren<br \/>\n<em>$db = JFactory::getDBO();<\/em><br \/>\n<em>$db-&gt;<strong>insertObject($tablename, $data)<\/strong>;<\/em><br \/>\n<em>$result = $db-&gt;query();<br \/>\n<\/em><br \/>\n\/\/Erfolgsmeldung ausgeben<br \/>\n<em>if ($result == true) {<\/em><br \/>\n<em>echo &#8218;Datensatz erfolgreich gespeichert!&#8216;;<\/em><br \/>\n<em>}else{<\/em><br \/>\n<em>echo &#8218;Fehler beim Insert!&#8216;;<\/em><br \/>\n<em>}<\/em><\/p>\n<p>Das wars schon!<\/p>\n<h2>Bilanz<\/h2>\n<p>Wir haben jetzt eine Mechanik, die eine E-Mail aus den relevanten Daten des Bewertungsformulars baut und diese auch in unsere eigene Tabelle wegschreibt. Was noch fehlt: jetzt m\u00fcsste man das ganze Spiel noch in den Override f\u00fcr die Artikel einbauen, und zwar <strong>mit<\/strong> der Abfrage, ob wir denn ein Rezept sind, weil nur dann das Bewertungsformular auch angezeigt werden soll. Daf\u00fcr denke ich sollte man ein Modul basteln, in das das Formular mit der ganzen Mail- und Insert-Logik eingebaut wird, und dieses dann im default-Override an geeigneter Stelle einf\u00fcgen. Wie das geht, habe ich <a href=\"http:\/\/evileu.de\/zum-schwarzen-pinguin\/2018\/02\/22\/haett-ich-doch-beinah-uebersehen-das-bewertungsformular\/\">im vorigen Artikel<\/a> anhand des BreezingForm-Moduls schon beschrieben, das sollte ganz genau so funktionieren. Viel Spa\u00df beim Ausprobieren!<\/p>\n<h2>Anmerkung zur E-Mail-Verschleierung<\/h2>\n<p>Falls in ihrem Mailoutput so etwas ankommt, hat die eingebaute E-Mail-Verschleierung von Joomla gegriffen:<\/p>\n<blockquote><p><em>To: Diese E-Mail-Adresse ist vor Spambots gesch\u00fctzt! Zur Anzeige muss JavaScript eingeschaltet sein!\u00a0\u00a0\u00a0\u00a0 document.getElementById(&#8218;cloakc1626f4c69a0a7ef61ea78b168523217&#8216;).innerHTML = &#8220;;\u00a0\u00a0\u00a0\u00a0 var prefix = &#8218;ma&#8216; + &#8218;il&#8216; + &#8218;to&#8216;;\u00a0\u00a0\u00a0\u00a0 var path = &#8218;hr&#8216; + &#8218;ef&#8216; + &#8218;=&#8216;;\u00a0\u00a0\u00a0\u00a0 var addyc1626f4c69a0a7ef61ea78b168523217 = &#8218;benutzer&#8216; + &#8218;@&#8216;;\u00a0\u00a0\u00a0\u00a0 addyc1626f4c69a0a7ef61ea78b168523217 = addyc1626f4c69a0a7ef61ea78b168523217 + &#8218;example&#8216; + &#8218;.&#8216; + &#8218;com&#8216;;\u00a0\u00a0\u00a0\u00a0 var addy_textc1626f4c69a0a7ef61ea78b168523217 = &#8218;benutzer&#8216; + &#8218;@&#8216; + &#8218;example&#8216; + &#8218;.&#8216; + &#8218;com&#8216;;document.getElementById(&#8218;cloakc1626f4c69a0a7ef61ea78b168523217&#8216;).innerHTML += &#8218;&lt;a &#8218; + path + &#8218;\\&#8220; + prefix + &#8218;:&#8216; + addyc1626f4c69a0a7ef61ea78b168523217 + &#8218;\\&#8216;&gt;&#8217;+addy_textc1626f4c69a0a7ef61ea78b168523217+'&lt;\\\/a&gt;&#8216;;<\/em><br \/>\n<em>Subject: Rezeptbewertung<\/em><br \/>\n<em>X-PHP-Originating-Script: 0:sourcerer_php_ec1d4b855a01f009702bc4b9389cf683<\/em><\/p>\n<p><em>33 Kartofflebrei mit Title War nix 23.02.2018<\/em><\/p><\/blockquote>\n<p>Kann man auch ausschalten, daf\u00fcr das Plugin Inhalt &#8211; E-Mail &#8211; Verschleierung deaktivieren, dann kommts wieder im Klartext, wenn man das will:<\/p>\n<blockquote><p>To: benutzer@example.com<br \/>\nSubject: Rezeptbewertung<br \/>\nX-PHP-Originating-Script: 0:sourcerer_php_71e38a5d68ac0a27865028e9085819ea<\/p>\n<p>33 Kartofflebrei mit Title War prima 23.02.2018<\/p><\/blockquote>\n<table id=\"pluginList\" class=\"table table-striped\">\n<tbody>\n<tr class=\"row0\">\n<td>Inhalt &#8211; E-Mail-Verschleierung<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>BreezingForms machts einem nicht leicht Also, ich sag das ja ungern, aber nach einigen Tagen fruchtloser Recherche bin ich fast soweit zu sagen: ich gebs auf. Was ich wollte: mein BreezingForms-Formular um ein dynamisches Feld erweitern, in dem entweder die ID oder der Titel des Rezeptes erscheint, von dem aus das Formular abgeschickt wurde. Im [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[36,35],"tags":[],"_links":{"self":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/880"}],"collection":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/comments?post=880"}],"version-history":[{"count":9,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/880\/revisions"}],"predecessor-version":[{"id":889,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/880\/revisions\/889"}],"wp:attachment":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/media?parent=880"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/categories?post=880"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/tags?post=880"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}