Tridion pagination - получение общего количества результатов - PullRequest
10 голосов
/ 23 марта 2012

Мы пишем некоторый код для управления разбиением на страницы результатов, возвращаемых запросом к базе данных Tridion Broker (с использованием API).

Мы используем SDL Tridion 2011 SP1 и можем использовать PagingFilter, чтобы получить tcmIds только для компонентов на выбранной странице.

Однако, при написании элемента управления разбиением на страницы нам нужно знать общее количество результатов (чтобы определить, сколько страниц будет). Есть ли более эффективный механизм для этого, чем просто запустить отдельный запрос для «всех» результатов и выполнить .Length для возвращаемого массива строк? (Очевидно, что вы будете запускать этот запрос только один раз и сохранять это значение при переходе пользователя между страницами.)

Если мы получаем все результаты, то зачем мне использовать PagingFilter, когда мы можем просто обработать информацию, возвращаемую в запросе «все»?

Большое спасибо заранее, Jonathan

ПРИМЕЧАНИЕ. Вероятно, будет получено максимум 2000 результатов любого типа.

Ответы [ 2 ]

8 голосов
/ 24 марта 2012

Во время публикации вашего компонента вы можете реализовать TBB, который подсчитывает все ваши опубликованные компоненты, а затем публикует результат в текстовом или XML-файле в виде двоичного файла, который вы читаете, используя стандартные функции system.io. Вы также можете опубликовать отдельный DCP специально для хранения счетчика (тогда вам потребуется схема и компонент для каждой публикации).

Идея состоит в том, чтобы определить Count во время визуализации и каким-то образом опубликовать это число. Вытащить один номер на стороне презентации, безусловно, будет быстрее, чем вытащить 2000 DCP.

6 голосов
/ 23 марта 2012

У меня есть 3 возможных ответа для вас, хотя ни один не может быть правильным или тем, который вам нужен.

  1. Невозможно использовать CD API для чтения СЧЕТА возвращенногоПредметы.Вы можете написать что-то вроде расширения.Будь то расширение для хранения компакт-дисков, прямой запрос к БД и т. Д.

  2. Вы прочитали точное количество предметов в своей коллекции.Это особенно сложно в случае, если вы используете запрос для Компонентов с намерением получить DCP для этих Компонентов.Возможно, для данного компонента нет DCP, поэтому сначала вам нужно прочитать все DCP, чтобы узнать точное количество элементов, для которых вы хотите разбить страницы на страницы.Очевидно, это победит всю цель нумерации страниц.Вы можете уменьшить это снижение производительности, запустив запрос один раз, а затем кешировать его некоторое время, но в зависимости от того, к чему вы обращаетесь, каждый посетитель веб-сайта может запрашивать разные термины, что приводит к снижению производительности.*

  3. Вам не важно общее количество элементов в нумерации страниц.Например, вместо отображения «Страница 1 из 23», «Страница 2 из 23» и т. Д. Вы просто отобразите страницу 1, страницу 2 с их кнопками «Далее» и «Назад» рядом с ним.

Надеюсь, это поможет!

...