Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Themes & Theming ›

Theme Funktion für Rotation in einer View

Eingetragen von montviso (2188)
am 22.02.2019 - 08:31 Uhr in
  • Themes & Theming
  • Drupal 7.x oder neuer

Hier habe ich mal eine Frage an die Programmierer unter Euch.

Es geht um eine View, die Teammitglieder in einer Liste anzeigt.
Aus Gründen der Gerechtigkeit soll jeden Tag ein anderes Mitglied oben stehen. Danach greift die alphabetische Reihenfolge.
Die Buchstaben über dem, der heute oben steht, werden unten angehängt.

Der folgende geniale Einzeiler ist nicht von mir, sondern wird schon seit Drupal 6 verwendet.

Er wird in der Theme- Function mytheme_views_pre_render aufgerufen.

if ($view->name == 'myview') {
if(count($view->result) > 0) $view->result = array_merge(array_splice($view->result, (date('z')) % count($view->result)), $view->result);
}

Es treten zwei Probleme auf:

a) Manchmal greift ein Cache, auch wenn in Drupal kein Cache aktiviert ist.
Dann funktioniert die Rotation nicht und das Team-Mitglied von gestern ist auch heute oben.
Leere ich den Cache, dann klappt es wieder.
Natürlich will ich den Cache nicht jedes Mal programmatisch löschen.
Kann ich das ausmerzen durch einen Aufruf in einem Modul?
Oder ganz anderer Ansatz?

b) Wenn neue Mitglieder angelegt werden oder welche gelöscht werden, ändert sich die Anzahl in der View und folglich kann es passieren, dass der Modulo vom heutigen Tag % Anzahl Mitglieder gleich dem gestrigen Tag ist.
Dann Rotiert es auch nicht.
Dieses Thema bräuchte zur Beseitigung natürlich einen komplett anderen Ansatz, als obige Zeile.
Habt Ihr eine Idee, wo ich da ansetzen könnte?

‹ Drupal 8 & Commerce 2 - Bestellbestätigungs-Mail bearbeiten Gibt' s Ersatz für Omega? ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Der Einzeiler ist schon recht

Eingetragen von Stefan.Korn (286)
am 22.02.2019 - 15:13 Uhr

Der Einzeiler ist schon recht cool (nur mehr als 365 Mitglieder dürfen es nicht werden :-)). Und die Problematik mit sich ändernden Mitgliederzahlen.

Ich könnte mir eine Lösung mit einem Random-Sort im View vorstellen. Das hängt natürlich davon ab, wie fixiert man auf die Lösung mit exakt einem Tag ist.

Ganz ohne irgendwelche programmatischen Klimmzüge sollte es so gehen, dass man einen View mit einem Element und zufälliger Reihenfolge (Sort) macht (das ist dann der "Hero of the day"). Und diesen View bindet man dann im View-Header des Views aller Mitglieder ein. Man kann im View ja auch ein zeitbasiertes Caching einstellen, so dass sich auch die Dauer von 1 Tag realisieren lassen sollte. Es wird dann aber vermutlich nicht exakt um 0.00 wechseln.

Da hat man dann den Promi aber auch im View für alle Mitglieder, was vielleicht auch nicht gewünscht ist.

Programmatisch könnte ich mir vorstellen einen Custom Views Sort handler zu bauen, der das bewerkstelligt. Das ist aber vermutlich nicht ganz einfach.

Eine eher etwas weniger aufwändige programmatische (dafür aber mehr hardcodierte) Lösung (im Prinzip ähnlich der aktuellen Lösung) könnte sein, sich irgendwo in den View einzuhooken (z. B.pre_render oder auch woanders) und dann die Ergebnisse umzusortieren und den z. B. per php-Zufall ausgewählten User nach oben zu schieben. Hier ist Paging ggf. ein Problem falls das im View verwendet wird.

Bei den letzten beiden Varianten hat man nicht das Problem mit dem doppelten Vorkommen des "Hero of the day".

Was ich nicht verstehe ist das hier:

Zitat:

Die Buchstaben über dem, der heute oben steht, werden unten angehängt.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hallo Stefan, Vielen Dank

