Jak wyświetlić tylko 3 najnowsze posty dla każdego terminu w widoku?

13

Za pomocą innego pytania: Pokaż najnowsze węzły dla każdego terminu taksonomii w widokach, które udało mi się utworzyć, którego potrzebuję, poza tym, że wyświetla wszystkie posty dla każdego terminu (pogrupowane według terminu)? Jak ograniczyć każdy termin, aby wyświetlał tylko 3 swoje najnowsze posty.

na przykład

Termin 1
- Post 1
- Post 2
- Post 3

Termin 2
- Post 1
- Post 2
- Post 3

Termin 3
- Post 1
- Post 2
- Post 3

Nigel Waters
źródło

Odpowiedzi:

9

Jeśli potrzebujesz tylko jednego węzła, możesz użyć relacji „Węzeł reprezentatywny”. Ale jeśli potrzebujesz trzech węzłów na każdy termin, użyj czegoś takiego jak Widoki Widok pola .

1) Utwórz widok „podrzędny” dla treści. Coś takiego: wprowadź opis zdjęcia tutaj

Dodaj argument terminu taksonomia, limity stronicowania, sortowanie itp.: wprowadź opis zdjęcia tutaj

Teraz możesz dołączyć ten widok do innego.

2) Utwórz widok taksonomii: wprowadź opis zdjęcia tutaj

Dodaj pole identyfikatora ukrytego terminu, a następnie pole „Globalny: widok”: wprowadź opis zdjęcia tutaj

Nie zapomnij skonfigurować buforowania. Ze strony Widok pola widzenia :

Zdecydowanie zaleca się używanie tego modułu w połączeniu z buforowaniem widoków. Widoki Bufor zawartości i Akcje pamięci podręcznej są dobrym sposobem buforowania widoków.

kalabro
źródło
Dzięki Kalabro. Twoje podejście jest również poprawne. Początkowo jechałem tą trasą, ale chciałem sprawdzić, czy istnieje lepszy sposób niż utworzenie dużej liczby wyświetleń, a następnie osadzić widok po widoku.
Nigel Waters,
2
To nie jest tona, @NigelWaters. To tylko dwa: jeden dla węzłów i jeden dla terminów. To rozwiązanie jest dość stabilne i używam go do niestandardowych list widoków.
kalabro
Moje nieporozumienie. Pomyślałem, że muszę stworzyć widok dla każdej grupy.
Nigel Waters
Jest to prawie idealne do mojego przypadku użycia. Moim jedynym problemem jest link „więcej” do widoku potomnego, linki do tego samego widoku i nadal wyświetla tylko ograniczoną liczbę elementów! Tytuły z widoku macierzystego prowadzą do taksonomii, która działa zgodnie z potrzebami.
Mark
Ahah - stworzyłem blokowy widok dla mojego dziecka z tylko pierwszymi n pokazanymi elementami i dodatkowym linkiem. Więcej link prowadzi do wyświetlania strony i wyświetla wszystkie elementy za pomocą pagera. Świetny! Teraz jedynym problemem jest odsyłacz nagłówka (w widoku głównym) do terminu taksonomii, ale mogę albo to rozłączyć, albo zmienić sposób wyświetlania strony podrzędnej na ten sam adres URL.
Mark
7

Po dalszych badaniach wydaje się, że Podsumowanie wglądu może być dokładnie tym, czego chcesz. Zrzuty ekranu w dokumentacji dotyczą Drupala 6, a nieco inaczej w Drupal 7, więc dołączyłem kilka zaktualizowanych zrzutów ekranu.

  • Wybierz Podsumowanie podglądu z „Filtry kontekstowe”> „Gdy wartość filtru nie znajduje się w adresie URL”> „Wyświetl podsumowanie”> „Format”

Wybierz Podsumowanie podglądu z „Filtry kontekstowe”> „Gdy wartość filtru nie znajduje się w adresie URL”> „Wyświetl podsumowanie”> „Format”

  • Zobaczysz widok widoków podrzędnych. Kliknij koło zębate obok pagera dla grupy, którą chcesz ograniczyć.

Kliknij ikonę preferencji pagera

  • Wprowadź maksymalną liczbę elementów do wyświetlenia w opcjach pagera.

Pierwsze pole w obszarze Opcje pagera

