Suchergebnisse in einem Webformular nutzen
am 16.09.2009 - 10:23 Uhr in
Hallo,
ich habe hier eine Aufgabe in Drupal und ich habe noch keine Idee, wie ich sie am besten lösen soll. Ich habe schon mehrere Stunden mit diesem Thema verbracht, habe aber noch keinen Weg gefunden, wie ich es lösen sollte. Vielleicht könntet ihr mir ein paar Tipps geben oder den Weg zeigen.
Es geht um folgendes:
Die von mir erstellte Webseite soll eine Datenbank von Büchern haben. Jeder Benutzer sollte in der Lage sein, diese Datenbank durchzusuchen und zum Profil (oder einer extra Seite) diejenigen Bücher aus dieser Datenbank hinzufügen, die er auch besitzt. Falls das gesuchte Buch nicht in der Datenbank ist, sollte er in der Lage sein, es zur Datenbank hinzuzufügen. Außer den Daten, die in der Datenbank stehen und für alle gemeinsam sind, sollte der Nutzer in der Lage sein, weitere Felder zu dem von ihm besitzten Buch zu erfüllen, z. B. Bewertung/Rezension.
Zusammenfassend:
1. Benutzer möchte ein Buch zu seiner Sammlung hinzufügen.
2. Er öffnet zuerst die Suche (am besten sollte man nach verschiedenen Feldern wie Autor/Titel oder auch Volltextsuche einbinden können) und tippt die Angaben ein.
3. Auf der Ergebnissenliste stehen verschiedene Bücher, eins darf ausgewählt werden (am besten durch Radio-Button?).
4. Auf der nächsten Seite ergänzt er den Eintrag durch seine individuellen Angaben. Das Buch wurde zu seiner privaten Sammlung hinzugefügt.
5. Falls die Ergebnissenliste leer ist bzw. das von ihm gesuchte Buch steht nicht innerhalb der Ergebnissenliste, kann der Benutzer einen neuen Eintrag verfassen.
6. Weiter wie Punkt 4.
Ich denke Buch müsste ein node sein. Ich kann schon mit Views eine Liste von Büchern als Tabelle anzeigen lassen, aber ich weiß nicht, wie:
1. ich die Liste filtern kann (= Suche).
2. ich einen Eintrag aus der Liste auswählen und nach weiteren Webformular weitergeben kann.
Hättet ihr für mich Anregungspunkte?
Liebe Grüße,
Joanna
- Anmelden oder Registrieren um Kommentare zu schreiben

Nimm am besten Views...
am 16.09.2009 - 11:09 Uhr
Hallo Joanna,
einen Teil Deiner Fragen kann ich Dir hoffentlich beantworten...
Zuerst einmal: Ja - Jedes einzelne Buch ist ein eigener Node.
Für die Suche würde ich nicht die Drupal Suchfunktion verwenden, sondern statt dessen einen View bauen, den die User mit "Exposed Filters" nach diversen Eigenschaften (Inhalte / Taxonomien) filtern können. Von jedem Record aus können die User zur einzelnen Buchseite gelangen um dort Ihre Rezensionen zu veröffentlichen.
Am Fuß des Views würde ich dann einfach einen werblichen Text der Art "Buch nicht gefunden" mit Link zu /node/add/buch ausgeben - dann kann der User von dort aus eigene Titel anlegen.
Die gleichzeitige Aktionen für mehrere Bücher kannst Du möglicherweise mit View-Batch-Actions anbieten. Dies ist ein Modul, dass für Views die selbe Funktionalität anbietet wie Du sie von den Drupal Backend-Masken her kennst: mehrere Inhalte selektieren und gemeinsam löschen / veröffentlichen oder was auch immer.
Hier habe ich aber nicht genau verstanden, was die User an dieser Stelle mit den Büchern tun können.
Hoffe, das hilft Dir weiter.
Schöne Grüße,

