Як я показую лише 3 останні публікації для кожного терміну в перегляді?


13

За допомогою іншого питання: Показати новіші вузли для кожного терміна таксономії в Переглядах. Я зміг створити потрібний мені вид, за винятком того, що він відображає всі повідомлення для кожного терміна (згруповані за термінами)? Як обмежити кожен термін, щоб відображати лише 3 останніх публікації.

напр

Термін 1
- Пост 1
- Пост 2
- Пост 3

Термін 2
- Пост 1
- Пост 2
- Пост 3

Термін 3
- Пост 1
- Пост 2
- Пост 3

Відповіді:


9

Якщо вам потрібен лише один вузол, ви можете використовувати зв'язок «Представницький вузол». Але якщо вам потрібно три вузли на кожен термін, використовуйте щось на зразок Views Field View .

1) Створіть «дочірнє» подання для вмісту. Щось на зразок цього: введіть тут опис зображення

Додайте аргумент терміна таксономії, обмеження пейджера, сортування та ін.: введіть тут опис зображення

Тепер ви можете прикріпити цей погляд до іншого.

2) Створіть подання таксономії: введіть тут опис зображення

Додати поле ідентифікатора прихованого терміна, а потім додайте поле "Глобальний: Вид": введіть тут опис зображення

Не забудьте налаштувати кешування. Зі сторінки перегляду поля :

Настійно рекомендується використовувати цей модуль спільно з кешуванням переглядів. Перегляди Кеш вмісту та дії кешу - хороші способи кешування переглядів.


Дякую Калабро. Ваш підхід також правильний. Я спочатку йшов цим маршрутом, але хотів побачити, чи є кращий спосіб, ніж створити тону переглядів, а потім вставити подання після перегляду.
Найджел Уотерс

2
Це не тонна, @NigelWaters. Це лише два: один для вузлів і один для термінів. Це рішення є досить стабільним, і я використовую його для переліку нестандартних переглядів.
калабро

Моє непорозуміння. Я думав, що потрібно створити перегляд для кожної групи.
Найджел Уотерс

Це майже ідеально для мого використання. Єдине моє питання - це посилання "більше" для дочірнього перегляду, посилання на той самий погляд і все ще відображає лише обмежену кількість елементів! Назви батьківського виду посилаються на таксономію, яка працює за бажанням.
Марк

А-а-а - я створив блок-дисплей для перегляду своєї дитини лише з першими n-елементами та ще одним посиланням. Більше посилання переходить до відображення сторінки, і воно відображає всі елементи з пейджером. Чудово! Тепер єдиним питанням є заголовок (у головному вікні) посилання на термін таксономії, але я можу або від’єднати це, або змінити відображення сторінки дочірнього виду на ту саму URL-адресу.
Марк

7

Після подальшого дослідження, схоже, Peek Summary може бути саме тим, що ви хочете. Скріншоти документації призначені для Drupal 6, а в Drupal 7 вона дещо відрізняється, тому я додав кілька оновлених скріншотів.

  • Виберіть підсумок "Peek Summary" із пункту "Контекстні фільтри"> "Коли значення фільтра відсутнє в URL-адресі"> "Відображення резюме"> "Формат"

Виберіть підсумок "Peek Summary" із пункту "Контекстні фільтри"> "Коли значення фільтра відсутнє в URL-адресі"> "Відображення резюме"> "Формат"

  • Ви побачите перегляд підвидів. Клацніть на шестірні поруч із пейджером для групи, яку ви хочете обмежити.

Клацніть піктограму налаштувань пейджера

  • Введіть максимум елементів, які відображатимуться в опціях пейджера.

Перше поле в розділі Параметри пейджера

Вам доведеться відредагувати пейджер для кожної групи, яку ви хочете обмежити, що прикро.Коли ви редагуєте пейджер для однієї групи, він змінює налаштування для всіх груп. Якщо ви хочете відобразити кількість вузлів на групу, відмінну від загальної кількості груп, замініть їх у налаштуваннях "Форматування" у розділі "Контекстні фільтри" (на першому екрані фіолетовим кольором).

Він має недолік, по суті, створити [n] представлення для [n] угруповань, що може бути проблемою продуктивності залежно від кількості угруповань, але він обмежує запит лише числом, встановленим для відображення. Це може покращити вашу ефективність, залежно від випадку використання. Як завжди, кешуйте відповідально.


Здається, що пейджер не може бути замінений на одну групу. Якщо натиснути редагування на пейджері в групі, виводить налаштування головного пейджера. Якщо я щось не пропускаю?
Найджел Уотерс

Ах, правильно ти. Ну, це ідеально тоді. Ви зможете обмежити їх усі одразу.
beth

На жаль, це означає, що пейджер впливає і на кількість показаних груп. Я припускаю, що моя первісна публікація вводить в оману, оскільки в прикладі відображаються лише три терміни з трьома публікаціями. Мені потрібно показати 10 або більше термінів з 3 повідомленнями на термін на одній сторінці. Так близько :(
Найджел Уотерс

Я не помилявся з приводу "переосмислення елементів для показу", нічого не роблячи. Використовуйте це, щоб визначити кількість груп для показу. Введення "0" дає вам нескінченну групу.
beth

2

Способом обмеження цього коду було б додати щось подібне до спеціального модуля:

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;
}

Це для перегляду термінів таксономії, які з'єднані з вузлами через відношення. Якщо у вас просто перегляд вузлів, ваш пробіг може відрізнятися.

Хоча це заважає відображати більше 3 на термін, це не завадить запиту повертати всі результати для кожного терміна, тому він зовсім не покращує продуктивність SQL. Якщо у вас є дуже велика кількість результатів для кожного терміну, виготовте окремі екрани панелі перегляду та розмістіть їх у одному регіоні, використовуючи щось на зразок CTools Page Manager, щоб ви не мали великих запитів.

Як завжди, ви хочете кешувати цей матеріал на виробництві.


2
Дійсно коментувати мою стать не потрібно. Це досить згубно. t.co/i1dKE8hQ t.co/ATfV3mBG У будь-якому випадку, Hook_views_pre_build()або hook_build_pre_execute()може бути корисним для чогось подібного, що зменшує показник продуктивності, але я не такий знайомий з ними. Або вам може сподобатися моя відповідь на це питання раніше .
beth

Оновлення: Я маю це на повному рівні (Crell та stevector), що "Ви не можете обмежувати кожну групу окремо одним запитом. Ви повинні це робити на етапі візуалізації. SQL не може цього робити". Вони також сказали: "Найкраще, що ти можеш зробити, - це ряд запитів профспілки", але вони не вважають, що і "Views" можуть це зробити.
beth

Ах, я сприйняв тебе за ОП. У будь-якому випадку модуль Peek Summary може бути корисним у цьому випадку, хоча він містить власні проблеми ефективності. Його творець попереджає, що це "якось круто, але якось круто".
beth
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.