2012-04-11 5 views
1

Wenn Benutzer sich registrieren, verknüpfen sie sich über das Benutzerprofil mit einem oder mehreren Standorten. Speicherort ist ein benutzerdefinierter Inhaltstyp. Ich habe ein benutzerdefiniertes Feld im Benutzerprofil, das eine Beziehung zu diesem Ort definiert.Wie verwende ich den aktuellen Benutzer als verwandtes Feld in Drupal 7 Views?

Ich habe eine Benutzer-Typ-Ansicht, die nicht authentifizierte Benutzer zurückgibt und auf erhöhte Rollenbenutzer beschränkt ist. Ich möchte einen Filter hinzufügen, der nur nicht authentifizierte Benutzer zurückgibt, deren zugehörige Standortwerte mit einem oder mehreren Standortwerten des aktuellen Benutzers übereinstimmen, der die Ansicht anfordert.

Ich kann nach dem zugehörigen Standort filtern, aber ich kann diesen Wert nicht auf die Werte des aktuellen Benutzers beziehen. Ich habe das Gefühl, dass ich dies tun könnte, wenn ich die aktuelle Benutzer-UID zum Beziehungsbereich und nicht nur zum Kontextfilterbereich hinzufügen könnte. Kann ich dies tun, ohne auf einen benutzerdefinierten Filter oder eine benutzerdefinierte Beziehung zurückzugreifen?

EDIT:

Es kann einige Verwirrung sein, so vielleicht wird dies dazu beitragen zu klären.

User -> Profile -> Location ist die Datenverknüpfungskette. Ich möchte nur Benutzer anzeigen, deren Standortwerte mit denen des aktuell angemeldeten Benutzers übereinstimmen.

User (any) -> Profile (Student) -> Location(s) == User (current) -> Profile (admin) -> Location(s)

ich SQL schreiben könnte, dies zu tun, aber es ist nicht klar, ob dies möglich ist, allein mit Blick zu tun, oder wenn ich eine benutzerdefinierte Beziehung oder Filter benötigen.

Antwort

0

Der einzige Weg, dies innerhalb von Ansichten zu tun, ist die folgende:

  1. Stellen Ansicht von Benutzertyp mit
  2. eine Beziehung zu einem Profile2 Typ hinzufügen (in meinem Fall ‚Student‘)
  3. hinzufügen Kontext-bezogene Filter vom Typ Profil: Schüler: Standort
  4. wählen Sie "bieten Standardwert"
  5. Typ: "pHP-Code"
  6. Verwenden Sie den folgenden Code ein:

    global $user; 
    $profile = profile2_load_by_user($user->uid,'facilitator'); 
    if (!$profile) { return ''; } 
    if (!isset($profile->field_location['und'])) { return ''; } 
    $locations=''; 
    foreach ($profile->field_location['und'] as $location) { 
        $locations.=','.$location['nid']; 
    } 
    return substr($locations,1); 
    
  7. Unter "Mehr", Set "Allow Multiple Values" auf TRUE
  8. Speichern Sie Ihre Kontext-bezogene Filter

PHP auf diese Weise können Sie den aktuellen laden Benutzer und erhalten verknüpfte Werte, nach denen gefiltert werden soll. Dies kann in vielen anderen Kontexten und Umständen nützlich sein.

Verwandte Themen