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.