Usiłuję uzyskać połączenie węzłów użytkownika i komentarzy posortowane według „daty publikacji”. Ten post zawiera linki do projektów piaskownicy dla D6, ale nie ma nic dla 7.
Ten post zawiera przykład użycia hook_views_pre_execute () i SQL UNION w D6. To nie działa dla D7 z widokami 3.
Natknąłem się na komentarz merlinofchaos
Ponieważ teraz używamy nowego generatora zapytań Drupala, zapytanie jest obiektem SelectQuery, który będziesz musiał zmodyfikować lub wymienić. Wyszukaj nową warstwę bazy danych Drupal 7, aby uzyskać więcej informacji.
Czy ktoś ma przykład, jak to zrobić lub inne rozwiązanie, aby połączyć dwa widoki?
Odpowiedzi:
Oto działający i przetestowany przykład:
Działa to w przypadku większości widoków. Jednak niektóre wtyczki stylu mogą robić wymyślne rzeczy, które nie będą działać z tą techniką (moduł kalendarza patrzę na ciebie).
źródło
Za pomocą modułu dodatkowych funkcji obsługi Widoki można generować zapytania UNION SQL z dwóch różnych widoków / wyświetlaczy.
Szczegółowy samouczek na drupal.org tutaj
https://www.drupal.org/project/views_extra_handlers
źródło
Skończyło się to na użyciu komendy db_query () do utworzenia SQL UNION, a następnie renderowaniu jej do układu tabeli, w tym pagerów przy użyciu funkcji theme ().
Dla użytkownika wygląda to jak domyślne widoki. Inną korzyścią było to, że mogłem bardzo zoptymalizować zapytanie. Pokazuję „działania mojego przyjaciela”, a jeśli użyjesz do tego widoków, utworzysz listę znajomych i użyjesz go w klauzuli „IN” SQL, która jest bardzo wolna, jeśli masz więcej niż 50 lub 100 rekordów.
Mógłbym zawęzić listę znajomych tylko do tych, którzy byli zalogowani na stronie w ciągu ostatnich x dni.
To jest przykładowy kod:
źródło
Na przyszłość, w ten sposób połączyłem dwa widoki oparte na tym samym stole razem. Te same zasady powinny mieć również zastosowanie do widoków opartych na różnych tabelach z taką samą liczbą pól.
W poniższym przypadku wybierany jest tylko identyfikator, ponieważ format jest ustawiony na renderowany byt. Ale jeśli korzystasz z pól, zawsze możesz dodać dodatkowe pola zastępcze do zapytania, które ma mniej pól, ponieważ dodałem znacznik czasu poniżej.
źródło
Wyobrażam sobie, że ma coś takiego:
Chociaż tego nie testowałem.
Niektóre linki, które mogą pomóc:
http://api.drupal.org/api/drupal/include!database!select.inc/function/SelectQueryInterface%3A%3Aunion/7
http://drupal.org/node/557318#comment-1991910
źródło
Natknąłem się na moduł o nazwie Widoki Widok pola , który pozwala osadzić widok jako pole w innym widoku. Jeszcze tego nie wypróbowałem, ale może ci to pomóc.
źródło
Funkcja zaplecza widoków EntityFieldQuery obsługuje zapytania dla wielu typów jednostek jednocześnie. Dlatego powinno być możliwe zapytanie o węzły i komentarze. Oba typy jednostek używają
uid
właściwości do łączenia się z ich autorami, dlatego na poziomie interfejsu API EntityFieldQuery :: propertyCondition () powinna umożliwiać wybieranie węzłów i komentarzy od jednego użytkownika. Wydaje mi się, że backend widoków oferuje tę samą funkcję.źródło
Innym podejściem może być utworzenie kanałów z węzłami i komentarzami (z filtrem kontekstowym identyfikatora użytkownika w adresie URL), a następnie połączenie tych dwóch kanałów w nowy kanał i wyświetlenie go według daty publikacji.
źródło
Używane globalne: pola PHP ? Możesz ich użyć do sklejenia taśmy razem Widok, który łączy oba te elementy.
Utwórz widok zawartości z polami Treść: Tytuł i Treść: Komentarze (Wykluczone z wyświetlania).
Dodaj pole PHP, które oblicza, która jest nowsza, datę ostatniej aktualizacji lub datę ostatniego komentarza użytkownika i ustaw wartość pola na tę datę. Dodaj to pole jako warunek sortowania.
Dodaj podobne pole, które wyświetla łącze do komentarza lub do węzła.
To brzmi dla mnie dobrze!
źródło