Jak mogę posortować widok na podstawie przepisanego pola?

10

Mam widok typu zawartości, który zawiera dwa różne pola daty (jedno z powtórzeniami daty i jedno wielowartościowe pojedyncze daty). W danym momencie wypełnione jest tylko jedno pole daty. W widoku widoku połączyłem dwa pola, ukrywając pierwsze pole daty i przepisując drugie, włączając w to zamienny token pierwszego i drugiego. Czy jest jakiś sposób na użycie teraz przepisanego pola do sortowania widoku w porządku rosnącym na podstawie tego połączonego pola daty? Wygląda na to, że sortuje je na podstawie oryginalnej wartości pola daty.

Przeprowadziłem badania i znalazłem tylko stare, nieco powiązane wątki z ślepymi zaułkami.

wyświetlenia sortowane według przepisanego pola?

Tabela nie jest sortowana według przepisanego pola, ale według oryginalnego pola

Widoki: pole niestandardowe dla kryteriów sortowania

Sortuj według globalnego: niestandardowy tekst. Czy to możliwe?

Miałem nadzieję, że istnieje nowy lub podstępny sposób, aby to osiągnąć.

Nigel Waters
źródło
Czy jest jakiś powód, dla którego nie możesz użyć odpowiedzi merlinofchaos? drupal.org/node/1260160#comment-4907526
Kari
W rzeczywistości nie udziela odpowiedzi na temat korzystania z pola obliczeniowego. Po prostu zaleca go używać. Nie mam nic przeciwko temu, ale nie wiem, co zrobić z modułem. Miałem również nadzieję, że może być coś nowego do wypróbowania, ponieważ było to 2 lata temu i dla Drupala 6.
Nigel Waters
Tak, to była krótka odpowiedź. Zasada jest jednak nadal taka sama. Zobacz moją odpowiedź.
Kari Kääriäinen
Co chcesz zrobić z tymi polami daty? Wybierz najbliższą datę?
Kari Kääriäinen,
Chcę posortować typ treści zdarzenia według dwóch pól daty w porządku rosnącym.
Nigel Waters

Odpowiedzi:

4

Jeśli nie chcesz wybierać trasy modułu, jest to jedna alternatywa:

1) instalacja komputerowa polowy moduł
2) dodać pole komputerowej do treści typu
3) w ustawieniach terenowych, w kodzie komputerowa (PHP) textarea, można uzyskać dostęp do danych pól.

Połącz zmienne z polami daty w bieżącym języku.

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

Twoje wartości daty można teraz znaleźć w

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

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

Zrób dowolną logikę z polami daty i przypisz wynik do

$entity_field[0]['value']

Teraz masz sortowalne pole, którego możesz użyć w widokach, ale najpierw musisz zaktualizować wszystkie węzły, ponieważ obliczone pole zostanie obliczone i zapisane tylko w bazie danych przy zapisie węzła. Można to zrobić na wiele sposobów, jednym z nich jest widok Operacje zbiorcze, co daje opcję ponownego zapisania węzłów w folderze admin / content.

Kari Kääriäinen
źródło
Nie jestem pewien, czy to zadziała z jednym polem daty z powtarzającymi się datami i innym polem z pojedynczą datą (z ustawieniem nieograniczonym). Może to działać w przypadku, gdy oba pola są tylko pojedynczymi wartościami.
Nigel Waters
Zredagowałem swoją odpowiedź na te przypadki. Za pomocą dpm ($ encja) możesz zobaczyć, jaka jest struktura pól daty. dpm jest dostarczany z modułem Devel.
Kari Kääriäinen,
Proszę nie polecać [und]składni. Zamiast tego użyj field_get_items.
Letharion
1

Myślę, że możesz to zrobić za pomocą funkcji View Natural Sort . Ma opcję sortowania pól oznacza - Włącz sortowanie według określonych pól . Jeśli wykonasz ten samouczek , wpadniesz na pomysł !!.

Bala
źródło
drupal.org/project/partial_date ma opcję integracji z widokami
Bala
0

Jedynym sprytnym sposobem na to, aby tak się stało, jest to, że jeśli nie używasz paginacji, możesz użyć sortowania PHP w niestandardowym zastąpieniu zapytania, które nie zależy od bazy danych.

Według stevector ,

Podział na strony naprawdę powstrzymuje nas przed sortowaniem według pól obliczeniowych, ponieważ zwykle musimy powiedzieć „Baza danych! Uzyskaj wyniki 21-30 podczas sortowania według kolumny nid”.

Dlatego nie można wiarygodnie uzyskać wyników 21-30 z bazy danych, jeśli baza danych nie wie, jak zdefiniować 21-30 (jak w przypadku pola obliczeniowego).

Zatem najbardziej praktycznym i niezawodnym rozwiązaniem jest użycie pola obliczeniowego, o którym wspomniał Kari Kääriäinen.

beth
źródło
Wygląda na to, że ktoś przegłosował mnie po tym, jak podałem numer wersji i naprawiłem błąd wklejania kopii. Czy coś jest nie tak z tą odpowiedzią?
beth
Wcześniej głosowałem za podejściem modułowym, ale później przegłosowałem, ponieważ ta, jak każda inna, w tym moja, nie jest użyteczną odpowiedzią, ponieważ samo pytanie jest nadal niejasne, przynajmniej dla mnie.
Kari Kääriäinen
Pytanie wydaje mi się jasne. Dodam wyjaśnienie do mojej odpowiedzi.
beth
Nieważne, zdałem sobie sprawę, że widoki nie zachowują się dokładnie tak, jak myślałem.
beth
0

Jest to trochę hackerski sposób, aby to zrobić, ale działa i nie potrzebujesz żadnych dodatkowych modułów.

Utwórz etykietę dla pola, które chcesz posortować i NIE wykluczaj go z wyświetlania. Zamiast tego przepisz wyświetlacz jako „pusty”, dodając pusty <!---->komentarz HTML jako wartość przepisania. Następnie dodaj inne pole php / przepisane jako element podrzędny tej kolumny.

Spowoduje to wyświetlenie nagłówka tabeli dla właściwej kolumny do sortowania.

przebiegły
źródło