Będziesz musiał edytować pager dla każdej grupy, którą chcesz ograniczyć, co jest niefortunne.Podczas edycji pagera dla jednej grupy zmienia się ustawienia dla wszystkich grup. Jeśli chcesz wyświetlić liczbę węzłów na grupę inną niż łączna liczba grup, przesłon to w ustawieniach „Format” w „Filtrach kontekstowych” (na pierwszym zrzucie ekranu w kolorze fioletowym).

Ma tę wadę, że zasadniczo tworzy [n] widoki dla [n] grup, co może być problemem z wydajnością w zależności od liczby posiadanych grup, ale ogranicza zapytanie tylko do liczby ustawionej do wyświetlenia. Może to poprawić wydajność w zależności od przypadku użycia. Jak zawsze odpowiedzialnie buforuj.

beth
źródło
Wygląda na to, że pagera nie można zastąpić na grupę. Wciśnięcie edycji na pagerze w grupie powoduje wyświetlenie ustawień głównego pagera. Chyba że czegoś mi brakuje?
Nigel Waters,
Ach, masz rację. Cóż, to jest idealne. Będziesz mógł ograniczyć je wszystkie naraz.
beth
Niestety oznacza to, że pager wpływa również na liczbę wyświetlanych grup. Przypuszczam, że mój oryginalny post wprowadza w błąd, ponieważ przykład pokazuje tylko trzy hasła z trzema wpisami każdy. Muszę pokazać 10 lub więcej terminów z 3 postami na termin na jednej stronie. Tak blisko :(
Nigel Waters,
Myliłem się co do „przesłonięcia elementów do wyświetlenia”, nie robiąc nic. Użyj tego, aby określić, ile grup ma zostać pokazanych. Wpisanie „0” daje nieskończone grupy.
beth
2

Sposobem na ograniczenie tego w kodzie byłoby dodanie do modułu niestandardowego czegoś takiego:

function custom_views_pre_render(&$view) {
  //get the rows from the view just before render
  $results = $view->result;
  //create a counter
  $count = '';
  //we're going to built up a new $result array
  $new_results = array();
  //iterate through each view row
  foreach($results as $result) {
    //find the taxonomy term
    $term = $result->taxonomy_term_data_name;
    //add the term to a string of all the terms we've seen so far
    $count .= $term;
    //make sure to separate them with spaces to make them easier to count
    $count .= ' ' ;
    //count how many rows have the same term as the current one
    $term_count = array_count_values(str_word_count($count, 1));

    if($term_count[$term] <= 3){
      //if this is the third or fewer row with this term, add it to the new result array
      $new_results[] = $result;
    }
  }
  //instead of the normal view output, only show the results we put in our array.
  $view->result = $new_results;
}

Jest to widok warunków taksonomicznych, które są połączone z węzłami za pomocą relacji. Jeśli masz tylko widok węzłów, Twój przebieg może się różnić.

Chociaż zapobiega wyświetlaniu więcej niż 3 na termin, nie zapobiegnie to zwróceniu przez kwerendę wszystkich wyników dla każdego terminu, więc w ogóle nie poprawi wydajności SQL. Jeśli masz bardzo dużą liczbę wyników dla każdego terminu, tworzenie oddzielnych paneli widoku i umieszczanie ich wszystkich w jednym regionie za pomocą czegoś takiego jak CTools Page Manager , abyś nie uruchamiał wielkich zapytań.

Jak zawsze, będziesz chciał buforować te rzeczy podczas produkcji.

beth
źródło
2
Naprawdę nie ma potrzeby komentować mojej płci. To dość niszczące. t.co/i1dKE8hQ t.co/ATfV3mBG W każdym razie, Hook_views_pre_build()lub hook_build_pre_execute()może być przydatny do czegoś takiego, co zmniejsza wydajność, ale nie znam się na nich tak dobrze. Lub może spodobała Ci się moja odpowiedź na to pytanie .
beth 13.12
Aktualizacja: Mam dobrą opinię (Crell i stevector), że „Nie możesz ograniczyć każdej grupy osobno w jednym zapytaniu. Musisz to zrobić na etapie renderowania. SQL nie może tego zrobić, niestety”. Powiedzieli też: „Najlepsze, co możesz zrobić, to seria zapytań związkowych”, ale nie sądzą, że Widoki też to potrafią.
beth
Ach, pomyliłem cię z OP. W każdym razie moduł Podsumowanie wglądu może być przydatny w tym przypadku, chociaż przedstawia własne problemy z wydajnością. Jego twórca ostrzega, że ​​jest to „wstrętne, ale w pewnym sensie fajne”.
beth