[gelöst]Dynamische Filter für View nach Userprofil-Angaben
Eingetragen von Maximus (129)
am 21.01.2014 - 11:41 Uhr in
am 21.01.2014 - 11:41 Uhr in
Hallo Leute,
ich komm leider nicht drauf...ich möchte eine View "für dich passende Anfragen", die jedem User individuell Anfragen aus seiner Nähe und entsprechend seiner Profilangaben anzeigt. Im Profil kann der User bis jetzt einen Standort eingeben sowie eine Maximalentfernung und ein Mindestbudget.
Nun sollen die über eine Webform eingehenden Anfragen (mit Lat/Long sowie Budgetangabe) entsprechend den Usern in dieser View angezeigt werden, bei denen die Entfernung nicht außerhalb des Radius ist und das Mindestbudget erfüllt ist...Leider bekomme ich mit Views immer nur diese statischen Filter hin.
Hat jemand Ahnung?
Vorab vielen Dank,
Max
- Anmelden oder Registrieren um Kommentare zu schreiben
Doppelpost ->
am 21.01.2014 - 12:36 Uhr
Doppelpost -> http://www.drupalcenter.de/node/48773
Versuche dich erstmal daran. Entfernung und Budget sind Filter, die du kombiniert anwenden kannst.
By the way finde ich eine Lat/long-Abfrage beim Angebotseinsteller schwierig, das sollte eher über Adresse und notfalls automatischer Lat/Long-Umwandlung, z.B. mit Geolocation, erfolgen.
Web: Halle im Bild | n8aktiv
Social: Facebook | Xing
Webform schwierig
am 21.01.2014 - 12:59 Uhr
Wenn du die Ergebnisse hinterher flexible filtern willst, solltest du evtl. von Webform zur Eingabe der Daten Abstand nehmen.
Webform hat nur eine sehr rudimentäre Views-Integration, das sind keine richtigen Fields.
Als Alternative kannst du einen Inhaltstyp verwenden, für den die User dann die Rechte haben, ihn auszufüllen. Dann hast du richtige Fields für alle Daten, die du über Views auch ansprechen kannst, wie du willst.
Ansonsten solltest du deine Frage nochmal genauer formulieren, daß man versteht, was du machen willst.
1. Was passiert genau auf deiner Website
2. Was sind das für Anfragen und wer erstellt die
3. Was kann ein User "annehmen", was bedeutet das?
Ich habe leider nur die Hälfte verstanden.
Schonmal danke!
am 21.01.2014 - 13:09 Uhr
Hallo zwerg,
schön, dass du mir antwortest! Dachte nicht, dass da noch was kommt, weils wohl zu viel auf einmal war...
Das Lat/Long habe ich auch dementsprechend gelöst:
Der User gibt Ort und Postleitzahl ein, ich hab dann mit einem Markup-field selber eine Map mit einem Geolocation-Aufruf mit Javascript reingesetzt, der nach change()-Event bei Ort und Postleitzahl das ganze Geocodiert und die Koordinaten in ein private-field, was für den User damit nicht sichtbar sein sollte, schreibt.
Viele Grüße,
Max
Schonmal danke!
am 21.01.2014 - 13:09 Uhr
Hallo zwerg,
schön, dass du mir antwortest! Dachte nicht, dass da noch was kommt, weils wohl zu viel auf einmal war...
Das Lat/Long habe ich auch dementsprechend gelöst:
Der User gibt Ort und Postleitzahl ein, ich hab dann mit einem Markup-field selber eine Map mit einem Geolocation-Aufruf mit Javascript reingesetzt, der nach change()-Event bei Ort und Postleitzahl das ganze Geocodiert und die Koordinaten in ein private-field, was für den User damit nicht sichtbar sein sollte, schreibt.
Viele Grüße,
Max
Auch dir schonmal vielen Dank!
am 21.01.2014 - 13:38 Uhr
Hallo Eigentor,
danke erstmal für deine Hilfe!
1. User können sich gegenseitig Anfragen weiterempfehlen und vermitteln, also es soll eine kleine Community werden. Wenn ein User bspw. für einen Auftrag keine Zeit hat kann er Ihn in dieser Community abgeben und hoffentlich eine Aushilfe finden, gleichzeitig an freien Tagen in der Community Aufträge erhalten, wenn etwas passendes für Ihn dabei ist.
2. Bei den Anfragen handelt es sich um Terminanfragen mit einem Ort, einem Budget, und ein paar Listboxes um die Anforderungen etwas zu spezifizieren. Anfragen hätte ich jetzt (mit der derzeitigen Implementierung als Webform geplant) sowohl alle registrierten Nutzer erstellen lassen, als auch Gäste. Bei registrierten Nutzern erscheint rechts ein Block mit der View "deine abgegebenen Anfragen". Das klappt auch schon wunderbar.
Was allerdings noch nicht klappt: die eingegangenen Webform-Submissions (Anfragen) jetzt speziell den registrierten Usern anzuzeigen, die laut ihrem Userprofil für diese Anfrage in Betracht gezogen wurden. Jeder registrierte User soll also eine View "mögliche Terminanfragen" oder ähnliches bekommen, bei der er alle die Anfragen angezeigt bekommt, die a) in seinem Umkreis stattfinden, die b) sein Mindestbudget nicht unterschreiten und c) seinem Leistungsprofil entsprechen. Ich habe dafür eine Data-Table "Anfragen" mit den Webform-Submissions angelegt.
In sql sollte das in etwa so aussehen (nur grob skizziert, falls man es so vielleicht dann besser versteht):
Select Datum, Ort, Budget, Anforderungen
From Anfragen, User
Where User.Mindestbudget < Anfragen.Budget
And Anfragen.Koordinaten - User.Koordinaten < User.Umkreis (klar muss das anders gemacht werden, Pythagoras sollte hier weiterhelfen...ich will ja nur die Entfernung der zwei Koordinaten berechnen und dann schauen ob diese kleiner User.Umkreis ist.)
And Anfragen.Anforderungen = User.Leistungen
And User.UID = %currentUser
3.Der User soll also eine View mit potentiellen Aufträgen bekommen. Sagt ihm einer dieser Aufträge zu, kann er ihn "annehmen", also rechts daneben einen Haken setzen oder einen Link klicken (da bin ich offen für alles) und damit den Auftragsstatus von "offen" auf "geschlossen" ändern.
Klappt das mit Anfragen als Webform-Submissions so etwa nicht?
Viele Grüße und schonmal vielen Dank,
Max
Dafür ist Webform definitiv
am 21.01.2014 - 15:10 Uhr
Dafür ist Webform definitiv der falsche Ansatz. Du kommst nur über erhebliche Umwege in Views an die Informationen aus der Submission (siehe verlinktes Video). Das ist aber immer noch nicht so, daß Du daraus Deine gewünschte View bauen kannst. Also baue es auf der Basis von Inhaltstyp(en) und versende Mails mittels Rules.
Beste Grüße
Werner
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Das kann auch mit
am 21.01.2014 - 15:22 Uhr
Das kann auch mit Webform-Submissions klappen. Allerdings in Verbindung mit Views schwieriger.
Man kommt zwar, wenn man von Usern Daten eingeben will, immer zuerst auf Webform, aber aus den genannten Gründen machst du dir das Leben wesentlich einfacher wenn du normale Nodes mit echten Fields nimmst. Das ist auch kein Sicherheitsproblem und sieht für den User identisch aus.
Jetzt mal unabhängig davon, wie die Werte in Views hineinkommen, nehmen wir mal an, die Werte wären in Views verfügbar:
Du bräuchtest Arguments. Die Arguments wären z.B. der Umkreis, das Mindestbudget und das Leistungsprofil. Alles nicht gerade einfache Arguments, da es nicht einfache Werte sind, sondern jeweils Bereiche oder kombinierte Werte.
Jedoch durchaus machbar: im Argument Code würdest du die Berechnungen durchführen, und an Views lieferst du dann nur Werte zurück, die mit den in den Anfragen eingegebenen Feldern vergleichbar sind.
Contextual Filters
Arguments heißen ja jetzt Contextual Filters.
Du hättest also je einen Contextual Filter für jede Eigenschaft, für den du die Eigenschaft der Anfrage mit denen des Userprofiles vergleichen möchtest.
Deinen Argument Code lagerst du am saubersten in ein Custom Modul aus, dann kannst du auch schön debuggen.
Ich hatte das mal für etwas anderes so gemacht: in Views im Argument Code steht nur
<?php
if (($node = menu_get_object()) !== FALSE) {
$node = menu_get_object();
}
return nobila_custom_envelopes_arguments_category($node);
?>
http://screencast.com/t/2vnBZ2EIN
Das ist jetzt für einen Node, du müßtest natürlich das User-Objekt abfragen.
nobila_custom_envelopes_arguments_category() ist die Custom Funktion im Modul, in dem du die ganzen Berechnungen durchführst, für jeden Contextual Filter am besten eine einzelne Funktion.
In der Custom Funktion kannst du dir dann aus dem User-Objekt die entsprechenden Profildaten herausholen und über den Argument Code an den View zurückschicken. Der View selber kann dann vergleichen, ob die einzelnen Werte zusammenpassen und zeigt die Anfragen entweder an oder nicht.
Ich meine, daß Contextual Filters grundsätzlich immer AND funktionieren. D.h. wenn du drei erstellst, müssen auch alle drei übereinstimmen, sonst wird nichts angezeigt. Aber das willst du, denke ich auch. Ob man da auch OR kann, frag mich was Leichteres.
Danke Euch zwei!
am 21.01.2014 - 15:51 Uhr
Es ist wohl die Fülle an Möglichkeiten und den 100.000 Wegen die mir bei Drupal Kopfzerbrechen bereiten ^^ bin als Anfänger schon verdammt lange gesessen um eine funktionierende und Koordinaten liefernde Webform hinzubasteln...
umso bitterer, dass es jetzt doch wieder der falsche Ansatz ist.
Schaut das dann wirklich identisch aus? Ich habe grad testweise einen Inhaltstyp "Anfrage" angelegt und auch gleich mal Ort (vom Typ Standort), Budgetlimit (Typ Ganze Zahl) und Datum (Typ Date mit pop-up calender) reingesetzt...alles nur Kleinigkeiten, aber das ich die Bezeichnung für "Postal Code" und "City" nicht ändern kann nervt =D gleich mal das modul fieldgroup installiert um fieldsets anzulegen...leider trotzdem nicht so schön wie in der Webform, aber mit viel rumprobiererei würd ich sowas wohl schon wieder hinbekommen. Bräuchte das Inhalt "Anfrage" hinzufügen dann als Menüpunkt "Anfrage hinzufügen" im Hauptmenü...
Wenn es auch mit den Webform-Submissions gehen würde, würde ich rein aus Gründen der Motivation schon gerne dabei bleiben =P Die view "Anfragen" in meiner Datenbank beinhaltet alle eingegebenen Submissions...Wenn ich bei den ganz normalen Filterbedingungen statt einem statischen Wert "is greater than User.Budgetlimit" angeben könnte wär ich ja schon teilweise bedient. Das Filtern nach "Alle Submissions die der User erstellt hat" funktioniert ja auch...das ist doch auch dynamisch, da erst zur Laufzeit geschaut wird welche UserId ausgefiltert wird...echt ärgerlich, dass eine so plumpe und an sich einfache Sache einen derartigen Aufwand verursacht.
Das mit dem Argument Code habe ich leider nicht wirklich verstanden. Im "Advanced" Bereich in Views hab ich Contextual Filters gesehen.die filtern aber scheinbar irgendwas mit einer URL. Auch 2 Bücher zu Drupal 7 schneiden das Thema leider nur an...
Verzweiflung =D
Danke Euch trotzdem...
Viele Grüße,
Max
Das mit den Contextual
am 21.01.2014 - 16:06 Uhr
Das mit den Contextual Filters / Argument Code ist auch schon ziemlich fortgeschritten. Wenn du noch nix mit Drupal gecodet hast, solltest du dich da nicht gleich rantrauen.
Das, was du vorhast, ist allerdings auch alles andere als trivial. Da solltest du dann schon deine bisherige Erfahrung mit Drupal ins Verhältnis zu deinem kühnen Plan setzen.
Diese Filterung ist ziemlich komplex, die du vorhast.
Zum Vergleich ist das etwas, als ob du drei Mal Ski gefahren bist und jetzt in Oberstorf von der Schanze springen willst. Runtergekommen sind sie noch alle...
Also entweder du engagierst jemand für teuer Geld, der dir das baut, oder du solltest ein, zwei Monate Lernen einplanen. Die ganzen Kenntnisse von Views, Templates, wie man an Daten kommt usw. bauen aufeinander auf.
Bezüglich Webform solltest du Werner und mir einfach vertrauen: vergiss es. Webform ist Fields 'light' und nicht wirklich zur Verbindung mit Views gedacht.
Alles klar, vielen Dank für
am 21.01.2014 - 16:37 Uhr
Alles klar, vielen Dank für Eure Mühen!
Ich bin heute Abend im Drupal-Treffen in München dabei, vielleicht finde ich da jemanden, der Bock hat. Ich kann hald niemanden voll anstellen aber für ein Taschengeld nebenbei hätt ich etwas Budget...habs aber eh schon im Job-Angebot gepostet!
Naja, ich zieh mir dann mal "Das Drupal-Entwicklerhandbuch" von John K. VanDyk rein...muss ja irgendwie machbar sein das Ganze! ;-) WebProgrammierkenntnisse hab ich ja...nur die ganzen Schnittstellen mit Drupal...oh mein Gott =P
Vielen Dank Leute!
Bücher (z.B. auch von
am 22.01.2014 - 13:21 Uhr
Bücher (z.B. auch von Galileo) und Screencasts gibt es viele, du musst aber die Systematik verstehen, weil die Literatur nur Ansätze vermittelt.
Vielleicht solltest du schrittweise vorgehen. Baue dir eine View, in der du die Felder zusammenstellst, die du brauchst (Auftrag, Budget etc.). Dann probierst du dich mit den "normalen" Filtern aus und ermöglichst dem User, die Werte manuell zu ändern.
Wenn du da soweit durchblickst, versuchst du, diese Views dynamisch zu gestalten, d.h. entsprechend der im Userprofil eingegebenen Feldwerte.
Nicht immer gleich die Flinte im Korn ertränken. Hilfe von außen ist zwar gut, ermöglicht dir aber später nicht, Änderungen vorzunehmen wenn du selbst nicht den Durchblick hast.
Was auch nicht schaden kann: Schau doch mal auf der Distributionen-Seite von Drupal, was es da so gibt. Vielleicht ist dein Ansatz dort schon realisiert und du kannst es dir nachbauen. Und zu guter Letzt wäre es super, wenn du deine Lösung hier einstellen kannst ;)
Web: Halle im Bild | n8aktiv
Social: Facebook | Xing
Ich bin schon dran, habe
am 22.01.2014 - 15:26 Uhr
Ich bin schon dran, habe jetzt einen Node "Anfrage" erstellt und spiel mich grad mit den Views dazu. Aber bevor ich jetzt wieder ewig an was rumdruckse und es dann wieder eine eher ungeeignete Lösung wird, wie bei der Webform, hätte ich noch eine Frage:
Sind User-Profile dazu geeignet als Filter für Views herzuhalten oder sollte ich lieber einen Node "Profil und Leistungsangaben" für jeden User anlegen lassen, der dann die benötigten Informationen enthält, nach denen ich die "Anfragen" filtere??
Vorab vielen Dank,
Max
Du brauchst keinen
am 22.01.2014 - 17:38 Uhr
Du brauchst keinen zusätzlichen Node.
User-Profile sind ab Drupal 7 voll fieldable, d.h. man kann beliebige Felder dran anhängen. Und die Werte kann man in Views wiederum auslesen.
so gesehen ist dann der User der Filter für die Anfragen.