{"id":1676,"date":"2023-03-22T16:19:56","date_gmt":"2023-03-22T15:19:56","guid":{"rendered":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/?p=1676"},"modified":"2023-03-22T16:19:56","modified_gmt":"2023-03-22T15:19:56","slug":"stichwortverzeichnis-negativliste-wir-basteln-uns-einen-tabelleneditor","status":"publish","type":"post","link":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/2023\/03\/22\/stichwortverzeichnis-negativliste-wir-basteln-uns-einen-tabelleneditor\/","title":{"rendered":"Stichwortverzeichnis Negativliste: wir basteln uns einen Tabelleneditor"},"content":{"rendered":"<p>Ich bin mir ziemlich sicher dass ich sowas in der Art schon mal gemacht habe, aber ich finde es nicht mehr. Na ja, das \u00fcbt und ist eine h\u00fcbsche kleine Finger\u00fcbung. Ich mach mal einen kurzen PAP:<\/p>\n<ul>\n<li>Die Tabelle f\u00fcr die Negativliste wird beim Setup des Stichwort-Plugins mit angelegt und mit einigen wenigen Beispieleintr\u00e4gen bef\u00fcllt. Jedenfalls gehe ich davon aus, dass sie schon existiert.<\/li>\n<li>Es gibt einen neuen Admin-Men\u00fcpunkt Negativliste bearbeiten. Hier wird die existierende Liste tabellarisch angezeigt.<\/li>\n<li>Es gibt bei jedem Datensatz einen Button &#8222;L\u00f6schen&#8220; (mit R\u00fcckfrage)<\/li>\n<li>Es gibt unterhalb der Tabelle einen Button &#8222;Neues Wort eintragen&#8220;<\/li>\n<li>Die Buttons machen jeweils eine Unterseite auf, auf der die gew\u00e4hlte Aktion nochmal best\u00e4tigt wird.<\/li>\n<\/ul>\n<p>Das wars eigentlich schon. Dann wollen wir mal. Zuerst kommen die Eintr\u00e4ge f\u00fcr das Admin-Men\u00fc:<\/p>\n<pre>add_action('admin_menu', 'negativliste_plugin_setup_menu');\r\n\r\nfunction negativliste_plugin_setup_menu(){\r\nadd_menu_page( 'Negativliste', 'Negativliste bearbeiten', 'manage_options', 'negativliste', 'negativliste_init' );\r\nadd_submenu_page('Negativliste', 'Eintragen', 'Eintragen', 'manage_options', 'eintragen', 'eintragen_function');\r\nadd_submenu_page('Negativliste', 'Loeschen', 'Loeschen', 'manage_options', 'loeschen', 'loeschen_function');\r\n}<\/pre>\n<p>Schauen wir uns als erstes mal die Funktion negativliste_init an. Zuerst wird gecheckt, ob die Tabelle negativliste schon vorhanden ist:<\/p>\n<pre>\/\/\u00dcberpr\u00fcfen ob Tabelle schon existiert\r\n$table_exists = $wpdb-&gt;get_var( \"SHOW TABLES LIKE 'negativliste'\" ); \r\n\r\nif ($table_exists == \"\") {\r\necho \"Tabelle negativliste existiert noch nicht\";\r\n... (hier kann die Tabelle neu erstellt werden)\r\n\r\n\r\n<\/pre>\n<p>Da muss ich nochmal ran, eigentlich sollte die Tabelle beim Initialisieren des Plugins Stichworttabelle mit angelegt werden. Hier nur mal Interessehalber der Code zum Erstellen:<\/p>\n<pre>\/\/Begin function tabelle_erzeugen - legt die Tabelle negativliste mit einem Feld \"wort\" an\r\nfunction tabelle_erzeugen(){\r\n\r\nglobal $wpdb;\r\n\r\n$charset_collate = $wpdb-&gt;get_charset_collate();\r\n\r\n$sql = \"CREATE TABLE negativliste (\r\nwort text\r\n) $charset_collate;\";\r\n\r\nrequire_once( ABSPATH . 'wp-admin\/includes\/upgrade.php' );\r\ndbDelta( $sql );\r\n\r\n} \/\/End function tabelle_erzeugen\r\n<\/pre>\n<p>Interessant wirds im Else-Zweig der Funktion, da\u00a0 kommt die Datenbankabfrage und der Aufbau der Tabelle zur Anzeige. Ich schau erst mal nach, ob die Tabelle \u00fcberhaupt Datens\u00e4tze hat und baue die Tabelle nur auf, wenn es mehr als 0 Datens\u00e4tze sind:<\/p>\n<pre>function tabelle_bearbeiten(){\r\n\r\nglobal $wpdb;\r\n\/\/Datens\u00e4tze z\u00e4hlen &amp; Ausgabe Anzahl\r\n$count_query = \"select count(*) from negativliste\";\r\n$num = $wpdb-&gt;get_var($count_query);\r\necho $num.\"&amp;nbsp Eintr\u00e4ge gefunden&lt;\/br&gt;\";\r\n\r\nif ($count_query &lt;&gt; 0) {\r\n\r\n$anzeige_query = $wpdb-&gt;get_results(\"SELECT wort FROM negativliste ORDER BY wort\");\r\n...<\/pre>\n<p>So wird der Tabellenhead zusammengebaut:<\/p>\n<pre>echo \"&lt;table border='1' cellpadding='5'&gt;\r\n&lt;tr&gt;\r\n&lt;th&gt;Wort&lt;\/th&gt;\r\n&lt;th&gt;delete&lt;\/th&gt;\r\n&lt;\/tr&gt;\";<\/pre>\n<p>Danach steppe ich durch alle gefundenen Datens\u00e4tze durch und baue ein Formular mit einem L\u00f6schen-Button zusammen. Der Button ruft die Unterseite loeschen auf und gibt als Parameter das aktuelle Wort mit.<\/p>\n<pre>echo \"&lt;form method='post'&gt;\";\r\nforeach ($anzeige_query as $dsatz) {\r\necho \"&lt;tr&gt;\";\r\n$id = $dsatz-&gt;wort;\r\n\r\necho \"&lt;td&gt;\" . $dsatz-&gt;wort . \"&lt;\/td&gt;\";\r\necho \"&lt;\/td&gt;\" .\r\n\"&lt;td&gt;&lt;input type='submit' name='l\u00f6schen' formaction='admin.php?page=loeschen&amp;aktuell=\".$id.\"' value='l\u00f6schen'&gt;&lt;\/td&gt;\" .\r\n\r\n\"&lt;\/tr&gt;\";\r\n}\/\/ ende von foreach dsatz\r\n\r\n<\/pre>\n<p>Jetzt kommt nur noch ein Link zur der Seite auf der man einen neuen Datensatz eintragen kann, dann wars das auch schon:<\/p>\n<pre>echo \"&lt;p&gt;&lt;input type='submit' name='eintragen' formaction='admin.php?page=eintragen' value='Neues Wort eintragen'&gt;&lt;\/p&gt;&lt;\/form&gt; \";<\/pre>\n<p>Jetzt fehlen noch die Funktionen zum Eintragen eines neuen Datensatzes und zum L\u00f6schen des gew\u00e4hlten Datensatzes. Zuerst die zum Eintragen:<\/p>\n<p>Zuerst wird ein kleines Formular aufgebaut: es gibt ein Textfeld, in das man das neue Wort eintragen kann, und einen Button zum Speichern. Wenn auf diesen Button geklickt wird, wird der Insert aufgerufen und kriegt das Wort als Parameter mit.<\/p>\n<pre>if (isset($_POST['neuesWortEintragen'])){\r\n\t\t\t$aktWort = $_POST[\"wort\"];\r\n\t\t\techo \"Neues Wort \".$aktWort.\" wird eingetragen\";\r\n\t\t\t\r\n\t\/\/ Insert-Anweisung erstellen\r\n    $check = $wpdb-&gt;insert( 'negativliste', array( 'wort' =&gt; ''.$aktWort.'' ) );\r\n\r\n    if($check) {\r\n        echo \"Ein neuer Datensatz erfolgreich hinzugef\u00fcgt\";\r\n    }\r\n\t} \/\/ ende von isset \r\n<\/pre>\n<p>Dann kommt noch ein Link zur\u00fcck zum Hauptformular, und das wars.<\/p>\n<p>&nbsp;<\/p>\n<pre>echo \"&lt;\/form&gt;\";\r\n\r\necho \"&lt;a href='admin.php?page=negativliste'&gt;Zur\u00fcck zur \u00dcbersicht&lt;\/a&gt;\";<\/pre>\n<p>Das Formular zum L\u00f6schen eines Datensatzes sieht ganz \u00e4hnlich aus, das Textfeld ist allerdings schreibgesch\u00fctzt, es dient nur zur Anzeige des als Parameter \u00fcbergebenen Worts.<\/p>\n<pre>function loeschen_function(){\r\n\r\nglobal $wpdb;\r\n\r\n$aktWort = $_GET['aktuell'];\r\necho $aktWort.\" wird gel\u00f6scht\";\r\n\r\necho \"&lt;h2&gt;&lt;L\u00f6schen&lt;\/h2&gt;\";\r\n\r\necho \"&lt;form action='admin.php?page=loeschen&amp;aktuell='\".$aktWort.\"' method='post'&gt;\";\r\necho \"&lt;p&gt;&lt;input name='wort' type='text' value = '$aktWort' readonly&gt;&lt;\/p&gt;\";\r\necho \"&lt;p&gt;&lt;input type='submit' name='WortLoeschen' value='Wort l\u00f6schen'&gt;&lt;\/p&gt;\";\r\n...<\/pre>\n<p>Wenn auf den Button &#8222;Wort L\u00f6schen&#8220; geklickt wird, triggert der Delete-Befehl:<\/p>\n<pre>if (isset($_POST['WortLoeschen'])){\r\n$aktWort = $_POST[\"wort\"];\r\necho \"Wort \".$aktWort.\" wird gel\u00f6scht&lt;\/br&gt;\";\r\n\r\n\/\/ Delete-Anweisung erstellen\r\n$check=$wpdb-&gt;query(\"DELETE FROM negativliste WHERE wort = '$aktWort'\");\r\n\r\nif($check) {\r\necho \"Ein Datensatz erfolgreich gel\u00f6scht\";\r\n}\r\necho \"&lt;\/form&gt;\";\r\n\r\n<\/pre>\n<p>Auch hier kommt noch der Link zur\u00fcck zur \u00dcbersicht, und das wars.\u00a0 Jetzt fehlen noch ein paar Screenshots, aber daf\u00fcr gibts einen neuen Beitrag.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ich bin mir ziemlich sicher dass ich sowas in der Art schon mal gemacht habe, aber ich finde es nicht mehr. Na ja, das \u00fcbt und ist eine h\u00fcbsche kleine Finger\u00fcbung. Ich mach mal einen kurzen PAP: Die Tabelle f\u00fcr die Negativliste wird beim Setup des Stichwort-Plugins mit angelegt und mit einigen wenigen Beispieleintr\u00e4gen bef\u00fcllt. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[1,20,21,11,7,4,8,63,2],"tags":[],"_links":{"self":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/1676"}],"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=1676"}],"version-history":[{"count":19,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/1676\/revisions"}],"predecessor-version":[{"id":1695,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/1676\/revisions\/1695"}],"wp:attachment":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/media?parent=1676"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/categories?post=1676"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/tags?post=1676"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}