Eingetragen von montviso (2188)
am 22.02.2019 - 17:29 Uhr

Hallo Stefan,
Vielen Dank für's Mitdenken. ;-)
Mehr als 356 Mitglieder werden es nie werden, weil sie auch noch auf Kategorien aufgeteilt sind.
Da besteht keine Gefahr. Es ist auch kein Paging eingestellt, weil es eigentlich nie mehr als 50 sind.
Huch, das wäre ja kompletter Alptraum.

Der "Hero of the day" wäre auch meine Lieblingslösung und durch einen einfachen Random Sort in der View simpel realisierbar.
Aber es ist tatsächlich die Rotation oder wie es der Kunden nennt: Das Paternoster-Prinzip gewünscht.

Das funktioniert halt so, dass heute das Mitglied mit L vorne ist, dahinter kommen alle von M-Z und dann noch die von A-K.
Das meinte ich mit

Zitat:

Die Buchstaben über dem, der heute oben steht, werden unten angehängt.

Und morgen ist dann der zweite mit Buchstabe L oder dem nächsten Buchstaben oben und wer heute ganz oben ist, ist morgen der letzte.

Das mit dem Cache auf einen Tag wäre ja schön und gut. Aber es ist gar kein Caching eingestellt im Drupal 7.
Das ist, was mich so irre macht. Dennoch ist ein Effekt zu sehen, wenn ich den Drupal Cache leere.
Server-Cache gibt es natürlich auch noch und dann noch der Browser-Cache, den ich immer wieder vergesse, weil ich ihn grundsätzlich ausgestellt habe.

Vermutlich werde ich einen Hook auf die View im Modul statt im Theme probieren.
Evt. bringt das ja was.
Vorher werde ich aber noch mal den "Hero of the day" ansprechen und schmackhaft machen.
Das klingt so nett. Ich brauche nur noch eine weibliche Form davon, weil es auch Listen nur mit Frauen gibt. ;-)

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ja stimmt, das mit dem

Eingetragen von Stefan.Korn (286)
am 22.02.2019 - 18:14 Uhr

Ja stimmt, das mit dem separaten View im Header beim "Hero of the day" ist ja Käse, ist ja gar nicht nötig beim Random Sort. Da habe ich es mal wieder kompliziert gemacht als es ist ...

Okay, Paternoster-Prinzip also. Das hört sich auch gut an. Ist aber auch kompliziert. Irgendwie gefällt es mir. Ich denke nochmal drüber nach.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ja mit gefällts auch. Ich

Eingetragen von montviso (2188)
am 22.02.2019 - 19:27 Uhr

Ja mit gefällts auch. Ich habe dem Kunden versprochen, ich halte den Ball flach beim Aufwand, weil ich es so interessant finde.
Aber ich habe auch keine Garantie gegeben, dass es eine Lösung gibt.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hi Montviso, Wenn diese View

Eingetragen von Hyp1 (1463)
am 24.02.2019 - 10:50 Uhr

Hi Montviso,

Wenn diese View nicht gecached wird könnte das einen erheblichen Impact auf die Performance der Seite haben.
Schau mal hier:
https://docs.acquia.com/resource/caching/views/
und hier:
https://www.drupal.org/project/views_custom_cache

Aber eben, das wäre mit Vorsicht zu geniessen...

MfG

Robert

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hm, Robert, ich versteh nicht

Eingetragen von montviso (2188)
am 24.02.2019 - 15:27 Uhr

Hm, Robert, ich versteh nicht genau, worauf Du raus willst.
Die View ist momentan nicht gecached, die Performance ist akzeptabel, weil es ja nur wenige Einträge sind.

Das auftretende Cache-Problem entsteht also eher nicht in der View.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hast du schon mal in die Cache Tabellen geschaut?

Eingetragen von schmittrich (213)
am 24.02.2019 - 16:53 Uhr

Hast du schon mal nach dem Leeren des Cache die Cache Tabellen beobachtet, um zu sehen, wo und woher genau Cache-Einträge generiert werden?

  • Anmelden oder Registrieren um Kommentare zu schreiben