Ralf Hendel
Genauere Beschreibung des Problems
am 20.09.2009 - 19:10 Uhr
Hallo Ralf, erstmal danke für deine Antwort, ich denke Exposed Filters ist schon mal eine gute Richtung, aber der Rest ist nicht so ganz nach meiner Vorstellung, vielleicht habe ich es zu grob beschrieben.
Lass es mir noch mal anders erklären.
AUFGABE
Alles soll wie eine relationale Datenbank aufgebaut werden, die folgendes beinhaltet:
1. Tabellen
a) Bücher
b) Benutzer
2. Relation
a) Benutzer hat ein Buch (daraus entsteht sein Bücherregal) mit den Attributen:
i) ob Lieblingsbuch
ii) Rezension
3. Darstellungen
a) Profil-Seite eines Benutzers (mit Listen von seinen Büchern, Lieblingsbücher etc.)
b) einzelnes Buch aus der gesamten Tabelle: mit Listen von Benuzer, die das Buch haben, die es mögen, in Leserforum/Rezensionen,
i) nach Möglichkeit auch Liste mit ähnlichen Büchern (z. B. die vom demselben Autor oder andere Ausgabe desselben Buches)
c) einzelnes Exemplar eines Buches aus dem eigenen Bücherregal eines Benutzers mit den Feldern: Lieblingsbuch, Rezension
4. Aktionen
a) Stöbern, z. B. durch Suchen (Exposed Filters o. ä.); beim Anzeigen einzelnes Buches die Möglichkeit, das Buch zur eigenen Sammlung hinzuzufügen und an Diskussion zum Buch teilzunehmen
b) Ausgehend vom eigenen Benutzerprofil ein Buch zum eigenen Bücherregal hinzufügen, dazu "Buch hinzufügen" drücken, wo man die Attribute aus 2a angeben kann + Suche nach dem Buch, und wenn es nicht in der Liste vorhanden ist ggf. einfache Möglichkeit das Buch hinzuzufügen, ohne aber die bereits eingetippten benutzerbezogenen Angaben zu verlieren; es soll am liebsten alles auf einer Seite dargestellt werden, wenn es nicht geht dann als Wizard o. ä.
LÖSUNG/HERANGEHENSWEISE
Nun wie ich es mir vorgestellt habe:
– Benutzerprofil ist ein Node (1b)
– ein Buch ist ein Node (1a)
– die Relation Benutzer hat ein Buch ist ein Node (2a) mit den Feldern Wünschbuch, Lieblingsbuch, Rezension (2a i, ii, iii)
Nun weiß ich nicht, wie ich 1a und 1b via 2a am einfachsten verbinden kann. Ich dachte an das Modul Related Content, aber so wie ich bisher dieses Modul benutzt habe, war das so, dass man zuerst den Node 2a erstellen und speichern musste, dann Related Content aus einem View auswählen und dann evtl. 2a nacheditieren. Das fand ich nicht besonders benutzerfreundlich. Es geht doch bestimmt einfacher, oder?
Ich nehme mal an, wenn diese Relation schon irgendwie definiert ist, dann ist die Anzeige von Listen wie in 3a, 3b, 3c relativ einfache Aufgabe mit Views/Blocks/Panels etc.
Meine Frage ist also, wie ich am besten 4b lösen/gestalten/definieren/konfigurieren kann, damit es benutzerfreundlich ist und die obigen Darstellungen ermöglicht.
Stapelverarbeitung brauche ich erstmal nicht, denn es geht immer nur um ein Buch und einen Benutzer.
Vielleicht wäre die einfachste Methode jedoch, immer von 4a auszugehen, dann auf den einzelnen Node eines Buches zu gehen und dort "das Buch zum Bücherregal hinzufügen" klicken. Leider weiß ich dabei nicht, wie ich dabei das ausgewählte Buch im weiteren Formular identifizieren kann (d. h. node-id von diesem Buch an das Formular "Buch zum Bücherregal eines Benutzers hinzufügen" übergeben).
Der Punkt 3bi ist nicht so wichtig, deshalb nur am Rande, aber wenn ihr vielleicht wisst, wie man es lösen kann, wäre es super, auch ein paar Tipps zu hören.
Die Erklärung ist nun umfangreich geworden, aber ich weiß nicht, wie ich es kürzer fassen sollte.
Ich wäre weiterhin für Hinweise dankbar.
Verwende FLAG für die Relation zwischen Büchern und Usern
am 21.09.2009 - 15:35 Uhr
Hallo,
danke für Deine detaillierte Anforderung!
Kennst Du das Modul "Flag"? Ein hilfreiches "light-weight"-Modul: Leicht zu verstehen und zu implementieren. Damit kannst Du sehr leicht flexible Beziehungen zwischen Inhalten und Usern herstellen und kommst ohne komplizierte Datenkonstrukte aus. Besonders angenehm ist dabei die selbsterklärende Benutzerführung: Im Link-Bereich jedes Buch-Nodes erscheinen die Funktionen zum Herstellen bzw. Löschen der Relation. Dort würde sich dann ein Link der Art "in Bücherregal stellen" befinden.
Eine Qualifizierung der Relationen - wie z.B. Lieblingsbuch - ist dabei nicht möglich. Dafür müsstest Du eine eigene weitere Relation erstellen. Das hat zur Folge, dass ein Buch Mein Lieblingsbuch sein kann, ohne dass ich es besitze. In der Realität ist so etwas übrigens möglich - ist also ein Feature und kein Bug ;-).
Angenehm dabei ist, dass der User vom Buch aus jederzeit über die Relation entscheiden muss. Vom Profil aus zu entscheiden, ist nicht so komfortabel, da ich dann erst das Buch suchen muss.
Schön ist, dass das Flag-Modul Views Unterstützung mitbringt. Damit kannst Du sowohl die Links zum Erstellen der Relationen direkt in den Listen mit anzeigen als auch Listen generieren wie "Besitzer dieses Buches" bzw. "Mein Bücherregal".
Ich hoffe, keine Anforderungsmerkmale übersehen zu haben...
Schöne Grüße,

Ralf Hendel