Ich versuche, die Knoten und Kommentare eines Benutzers nach "Post-Datum" zu sortieren. Dieser Beitrag enthält Links zu Sandbox-Projekten für D6, für 7 gibt es jedoch keine Links.
Dieser Beitrag enthält ein Beispiel für die Verwendung von hook_views_pre_execute () und einer SQL-UNION in D6. Dies funktioniert nicht für D7 mit Ansichten 3.
Ich bin auf den Kommentar von merlinofchaos gestoßen
Da wir jetzt den neuen Abfrage-Generator von Drupal verwenden, ist die Abfrage ein SelectQuery-Objekt, das Sie ändern oder ersetzen müssen. Weitere Informationen finden Sie in der neuen Datenbankebene von Drupal 7.
Hat jemand ein Beispiel für diese oder eine andere Lösung, um zwei Ansichten zu kombinieren?
Antworten:
Hier ist ein funktionierendes und getestetes Beispiel:
Dies funktioniert für die meisten Ansichten. Wie auch immer, einige Stil-Plugins können ausgefallene Dinge tun, die mit dieser Technik nicht funktionieren (Kalendermodul, das ich gerade betrachte).
quelle
Sie können das Modul Views extra handlers verwenden, um SQL UNION-Abfragen aus zwei verschiedenen Ansichten / Anzeigen zu generieren.
Ein ausführliches Tutorial auf drupal.org finden Sie hier
https://www.drupal.org/project/views_extra_handlers
quelle
Am Ende habe ich db_query () verwendet, um die SQL-UNIONs zu erstellen und sie dann mithilfe der theme () -Funktion in ein Tabellenlayout mit Pagern zu rendern.
Für den Benutzer sieht es aus wie Standardansichten. Der andere Vorteil war, dass ich die Abfrage sehr optimieren konnte. Ich zeige "Aktivitäten meines Freundes" und wenn Sie Ansichten dafür verwenden würden, würde dies eine Liste Ihrer Freunde erstellen und diese in einer SQL "IN" -Klausel verwenden, die sehr langsam ist, wenn Sie mehr als 50 oder 100 Datensätze haben.
Ich könnte diese Freundesliste auf diejenigen beschränken, die in den letzten x Tagen auf der Website eingeloggt waren.
Dies ist ein Codebeispiel:
quelle
Auf diese Weise habe ich in Zukunft zwei Ansichten kombiniert, die auf derselben Tabelle basieren. Die gleichen Prinzipien sollten auch für Ansichten gelten, die auf verschiedenen Tabellen mit der gleichen Anzahl von Feldern basieren.
Im folgenden Fall wird nur ID ausgewählt, da das Format auf gerenderte Entität gesetzt ist. Wenn Sie jedoch mit Feldern arbeiten, können Sie der Abfrage, die weniger Felder enthält, immer zusätzliche Dummy-Felder hinzufügen, da ich unten einen Zeitstempel hinzugefügt habe.
quelle
Ich stelle mir so etwas vor:
Obwohl ich es nicht getestet habe.
Einige Links, die helfen können:
http://api.drupal.org/api/drupal/includes!database!select.inc/function/SelectQueryInterface%3A%3Aunion/7
http://drupal.org/node/557318#comment-1991910
quelle
Ich bin auf ein Modul namens Ansichten Feldansicht gestoßen , mit dem Sie eine Ansicht als Feld in eine andere Ansicht einbetten können. Ich habe das selbst noch nicht ausprobiert, aber es könnte für Sie hilfreich sein.
quelle
Das EntityFieldQuery Views-Backend unterstützt die gleichzeitige Abfrage mehrerer Entitätstypen. Es sollte also möglich sein, sowohl nach Knoten als auch nach Kommentaren zu fragen. Beide Entitätstypen verwenden eine
uid
Eigenschaft, um eine Verknüpfung zu ihrem Autor herzustellen. Auf API-Ebene sollte daher EntityFieldQuery :: propertyCondition () verwendet werden können, um die Knoten und Kommentare eines einzelnen Benutzers auszuwählen. Ich denke, das Ansichten-Backend bietet die gleiche Funktion.quelle
Ein anderer Ansatz könnte darin bestehen, Feeds mit Knoten und Kommentaren zu erstellen (mit einem kontextbezogenen Filter der Benutzerkennung in der URL) und die beiden Feeds dann zu einem neuen Feed zu kombinieren und nach Post-Datum anzuzeigen.
quelle
Verwendet Global: PHP Felder? Sie können sie verwenden, um eine Ansicht mit Klebeband zusammenzufügen, in der beide kombiniert werden.
Erstellen Sie eine Inhaltsansicht mit den Feldern Inhalt: Titel und Inhalt: Kommentare (von der Anzeige ausgeschlossen).
Fügen Sie ein PHP-Feld hinzu, das berechnet, welches aktueller ist, das Datum der letzten Aktualisierung oder das Datum des letzten Kommentars des Benutzers, und legen Sie den Wert des Felds auf dieses Datum fest. Fügen Sie dieses Feld als Sortierbedingung hinzu.
Fügen Sie ein ähnliches Feld hinzu, das entweder einen Link zum Kommentar oder zum Knoten ausgibt.
Klingt gut für mich!
quelle