@MontvisoWie lange ein Query

Eingetragen von Hyp1 (1463)
am 24.02.2019 - 17:00 Uhr

@Montviso

Wie lange ein Query dauert hängt nicht davon ab wieviele Einträge es sind, sonder wie komplex er ist.
Wenn mehrere User gleichzeitig auf diese View zugreifen und die jedesmal einen Query mit zig Joins
ausführen muss(anstatt aus dem Cache), dann hat das ganz sicher Einfluss auf die Performance.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Sonderlich komplex ist der

Eingetragen von montviso (2188)
am 24.02.2019 - 17:09 Uhr

Sonderlich komplex ist der Join nicht.

Und ja, es mag Einfluss haben.
Aber wenn der Cache eingestellt ist, dann klappt es sicher nicht mehr mit dem Paternoster.
Und solange der Kunde den haben will, ist Cache für ihn an der Stelle kein Thema.

Die Frage ist ja eher, was überhaupt gecached wird, wenn gar kein Drupal Cache eingestellt ist.

Das mit den Cache-Tabellen beobachten, was schmittrich vorschlägt, werde ich auf jeden Fall mal machen.

  • Anmelden oder Registrieren um Kommentare zu schreiben

@Montviso ich würde sagen das

Eingetragen von Hyp1 (1463)
am 24.02.2019 - 17:38 Uhr

@Montviso

ich würde sagen das grob geschätzt ein halbes dutzend oder mehr verschiedene
Caches involviert sind, je nachdem was installiert und konfiguriert ist.
Aber grds. werden in Views SQL Queries und Results aus Perfomancegründen gecached.

LG

Robert

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ja, das muss ich mir mal

Eingetragen von montviso (2188)
am 24.02.2019 - 20:33 Uhr

Ja, das muss ich mir mal näher ansehen, welche Chaces da anspringen - auch wenn kein Drupal Cache aktiviert ist.

  • Anmelden oder Registrieren um Kommentare zu schreiben

views_random_seed

Eingetragen von marco.b (645)
am 26.02.2019 - 07:39 Uhr

https://www.drupal.org/project/views_random_seed kann da möglicherweise auch interessant sein.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Danke, Marco, das liest sich

Eingetragen von montviso (2188)
am 26.02.2019 - 08:09 Uhr

Danke, Marco, das liest sich interessant.
Muss ich mich näher mit beschäftigen.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • Wie erlaubt man neuen Benutzern auf die Resetseite zugreifen zu dürfen.
  • [gelöst] Anzeigeformat Text mit Bild in einem Artikel, Drupal 11
  • Social Media Buttons um Insteragram erweitern
  • Nach Installation der neuesten D10-Version kein Zugriff auf Website
  • Composer nach Umzug
  • [gelöst] Taxonomie Begriffe zeigt nicht alle Nodes an
  • Drupal 11 + Experience Builder (Canvas) + Layout Builder
  • Welche KI verwendet ihr?
  • Update Manger läst sich nicht Installieren
Weiter

Neue Kommentare

  • melde mich mal wieder, da ich
    vor 2 Wochen 1 Tag
  • Hey danke
    vor 2 Wochen 2 Tagen
  • Update: jetzt gibt's ein
    vor 2 Wochen 3 Tagen
  • Hallo, im Prinzip habe ich
    vor 3 Wochen 14 Stunden
  • Da scheint die Terminologie
    vor 3 Wochen 17 Stunden
  • Kannst doch auch alles direkt
    vor 3 Wochen 4 Tagen
  • In der entsprechenden View
    vor 3 Wochen 4 Tagen
  • Dazu müsstest Du vermutlich
    vor 3 Wochen 4 Tagen
  • gelöst
    vor 6 Wochen 1 Tag
  • Ja natürlich. Dass ist etwas,
    vor 6 Wochen 2 Tagen

Statistik

Beiträge im Forum: 250233
Registrierte User: 20452

Neue User:

  • ByteScrapers
  • Mroppoofpaync
  • 4aficiona2

» Alle User anzeigen

User nach Punkten sortiert:
wla9461
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 33 Gäste online.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association