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ąć.


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.


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


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.


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.