Wie Actvity stream für flags und comments erstellen?
Eingetragen von rhodes (631)
am 26.12.2014 - 10:38 Uhr in
am 26.12.2014 - 10:38 Uhr in
Hallo,
in einer Drupal 7 Installation soll ich einen Activity Stream einrichten, der zum Beispiel auflistet, wenn neue Kommentare erstellt werden. Ausserdem soll in diesem SAtream erscheinen, wenn jemand einen Node flagged (Like + Bearbeitet).
Ich bin auf Heartbeat gestossen und auf Message. Bei Heartbeat passiert scheinbar seit 2 Jahren nichts mehr. Hat jemand Erfahrung mit diesen beiden Modulen oder empfielhlt sich ein ganz anderer Weg? Z.B. mir Rules? Ich möchte eine möglichst einfache und schlanke Lösung.
Bin für jeden Tipp dankbar.
Danke & Grüße
Rhodes
- Anmelden oder Registrieren um Kommentare zu schreiben
1. Module: Da würde ich sehr
am 26.12.2014 - 21:03 Uhr
1. Module: Da würde ich sehr genau darauf achten, welche Zukunftssicher sind, auch in Hinblick auf Drupal 8.
2. Rules: Die Frage ist, welche Aktion das Event neuer Kommentar oder neuer Flag erzeugen soll?
3. Views: Ich habe sowas mal angefangen, allerdings dann nicht weiter verfolgt.
Bei mir heißt die Aufgabe: Zeige einen Activity Stream über alle Kommentare und Flags, die bei drei versch. Inhaltstypen erzeugt werden.
Dazu habe ich eine Inhaltsview gebaut mit den drei Typen als Filter.
Dazu gibt es eine Relation auf Flag und eine auf Kommentare des Nodes.
Als zusätzlichen Filter habe ich eine neue OR-Gruppe erstellt und sage, der Node muß entweder geflaggt sein, oder der Kommentartitel darf nicht leer sein.
Die nächste Aufgabe, die nun noch anstünde, wäre die Sortierung nach Datum.
Da hat man das Problem, daß das Datum, wann der Node geflaggt wurde, bzw. wann ein Kommentar erstellt wurde, jeweils in einem anderen Datenbankfeld steht.
Ich denke, dazu bräuchte man die Views-Erweiterung "Views PHP".
https://www.drupal.org/project/views_php
Damit könntest Du ein Global: PHP"-Feld definieren, welches das Entstehungsdatum enthält und zwar wird das Feld entweder mit Flag oder mit Kommentar-Datum befüllt, je nachdem, welcher Wert nicht leer ist.
Dann kann man unter Sortierung ein Feld "Global: PHP" hinzufügen.
Angenommen, das oben erzeugte Global: PHP-FEld heißt "php"
Dann schreibe in das Feld bei der Sortierung:
if ($row1->php < $row2->php) return -1; else return 1;
Die View mit dem Filter habe ich schon mal gebaut, die Sortierung allerdings noch nicht.
An anderer Stelle habe ich aber schon mit View PHP gearbeitet und auch eine Sortierung gebaut, funktioniert gut.
View PHP kann bei größeren Abfragen die Performance verlangsamen.
Evt. müßtest Du dann über ein kleines Modul nachdenken, welches die View Sortierung erledigt.
LG Regina Oswald
-------------------------
Montviso - Internetdienstleistungen
http://www.montviso.de
Nun, wo ich schon mal
am 26.12.2014 - 21:18 Uhr
Nun, wo ich schon mal gedanklich dabei war, habe ich den Filter in meiner View eingebaut.
Das klappt wunderbar mit der Sortierung nach den beiden unterschiedlichen Datumsfeldern.
Analog habe ich noch ein Global PHP Feld gebaut, welches abhängig davon, um welche Activity es sich handelt den User ausgibt, der einen Flag gesetzt hat, bzw. den, der einen Kommentar abgegeben hat.
Allerdings ist es noch nicht getestet für Antworten auf Kommentare, da muß man evt. noch etwas tricksen.
Aber ich denke, es müßte nur mit Views zu schaffen sein.
LG Regina Oswald
-------------------------
Montviso - Internetdienstleistungen
http://www.montviso.de
Vielen Dank
am 29.12.2014 - 16:14 Uhr
für dein ausführliches Posting. Ich denke auch, dass es mit Views geht, aber ich hatte eben gehofft, dass man eine Sache wie einen Activity-Stream zu listen mit bereits bestehenden Modulen hinbekommt. Soviel skripten wollte ich eigentlich gar nicht. Das ist ja eigentlich eine Standard-Geschichte. Mir kommt es nur komisch vor, dass das Heartbeat-Module scheinbar seit 2 Jahren nicht weiter entwickelt wurde.
Ich selbst setze auch das
am 29.12.2014 - 16:25 Uhr
Ich selbst setze auch das Heartbeat-Modul ein, es basiert ja auf Views und Rules.
Es arbeitet im übrigen auch ganz gut mit Organic Groups zusammen.
Es gibt nur einen kleinen Bug beim manuellen Löschen der Einträge,
File: modules/heartbeat/includes/heartbeatactivity.inc ca. Zeile 430 und wenn du es mit Flags zusammen einstetzt, dann gibt es noch im Flag-Plugin einen weiteren Bug:
File: modules/heartbeat/modules/heartbeat_plugins/includes/heartbeatflagplugin.inc
ca. Zeile 107, das array flag_content existiert nicht und deshalb kann der MySQL Befehl dort nicht ausgeführt werden.
Aber ansonsten funktioniert es ganz gut aus meiner Sicht.
Gruß
Berthold
Drupal Video-Tutorials