1. Herzlich willkommen bei WPDE.org, dem grössten und ältesten deutschsprachigen Community-Forum rund um das Thema WordPress. Du musst angemeldet oder registriert sein, um Beiträge verfassen zu können.
    Information ausblenden

Klasse WP_Widget: Abspeichern von Änderungen ?

Dieses Thema im Forum "Plugins und Widgets" wurde erstellt von maksimilian, 21. Mai 2017.

  1. maksimilian

    maksimilian Well-Known Member

    Registriert seit:
    3. Februar 2015
    Beiträge:
    114
    Zustimmungen:
    0
    Hallo Ihr,

    gibt es eine Methode, mit welcher in der Funktion update() des von der Klasse WP_Widget abgeleiteten Widgets geänderte Optionen in einer eigenen Datenbanktabelle gespeichert werden können ? Ich habe diverse Methoden ausprobiert, aber die richtige bisher nicht gefunden.

    Was passiert, wenn im Aufruf des Widgets im Admin-Bereich der Homepage (Design > Widgets) der Speichern-Button betätigt wird. Diesen Button programmiert man ja nicht selbst.

    maksimilian
     
  2. b3317133

    b3317133 Well-Known Member

    Registriert seit:
    21. November 2014
    Beiträge:
    11.681
    Zustimmungen:
    1.786
    Welche Methoden hast Du ausprobiert?

    Würde empfehlen, das Beispiel im Codex als Basis zu verwenden, die Parameter sind dort klar erklärt. Wenn man "Speichern" klickt, wird update() aufgerufen.

    PHP:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
     
  3. maksimilian

    maksimilian Well-Known Member

    Registriert seit:
    3. Februar 2015
    Beiträge:
    114
    Zustimmungen:
    0
    @ b3317133 #2

    Ich hatte u.a. versucht, in der Funktion update() der Widget-Definition eine eigene Prozedur aufzurufen, was nicht funktionierte (der NetBeans Trace steuert den gesetzten Haltepunkt in dieser Prozedur nicht an). Außerdem hatte ich mir aus den WP_Widget Methoden einige herausgesucht, deren Name nach "Sichern" aussieht wie update_callback(), save_settings(). Gut, dann versuche ich es nochmal mit update(). Ich dachte bisher, dass update() nur den Refresh der im Widget angezeigten Daten vornimmt. Ich habe im Internet bisher immer nur dieses von Dir zitierte Beispiel für update() gefunden. Mich irritiert, dass dort nie ein Abspeichern von Daten demonstriert wird.

    Wird die update-Methode von der Betätigung des Speichern-Buttons ausgelöst ?
     
  4. b3317133

    b3317133 Well-Known Member

    Registriert seit:
    21. November 2014
    Beiträge:
    11.681
    Zustimmungen:
    1.786
    Wenn man "Speichern" klickt, wird update() aufgerufen.

    Wenn Dein Widget lt. WordPress-Standard implementiert ist, speichert und lädt es die Daten automatisch, ohne eigene Datenbank-Tabelle.
     
  5. maksimilian

    maksimilian Well-Known Member

    Registriert seit:
    3. Februar 2015
    Beiträge:
    114
    Zustimmungen:
    0
    Das dachte ich mir bereits. In meinem jetzigen Fall handelt es sich aber um eine eigene Tabelle. Vielleicht kann ich das Standard Widget deshalb nicht verwenden.
     
  6. b3317133

    b3317133 Well-Known Member

    Registriert seit:
    21. November 2014
    Beiträge:
    11.681
    Zustimmungen:
    1.786
    Was genau hindert Dich daran, widget(), form() und update() zu verwenden, um darin Daten aus einer eigenen Tabelle zu lesen bzw. zu speichern?

    Und was genau hast Du bereits ausprobiert und was daran hat nicht funktioniert?
     
  7. maksimilian

    maksimilian Well-Known Member

    Registriert seit:
    3. Februar 2015
    Beiträge:
    114
    Zustimmungen:
    0
    Wenn ich es richtig verstehe, werden die Optionswerte in $instance transportiert. Wenn ich den Standard von WP_Widget, die Optionen in der Tabelle wp_options abzuspeichern, nicht verwende, habe ich das Problem, $instance zu versorgen. Die Methode update() erhält die geänderten Optionswerte in $new_instance, bei mir bisher nicht, wenn update() nach Speichern aufgerufen wird (was jetzt der Fall ist). Ich habe den Eindruck, dass die Verwendung des Standardwidgets WP_Widget nicht geeignet ist, wenn man einen eigenen Speicherort für die Optionen einführen will.
     
  8. strub

    strub Well-Known Member

    Registriert seit:
    4. Januar 2017
    Beiträge:
    158
    Zustimmungen:
    3
    Wenn Du die Daten in eine eigene Tabelle einfügen willst, würde ich nur die Datenbankanbindung von WP benutzen und den Rest wie die create, update, delete Aktionen selber machen. Da ersparst Du dir viel Zeit dich mit den verschleierten Funktionen und Klassen herumzukämpfen.

    Ich mache meistens eine Model, Factory und Action Klasse, somit ist alles schön getrennt und man weis genau wo man was finden kann und ohne grosse Doku versteht fast jeder was die Klasse macht oder wie man diese anwendet. Aber das ist natürlich Geschmacksache.
     
    #8 strub, 23. Mai 2017
    Zuletzt bearbeitet: 23. Mai 2017
  9. maksimilian

    maksimilian Well-Known Member

    Registriert seit:
    3. Februar 2015
    Beiträge:
    114
    Zustimmungen:
    0
    Vielleicht hilfst Du mir etwas auf die Sprünge. Sind Model, Factory und Action eingeführte Begriffe ? Kannst Du mir einen Link auf Beispiele geben ?

    Als Datenbankschnittstelle verwende ich dbDelta.
     
  10. b3317133

    b3317133 Well-Known Member

    Registriert seit:
    21. November 2014
    Beiträge:
    11.681
    Zustimmungen:
    1.786
    Poste doch mal Deinen Code von form() und update().

    dbDelta wird bei WordPress zum Erstellen oder Modifizieren der Struktur von Datenbanktabellen bei z.B. Plugin- oder Core-Updates verwendet. Zum Speichern/Lesen von Daten in diesen Tabellen verwendet man wpdb.
     
    #10 b3317133, 23. Mai 2017
    Zuletzt bearbeitet: 23. Mai 2017
  11. maksimilian

    maksimilian Well-Known Member

    Registriert seit:
    3. Februar 2015
    Beiträge:
    114
    Zustimmungen:
    0
    @ b3317133 #10

    Ich habe mal weitergetestet, auch im Vergleich mit einem Beispiel-Plugin, und sehe jetzt klarer. Für eine Übergangszeit werde ich einen Kompromiss eingehen, um endlich weiterzukommen. Ich verwende noch WP_Widget, toleriere den Eintrag in Tabelle wp_options und speichere die Daten in einer eigenen Tabelle (wobei es sich um Daten auch anderer im Plugin verwendeter Objekte als dem Widget handelt).

    Meine Bemerkung zur verwendeten DB-Schnittstelle war nicht korrekt. Ich verwende schon wpdb. Zur Einrichtung einer Tabelle wird dabei die Funktion dbDelta aufgerufen.
     
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden