{"id":457,"date":"2017-05-13T18:01:27","date_gmt":"2017-05-13T16:01:27","guid":{"rendered":"http:\/\/evileu.de\/zum-schwarzen-pinguin\/?p=457"},"modified":"2017-05-14T12:30:47","modified_gmt":"2017-05-14T10:30:47","slug":"tabelleneditor-nachschlag-adressenliste-als-ausgangspunkt","status":"publish","type":"post","link":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/2017\/05\/13\/tabelleneditor-nachschlag-adressenliste-als-ausgangspunkt\/","title":{"rendered":"Tabelleneditor Nachschlag: Adressenliste als Ausgangspunkt"},"content":{"rendered":"<h2>Ihr Wunsch ist mir Befehl: Tabellarische Adressenliste<\/h2>\n<p>Ich bin gebeten worden, einmal exemplarisch darzustellen, wie man den Tabelleneditor ausgehend von einer Liste aller Mitglieder aufruft. Das ist jetzt zwar echt wieder reines PHP, aber wenns gew\u00fcnscht wird, na bitte, dann machen wir das auch noch. Wie soll das ganze aussehen? Also, zuerst zeigen wir mal eine Liste ausgew\u00e4hlter Mitgliederdaten an. In jeder Tabellenzeile soll es einen &#8222;Edit&#8220;-Button geben, und der soll das Tabelleneditorfenster zum aktuellen Datensatz aufmachen, hier die Funktionalit\u00e4t wie gehabt mit editieren und speichern der einzelnen Felder. Von hier aus solls auch wieder zur\u00fcckgehen in die tabellarische \u00dcbersicht. Soweit OK?<\/p>\n<p>Damit das nicht langweilig wird, arbeiten wir mit einer zweiten PHP-Datei f\u00fcr das Editor-Fenster, da kommen dann noch ein paar kleine Tricks mit dazu, wie man die WordPress-Funktionalit\u00e4t in eigenen PHP-Skripten nutzen kann, aber dazu sp\u00e4ter mehr, jetzt fangen wir mal ganz langsam an.<\/p>\n<h2>Die Ausgangsbasis: Tabellarische Mitgliederliste<\/h2>\n<p>Das ist auch nichts Neues, wir lassen einen Select* auf unsere Adressentabelle los und bauen uns erstmal eine tabellarische Ausgabe ausgew\u00e4hlter Felder. Das haben wir schon oft genug gemacht, das stell ich mal kommentarlos hier hin.<\/p>\n<p><em>\/*****Haupttabelle Name als Konstante definieren*******\/<\/em><br \/>\n<em>\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0define(&#8222;MAINTABLE&#8220;,&#8220;mitglieder_stamm&#8220;);<\/em><br \/>\n<em>\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo &#8222;&lt;h2&gt;Mitglieder Adressenliste&lt;\/h2&gt;&#8220;;<\/em><br \/>\n<em>\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo &#8222;Aktuelle Tabelle =&amp;nbsp&#8220;.MAINTABLE.&#8220;&lt;br&gt;&#8220;;<\/em><br \/>\n<em>\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0<\/em><br \/>\n<em>\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/Originalcode alle Datens\u00e4tze holen<\/em><br \/>\n<em>\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0global $wpdb;<\/em><br \/>\n<em>\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$alleposts = $wpdb-&gt;get_results( &#8222;SELECT * from &#8222;.MAINTABLE.&#8220;&#8220;);<\/em><\/p>\n<p><em>echo &#8222;&lt;table&#8216;&gt;&#8220;;\u00a0\u00a0 \u00a0<\/em><br \/>\n<em>\u00a0\u00a0 \u00a0<\/em><br \/>\n<em>\u00a0\u00a0 \u00a0\/\/ Titelzeile ausgeben<\/em><br \/>\n<em>\u00a0\u00a0 \u00a0echo &#8222;&lt;thead&gt;&#8220;;<\/em><br \/>\n<em>\u00a0\u00a0 \u00a0echo &#8222;&lt;th&gt;ID&lt;\/th&gt;&lt;th&gt;Vorname&lt;\/th&gt;&lt;th&gt;Nachname&lt;\/th&gt;&lt;th&gt;PLZ&lt;\/th&gt;&lt;th&gt;Ort&lt;\/th&gt;&lt;th&gt;StrasseHausnr&lt;\/th&gt;&#8220;;<\/em><br \/>\n<em>\u00a0\u00a0 \u00a0echo &#8222;&lt;\/thead&gt;&#8220;;<\/em><\/p>\n<p><em>\u00a0\u00a0 \u00a0echo &#8222;&lt;tbody&gt;&#8220;;<\/em><br \/>\n<em>\u00a0\u00a0 \u00a0\/\/Eine Zeile pro Datensatz ausgeben<\/em><br \/>\n<em>\u00a0\u00a0 \u00a0foreach ( $alleposts as $einpost ) { \u00a0\u00a0 \u00a0<\/em><br \/>\n<em>\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0<\/em><br \/>\n<em>\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo &#8222;&lt;tr&gt;&lt;td&gt;&#8220;.$einpost-&gt;id.&#8220;&lt;\/td&gt;&#8220;;<\/em><br \/>\n<em>\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo &#8222;&lt;td&gt;&#8220;.$einpost-&gt;vorname.&#8220;&lt;\/td&gt;&#8220;;<\/em><br \/>\n<em>\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo &#8222;&lt;td&gt;&#8220;.$einpost-&gt;nachname.&#8220;&lt;\/td&gt;&#8220;;<\/em><br \/>\n<em>\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo &#8222;&lt;td&gt;&#8220;.$einpost-&gt;plz.&#8220;&lt;\/td&gt;&#8220;;<\/em><br \/>\n<em>\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo &#8222;&lt;td&gt;&#8220;.$einpost-&gt;ort.&#8220;&lt;\/td&gt;&#8220;;<\/em><br \/>\n<em>\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo &#8222;&lt;td&gt;&#8220;.$einpost-&gt;strassehausnummer.&#8220;&lt;\/td&gt;&#8220;;<\/em><br \/>\n<em>\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo &#8222;&lt;\/tr&gt;&#8220;;<\/em><br \/>\n<em>\u00a0\u00a0 \u00a0}<\/em><br \/>\n<em>\u00a0\u00a0 \u00a0echo &#8222;&lt;\/tbody&gt;&#8220;;<\/em><br \/>\n<em>echo &#8222;&lt;\/table&gt;&#8220;;<\/em><br \/>\n<em>\/\/Ende Originalcode Datens\u00e4tze holen<\/em><\/p>\n<h2>Wo kommt jetzt unser &#8222;Edit&#8220;-Button hin?<\/h2>\n<p>In ein Formular nat\u00fcrlich. Das wickeln wir wieder in unsere Foreach-Schleife mit ein, mit einer entscheidenden \u00c4nderung: das Formular kriegt einen Action-Tag, in dem wird definiert, welche Datei beim Klicken auf den Submit-Button aufgerufen werden soll. Das sieht so aus:<\/p>\n<p><em>foreach ( $alleposts as $einpost ) { \u00a0\u00a0 \u00a0<\/em><br \/>\n<em>\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0<\/em><br \/>\n<em>\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo &#8218;&lt;form method=&#8220;post&#8220; <strong>action = &#8222;&#8218;.$meinplugin_URL.'&#8220;<\/strong>&gt;&#8216;;<\/em><br \/>\n<em>\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo &#8222;&lt;tr&gt;&lt;td&gt;ID: &amp;nbsp&#8220;.$einpost-&gt;id.&#8220;&lt;input type=&#8217;text&#8216; name=&#8217;id&#8216; value = &#8222;.$einpost-&gt;id.&#8220; hidden\/&gt;&lt;\/td&gt;&#8220;;<\/em><br \/>\n<em>\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo &#8222;&lt;td&gt;&#8220;.$einpost-&gt;vorname.&#8220;&lt;\/td&gt;&#8220;;<\/em><br \/>\n<em>\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo &#8222;&lt;td&gt;&#8220;.$einpost-&gt;nachname.&#8220;&lt;\/td&gt;&#8220;;<\/em><br \/>\n<em>\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo &#8222;&lt;td&gt;&#8220;.$einpost-&gt;plz.&#8220;&lt;\/td&gt;&#8220;;<\/em><br \/>\n<em>\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo &#8222;&lt;td&gt;&#8220;.$einpost-&gt;ort.&#8220;&lt;\/td&gt;&#8220;;<\/em><br \/>\n<em>\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo &#8222;&lt;td&gt;&#8220;.$einpost-&gt;strassehausnummer.&#8220;&lt;\/td&gt;&#8220;;<\/em><br \/>\n<em>\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0<strong>echo &#8218;&lt;td&gt;&lt;input type=&#8220;submit&#8220; name = &#8222;edit&#8220; value=&#8220;Edit&#8220;\/&gt;&#8216;;<\/strong><\/em><br \/>\n<em>\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo &#8218;&lt;\/form&gt;&lt;\/td&gt;&#8216;;<\/em><br \/>\n<em>\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo &#8222;&lt;\/tr&gt;&#8220;;<\/em><br \/>\n<em>\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0<\/em><br \/>\n<em>\u00a0\u00a0 \u00a0} \/\/ end foreach<\/em><\/p>\n<h2>Definition der aufzurufenden PHP-Datei<\/h2>\n<p>Hoppala! Was hat das <em><strong>$meinplugin_URL<\/strong><\/em> zu bedeuten? Das ist eine Variable, auf die ich vorher die aufzurufende Datei mit dem kompletten Pfad gelegt habe. Die Variablendefinition sieht so aus:<\/p>\n<p><em>\/*Pfad zum plugin-Verzeichnis*\/<\/em><br \/>\n<em>$meinplugin_URL = <strong>plugins_url()<\/strong>;<\/em><br \/>\n<em>\/*Verzeichnis des aktuellen Plugins dranh\u00e4ngen*\/<\/em><br \/>\n<em>$meinplugin_URL=$meinplugin_URL.&#8216;<strong>\/adresse-tabelle\/edit-adresse.php<\/strong>&#8218;;<\/em><\/p>\n<p>Ich hole mir erst mit der Funktion <em><strong>plugins_url() <\/strong><\/em>den Pfad zum Plugins-Verzeichnis meiner WordPress-Instanz. Dann h\u00e4nge ich noch das Verzeichnis meines Plugins und den Namen der aufzurufenden Datei dran. Die Datei muss nat\u00fcrlich existieren, deswegen legen wir sie uns zum Testen jetzt einfach an. Sie muss erstmal gar nix machen ausser:<\/p>\n<p>&lt;?php<br \/>\necho &#8222;Ich bin die Datei edit-adresse.php&#8220;;<br \/>\n?&gt;<\/p>\n<p>Soweit alles Roger? Wenn das Plugin aktiviert ist, sollte es jetzt etwa so aussehen:<\/p>\n<div id=\"attachment_460\" style=\"width: 461px\" class=\"wp-caption alignnone\"><img aria-describedby=\"caption-attachment-460\" decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-460\" src=\"http:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2017\/05\/adressenliste_edit.jpg\" alt=\"adressenliste_edit\" width=\"451\" height=\"357\" srcset=\"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2017\/05\/adressenliste_edit.jpg 451w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2017\/05\/adressenliste_edit-300x237.jpg 300w\" sizes=\"(max-width: 451px) 100vw, 451px\" \/><p id=\"caption-attachment-460\" class=\"wp-caption-text\">adressenliste_edit<\/p><\/div>\n<h2>Und was kommt bei Klick auf einen Edit-Button?<\/h2>\n<p>Nicht viel, wir haben ja nicht viel gemacht. Ein grosses weisses Browserfenster, auf dem nur steht:<\/p>\n<p><em>Ich bin die Datei edit-adresse.php<\/em><\/p>\n<p>Wo ist unsere WordPress-Umgebung hinverschwunden? Header und Sidebars und das Titelbild und alles &#8211; nix da, aber auch gar nix. Tscha, so einfach ist das nicht mit unserer &#8222;nackerten&#8220; PHP-Datei, aber darum k\u00fcmmern wir uns sp\u00e4ter, jetzt geht es erstmal um die Funktionalit\u00e4t.<\/p>\n<h2>Wir brauchen die ID des aktuellen Datensatzes!<\/h2>\n<p>Und die kriegen wir auch, n\u00e4mlich aus unserem abgeschickten Formular. Wir erg\u00e4nzen die Datei edit-adresse.php so:<\/p>\n<p><em>&lt;?php<\/em><br \/>\n<em><strong>$akt_id = $_POST[&#8222;id&#8220;];<\/strong><\/em><br \/>\n<em>echo &#8222;Ich bin die Datei edit-adresse.php und die aktuelle ID ist: &amp;nbsp&#8220;.<strong>$akt_id<\/strong>;<\/em><br \/>\n<em>?&gt;<\/em><\/p>\n<p>F\u00fcr das <em><strong>$_POST[&#8222;id&#8220;]<\/strong><\/em> muss nat\u00fcrlich der Feldname aus dem Formular stimmen, sonst klappt das nicht. Aber wenn das alles hinhaut, sollte die Ausgabe jetzt so aussehen:<\/p>\n<p><em>Ich bin die Datei edit-adresse.php und die aktuelle ID ist:\u00a0 7<br \/>\n<\/em><\/p>\n<p>Vorausgesetzt, sie haben den Datensatz mit der ID 7 angeklickt. Also, damit kann man jetzt arbeiten. Wir zeigen den Datensatz zur aktuellen ID an und machens mit dem editieren und speichern ganz genauso wie im vorigen Plugin. Oder doch nicht?<\/p>\n<h2>Uns fehlt noch das wpdb-Objekt!<\/h2>\n<p>Das steht n\u00e4mlich in unserer Datei<em> edit-adresse.php<\/em> so wie sie ist erstmal nicht zur Verf\u00fcgung. Noch nicht, wir holen uns die Funktionalit\u00e4t schon noch, aber dazu gibts einen neuen Beitrag.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ihr Wunsch ist mir Befehl: Tabellarische Adressenliste Ich bin gebeten worden, einmal exemplarisch darzustellen, wie man den Tabelleneditor ausgehend von einer Liste aller Mitglieder aufruft. Das ist jetzt zwar echt wieder reines PHP, aber wenns gew\u00fcnscht wird, na bitte, dann machen wir das auch noch. Wie soll das ganze aussehen? Also, zuerst zeigen wir mal [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[20,21,11,4,8,2],"tags":[],"_links":{"self":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/457"}],"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=457"}],"version-history":[{"count":5,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/457\/revisions"}],"predecessor-version":[{"id":464,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/457\/revisions\/464"}],"wp:attachment":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/media?parent=457"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/categories?post=457"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/tags?post=457"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}