2010-10-07 9 views
12

Dies ist eine Follow-up-Frage zu Drupal Views exposed filter of Author name. Die folgende Frage wurde beantwortet und funktioniert. Ich kann eine Ansicht nach Benutzername filtern. Der eingegebene Benutzername wird durch Eingabe in ein Feld eingegeben und das Feld wird automatisch vervollständigt. Anstatt dies zu tun, möchte ich die Liste der Benutzer als Drop-down-Menü. Ich brauche nur einen Benutzer, um ausgewählt zu werden. Weißt du, ob das möglich ist?Drupal Ansichten ausgesetzt Filter des Autornamens als Dropdown

Antwort

16

Ja, das ist möglich. Es ist nicht besonders schwer, das zu tun ... aber es ist etwas langweilig. Sie müssen zwei Ansichten erstellen

  1. Die erste Ansicht ist eine Liste der Benutzer auf Ihrem System (eine Ansicht vom Typ Users). Diese Benutzerliste wird als Dropdown-Liste anstelle einer Liste angezeigt (über die Ansichtsart "Sprungmenü"). Wenn Sie auf einen Benutzer in diesem Dropdown klicken, wird die zweite Ansicht mit der Benutzer-ID des ausgewählten Benutzers als Argument in der URL aufgerufen. Diese Ansicht ist ein Block.
  2. Die zweite Ansicht ist eine einfache Knotenliste. Es ist eine Seitenansicht bei einer bestimmten URL. Es benötigt 1 Argument, welches die UID (Benutzer-ID) des Benutzers ist.

Detaillierte Schritte

  1. das CTOOLS Modul http://drupal.org/project/ctools das Chaos Werkzeuge Module aktivieren zum Download. Dieses Modul bietet eine Ansichten Stil Plugin „Jump Menu“
  2. Erstellen Sie eine neue Ansicht vom Typ namens Users und Node NICHT geben, die Sie in der Regel erstellen. In den Feldern add User: Name und User: uid. Stellen Sie für die Einstellungen von User: uid sicher, dass Sie klicken Sie auf Rewrite the output of the field. Die neu geschriebene Ausgabe von das Feld sollte my_node_list/[uid] sein. Stellen Sie sicher, dass Sie das Kontrollkästchen exclude from display aktivieren.
  3. Wählen Sie in den Einstellungen für Style in der Ansicht den Jump Menu Stil. Klicken Sie auf die Einstellungen für den Stil. Stellen Sie sicher, dass das Dropdown-Feld PathUser: uid ausgewählt ist.
  4. Fügen Sie der Ansicht eine Blockanzeige hinzu. Nennen Sie den Block User Drop Down
  5. Speichern Sie die Ansicht
  6. Fügen Sie den Block User Drop Down zu einer beliebigen Region in Ihrem Thema, z. Inhalt Oben (normalerweise der beste) oder linke Seitenleiste. Stellen Sie sicher, dass der Block nur an den URLs my_node_list/* und my_node_list sichtbar ist, indem Sie die Einstellungen für die Blocksichtbarkeit festlegen
  7. Erstellen Sie jetzt eine andere Ansicht vom Typ Node. Fügen Sie ein Argumentfeld User: uid hinzu. Fügen Sie die Felder hinzu, an denen Sie interessiert sind, z. Node: title, User: Name usw.
  8. Fügen Sie eine Seitenanzeige hinzu. Lassen Sie die Seite an der URL sein my_node_list
  9. Speichern Sie die Ansicht. Testen Sie die Dropdown-Fenster mit der Liste der Benutzer auf dem System bei http://yoursitename/my_node_list
+0

@Linda: Hat Ihnen die Antwort geholfen? –

+0

Ich denke, das ist für die OP-Frage irrelevant. Jump-Menü unterscheidet sich von Ansichten Filter. Der erste springt auf eine Seite, der zweite filtert die Ergebnisse. – swan

+0

@swan - Sie haben Recht, dass ein Ctools Jump-Menü eine andere Sache als ein Filter ist, aber da es keine Out-of-the-Box-Möglichkeit gibt, einen Dropdown-Views-Filter für den Benutzernamen auszuführen, ist dies ein cleveres Verfahren Problemumgehung. –

-2

Ich glaube, Sie müssen nur wählen „Taxonomie: Begriff Die Taxonomieausdruck ID“ statt „name“.

+0

Taxonomie ist nicht dasselbe wie Benutzer - so dass der Filter für diese Frage nicht geeignet ist. Das ist eine gute Antwort für einen Taxonomie-Filter! –

22

Sie benötigen ein benutzerdefiniertes Modul dafür.

Ich habe dies getan, für Drupal 7 auf diese Weise: ein Modul erstellen, sagen wir, views_more_filters, so dass Sie eine views_more_filters.info Datei wie dieses:

name = Views More Filters 
description = Additional filters for Views. 
core = 7.x 

files[] = views_more_filters_handler_filter_author_select.inc 
files[] = views_more_filters.views.inc 

(Datei views_more_filters_handler_filter_author_select.inc werden unsere Filter-Handler enthalten).

Eine grundlegende views_more_filters.module Datei:

<?php 
/** 
* Implements of hook_views_api(). 
*/ 
function views_more_filters_views_api() { 
    return array('api' => 3); 
} 

Dann definieren Sie einen Filter in views_more_filters.views.inc:

<?php 
/** 
* Implements of hook_views_data(). 
*/ 
function views_more_filters_views_data() { 
    return array(
    'node' => array(
     'author_select' => array(
     'group' => t('Content'), 
     'title' => t('Author UID (select list)'), 
     'help' => t('Filter by author, choosing from dropdown list.'), 
     'filter' => array('handler' => 'views_more_filters_handler_filter_author_select'), 
     'real field' => 'uid', 
    ) 
    ) 
); 
} 

Bitte beachte, dass wir author_select als Maschinenname des Filters festgelegt, definiert Filter Handler ('handler' => 'views_more_filters_handler_filter_author_select') und Ein Feld, nach dem wir filtern werden ('real field' => 'uid').

Jetzt müssen wir unseren Filter-Handler implementieren. Da unsere Filterfunktionen wie Standard views_handler_filter_in_operator wir einfach seine Klasse in views_more_filters_handler_filter_author_select.inc Datei erweitern:

<?php 
/** 
* My custom filter handler 
*/ 
class views_more_filters_handler_filter_author_select extends views_handler_filter_in_operator { 

    /** 
    * Override parent get_value_options() function. 
    * 
    * @return 
    * Return the stored values in $this->value_options if someone expects it. 
    */ 
    function get_value_options() { 
    $users_list = entity_load('user'); 

    foreach ($users_list as $user) { 
     $users[$user->uid] = $user->name; 
    } 

    // We don't need Guest user here, so remove it. 
    unset($users[0]); 

    // Sort by username. 
    natsort($users); 

    $this->value_options = $users; 

    return $users; 
    } 
} 

Wir nicht viel zu tun gehabt haben: nur mit einer Liste unserer Nutzer besiedeln Optionen Array, der Rest wird behandelt nach Elternklasse.

Für weitere Informationen siehe:

+0

Dies ist die erste Lösung, die ich für dieses Problem gefunden habe, das sauber und sinnvoll ist. :) –

+0

Tolle Lösung, nur eine Frage hier. Sollten sich dadurch alle User-Filter (einschließlich der vorhandenen) auf Drop-down ändern? –

+0

Große Antwort. Es ist wahrscheinlich am besten, 'hook_views_data_alter' zu verwenden, da Sie ein bestehendes Array modifizieren. – argiepiano

Verwandte Themen