Funktion mit einem Link/Button auslösen ohne die Seite zu verlassen
am 02.04.2013 - 14:45 Uhr in
Hallo,
ich hoffe der Titel des Themas ist nicht zu verwirrend, mir fällt leider nicht ein, wie ich es konkreter umreissen kann auf eine Zeile.
Ich habe mittels theme('table') eine Tabelle erstellt, die den Inhalt einer MySQL Tabelle darstellt. Jetzt möchte ich in jeder Zeile einen Link hinzufügen, der bei Aktivierung die aktuelle Zeile aus der Datenbank löscht und die Seite neu ladet, damit die Tabelle wieder korrekt dargestellt wird.
Mein bisheriger Ansatz ist es einen Link hinzuzufügen, dem der Primärschlüssel als Argument angehängt wird. Dieser Link führt auf eine neue Seite, welche die Löschoperation ausführt und leitet einen dann wieder zurück auf die Seite mit der Tabelle. Dies erscheint mir aber "unschön". Gibt es hierfür vielleicht einen eleganteren Weg?
Vielen Dank für eure Hilfe!
- Anmelden oder Registrieren um Kommentare zu schreiben
Gibt es einen wichtigen
am 02.04.2013 - 19:17 Uhr
Gibt es einen wichtigen Grund, den Inhalt der Tabelle nicht als Node abzubilden?
Wenn Du es als Node abbilden würdest, dann könntest Du die Bulk-Operations zum Löschen nutzen.
(Modul Views Bulk Operations).
Ansonsten müßtest Du mal die Batch API ansehen
http://api.drupal.org/api/drupal/includes!form.inc/group/batch/7
Da gibst Du in der Zeile
batch_process('node/1');
eine URL an (im Beispiel node/1) auf die die Seite nach erfolgreicher Durchführung des Prozesses geleitet wird.
In Deinem Fall also auf die Seite, auf der sich die Tabelle mit dem Löschlink befindet.
Kurzer Umriss was das Modul
am 02.04.2013 - 20:28 Uhr
Kurzer Umriss was das Modul leisten soll:
Ein Admin kann im Backend Veranstaltungen mit einer Anzahl von Parametern anlegen. (Tabelle enrollments_events, Primärschlüssel "eid")
Ein User kann sich einmal für eine angelegte Veranstaltung anmelden. (Daten werden in der Tabelle enrollments_users gespeichert, zusammengesetzter Primärschlüssel "eid" und "uid" (userId)
Ein Admin kann sich im Backend für jede Veranstaltung eine Übersicht über die Anmeldungen ansehen (in angesprochener Tabelle) hier soll dann eine Zeile gelöscht werden können. Dies soll eine Komfortfunktion sein. Der User soll nur auf einen Link klicken und es passiert etwas, anstatt, dass er nochmal ein Formular bestätigen muss. Zusätzlich sollte die Ansicht nach Möglichkeit nicht verlassen werden.
(Zusätzlich gibt es natürlich noch Edit Funktionen etc.).
Da relativ viele Bedingungen existieren wann sich ein User anmelden darf und wann nicht, ging ich als Drupal Anfänger (keine Woche alt) davon aus, dass ein Node nicht die einfachste Lösung sein wird. Man darf mich hier aber sehr gerne berichtigen. :)
Der Batch würde den Workflow vermutlich ähnlich unterbrechen wie den User automatisch über zwei Seiten zu schicken :/
Trotzdem Danke für Ihre Hilfe :)
OK...da hast Du Dir ja was
am 03.04.2013 - 06:57 Uhr
OK...da hast Du Dir ja was vorgenommen als Neuling.;-)
In meiner ersten Woche war ich noch mit einfacheren Themen am Verzweifeln.
Grundsätzlich solltest Du alles, was irgendmöglich ist mit Drupal-Funktionalitäten machen.
Dann bekommst Du ja viele Funktionalitäten frei Haus geliefert.
Wie so ein Batch sich anfühlt kannst Du leicht testen, wenn Du einen Node anlegst und diesen aus der Übersicht unter admin/content heraus wieder löscht.
Es kommt in der Tat eine Rückfrage, ob man wirklich löschen will.
Dann ist man wieder auf der Liste.
Sicher kann man die Rückfrage ausschalten mit einem hook_form_alter.
Ansonsten könnte Dir bei Deinem Vorhaben das Modul Rules eine Hilfe sein.
Da kann man Regeln erstellen, daß bei bestimmten Ereignissen unter bestimmten Umständen ein bestimmte Aktion ausgeführt wird.
Das nenne ich das Schweizer Messer für Drupal, weil man da sehr viel im Hintergrund ablaufen lassen kann.
Für genau den beschriebenen konkreten Fall ist es nicht so hilfreich, aber Du hast ja vermutlich noch mehr auf dem Plan.
Z.B. diese Bedingungen bei der Anmeldung könnte man dabei überprüfen.
Ajax
am 03.04.2013 - 12:06 Uhr
Natürlich auch nicht einfach für einen Anfänger, aber wenn Du nach einem Request keinen Relaod der Seite (oder einer anderen Seite) willst, kommst Du um Ajax schlecht rum. Drupal stellt dafür ein eigenes Framework zur Verfügung: http://api.drupal.org/api/drupal/includes!ajax.inc/group/ajax/7
Gruß
Christian