Wie kann ich eine Ansicht anhand eines neu geschriebenen Felds sortieren?


10

Ich habe eine Ansicht eines Inhaltstyps, der zwei verschiedene Datumsfelder enthält (eines mit Datumswiederholungen und eines mit mehrwertigen Einzeldaten). Es wird jeweils nur ein Datumsfeld ausgefüllt. In der Anzeige der Ansicht habe ich die beiden Felder kombiniert, indem ich das erste Datumsfeld ausgeblendet und das zweite neu geschrieben und das Ersatz-Token des ersten und zweiten eingeschlossen habe. Gibt es eine Möglichkeit, das neu geschriebene Feld jetzt zu verwenden, um die Ansicht in aufsteigender Reihenfolge basierend auf diesem kombinierten Datumsfeld zu sortieren? Es scheint, dass es es basierend auf dem ursprünglichen Wert des Datumsfelds sortiert.

Ich habe meine Nachforschungen angestellt und nur alte, etwas verwandte Themen mit Sackgassen gefunden.

Ansichten nach umgeschriebenem Feld sortieren?

Die Tabelle wird nicht nach neu geschriebenem Feld, sondern nach Originalfeld sortiert

Ansichten: Benutzerdefiniertes Feld für Sortierkriterien

Nach global sortieren: Benutzerdefinierter Text. Ist es möglich?

Ich hatte gehofft, dass es einen neuen oder hinterhältigen Weg gibt, dies zu erreichen.


Gibt es einen Grund, warum Sie die Antwort von merlinofchaos nicht verwenden können? drupal.org/node/1260160#comment-4907526
Kari Kääriäinen

Er gibt eigentlich keine Antwort auf die Verwendung des berechneten Feldes. Er empfiehlt nur, es zu benutzen. Es macht mir nichts aus, es zu versuchen, aber ich weiß nicht, was ich mit dem Modul machen soll. Ich hoffte auch, dass es etwas Neues zu versuchen geben könnte, da dies vor 2 Jahren und für Drupal 6 war.
Nigel Waters

Ja, das war eine kurze Antwort. Das Prinzip ist jedoch immer noch dasselbe. Siehe meine Antwort.
Kari Kääriäinen

Was möchten Sie mit diesen Datumsfeldern tun? Wählen Sie den nächsten Termin?
Kari Kääriäinen

Ich möchte den Ereignisinhaltstyp nach den beiden Datumsfeldern in aufsteigender Reihenfolge sortieren.
Nigel Waters

Antworten:


4

Wenn Sie sich nicht für die Modulroute entscheiden möchten, ist dies eine Alternative:

1) Installieren Sie das Computed Field- Modul.
2) Fügen Sie Ihrem Inhaltstyp ein Computed Field hinzu.
3) In den Feldeinstellungen können Sie im Textbereich Computed Code (PHP) auf die Felddaten zugreifen.

Holen Sie sich Ihre Datumsfelder in Ihrer aktuellen Sprache in eine Variable.

$repeating_dates = field_get_items($entity_type, $entity, 'field_repeating_date_example');
$multidates = field_get_items($entity_type, $entity, 'field_multidate_example');

Ihre Datumswerte finden Sie jetzt in

$repeating_dates[0]['value'],
$repeating_dates[1]['value'],
$repeating_dates[2]['value'], etc.

$multidates[0]['value'],
$multidates[1]['value'],
$multidates[2]['value'], etc.

Führen Sie mit Ihren Datumsfeldern die gewünschte Logik aus und weisen Sie das Ergebnis zu

$entity_field[0]['value']

Jetzt haben Sie ein sortierbares Feld, das Sie in Ansichten verwenden können. Zuerst müssen Sie jedoch alle Knoten aktualisieren, da das berechnete Feld erst beim Speichern des Knotens berechnet und in der Datenbank gespeichert wird. Es gibt viele Möglichkeiten, dies zu tun. Eine davon ist die Verwendung von Views Bulk Operations. Sie bietet die Möglichkeit, Knoten unter admin / content erneut zu speichern.


Ich bin nicht sicher, ob dies mit einem Datumsfeld mit sich wiederholenden Datumsangaben und einem anderen Feld mit einem einzelnen Datum (mit der Einstellung "Unbegrenzt") funktioniert. Dies kann funktionieren, wenn beide Felder nur Einzelwerte sind.
Nigel Waters

Ich habe meine Antwort für diese Fälle bearbeitet. Mit dpm ($ entity) können Sie die Struktur Ihrer Datumsfelder sehen. dpm wird mit dem Devel-Modul geliefert.
Kari Kääriäinen

Bitte empfehlen Sie die [und]Syntax nicht. Verwenden Sie stattdessen field_get_items.
Letharion


0

Wenn Sie keine Paginierung verwenden, können Sie die PHP-Sortierung in einer benutzerdefinierten Abfrageüberschreibung verwenden, die nicht auf der Datenbank basiert.

Laut stevector ,

Die Paginierung hindert uns wirklich daran, nach berechneten Feldern zu sortieren, da wir normalerweise "Datenbank! Erhalte die Ergebnisse 21-30 beim Sortieren nach der nid-Spalte" sagen müssen.

Sie können also nicht zuverlässig die Ergebnisse 21-30 von der Datenbank erhalten, wenn die Datenbank nicht weiß, wie sie die 21-30 definiert (wie im Fall eines berechneten Feldes).

Die praktischste und zuverlässigste Lösung ist daher die Verwendung von Computed Field, wie von Kari Kääriäinen erwähnt.


Es sieht so aus, als hätte mich jemand herabgestuft, nachdem ich die Versionsnummer angegeben und einen Fehler beim Einfügen von Kopien behoben habe. Stimmt etwas mit dieser Antwort nicht?
Beth

Ich habe früher für den Modulansatz gestimmt, aber später herabgestimmt, weil dies, wie jedes andere, auch meine, keine brauchbare Antwort ist, da die Frage selbst zumindest für mich immer noch unklar ist.
Kari Kääriäinen

Die Frage scheint mir klar zu sein. Ich werde meiner Antwort eine Klarstellung hinzufügen.
Beth

Egal, mir wurde klar, dass sich Views nicht genau so verhält, wie ich es tue.
Beth

0

Dies ist ein bisschen hackig, aber es funktioniert und Sie benötigen keine zusätzlichen Module.

Erstellen Sie eine Beschriftung für das Feld, nach dem Sie sortieren möchten, und schließen Sie es NICHT von der Anzeige aus. Schreiben Sie stattdessen die Anzeige als "leer" um, indem Sie einen leeren HTML- <!---->Kommentar als Umschreibwert hinzufügen . Fügen Sie dann Ihr anderes PHP / umgeschriebenes Feld als untergeordnetes Element dieser Spalte hinzu.

Dadurch wird der Tabellenkopf für die richtige Spalte zum Sortieren angezeigt.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.