2012-03-23 12 views
10

Estamos escribiendo algunos códigos para controlar la paginación de los resultados devueltos por una consulta de base de datos de Tridion Broker (utilizando la API).Paginación de Tridion: obtención del número total de resultados

Estamos utilizando SDL Tridion 2011 SP1 y podemos usar el Filtro de paginación para obtener los tcmIds de solo los Componentes en la página seleccionada.

Sin embargo, mientras escribimos el control de paginación, necesitamos saber el número total de resultados (para determinar cuántas páginas habrá). ¿Hay un mecanismo más eficiente para hacer esto que simplemente ejecutar una consulta separada para 'todos' los resultados y hacer un .Length en la matriz de cadenas devuelta? (Obviamente, solo ejecutaría esta consulta una vez y persistiría ese valor mientras el usuario hace clic entre páginas)

Si obtenemos todos los resultados, ¿por qué me molestaría en usar PagingFilter cuando solo podemos procesar la información devuelta? en la consulta 'todo'?

Muchas gracias de antemano, Jonathan

NOTA: Probablemente habrá un máximo de 2000 resultados de cualquier tipo devuelto.

+0

Entiendo que los objetos devueltos por la entrega de contenido anterior se almacenaron en caché pero ahora las consultas del intermediario (coincidencia exacta) están almacenadas en caché (¿desde Tridion 2011?) --_ tal vez_ ¿podría ser una razón para usar un filtro específico? He visto paginación con JavaScript, pero no estoy seguro de ideas mejores que su enfoque de dos consultas. –

+1

Gran pregunta Jon, no parece que puedas hacer una consulta de estilo "COUNT (....)". – Neil

+0

Gracias Neil. Sí, pensamos que podría haber un mecanismo COUNT (...) más eficiente también. El enfoque de PagingFilter es muy útil si SABE cuántas páginas tendrá o no necesita saber cuántas páginas (y manejar las matrices vacías que se devuelven de manera efectiva), pero habría pensado que esto es bastante raro. –

Respuesta

6

Tengo 3 respuestas posibles para usted, aunque ninguna podría ser la correcta o la que usted desea.

  1. No es posible utilizar el CD API para leer el COUNT de los elementos devueltos. Podrías escribir come tipo de extensión. Ya sea una extensión de almacenamiento de CD o una consulta directa de DB, etc.

  2. Lea el número exacto de artículos que tiene en su colección. Esto es particularmente complicado en caso de que esté utilizando la consulta de Componentes, con la intención de recuperar los DCP para estos Componentes. Puede ser que no haya un DCP para un Componente dado, por lo tanto, primero debe leer todos los DCP para saber el número exacto de elementos que desea paginar. Obviamente, esto frustrará todo el propósito de la paginación. Puede aliviar esta caída de rendimiento ejecutando la consulta una vez y luego guardarla en la memoria caché por un tiempo, pero dependiendo de lo que consulte, es posible que cada visitante del sitio web solicite diferentes términos, por lo que el rendimiento alcanzado es alto.

  3. No importa el número total de elementos en la paginación. Por ejemplo, en lugar de mostrar "Página 1 de 23", "Página 2 de 23", etc., simplemente mostraría la Página 1, Página 2 con sus botones Siguiente y Anterior al lado.

Hope this helps!

+0

Gracias Mihai. No había considerado el impacto de no tener DCP para un Componente (como resaltas en tu segunda sugerencia). Me gusta la idea de CD Storage Extension (ya que podemos permitir que los usuarios del sitio web filtren en una fecha posterior). Sin embargo, por ahora, creo que probablemente implementaremos la sugerencia 2 y usaremos el almacenamiento en caché. ¡Muchas gracias! –

8

Durante la publicación de su componente puede implementar un TBB que cuente todos sus componentes publicados, y luego publique el resultado en un archivo de texto o XML como un binario que lea utilizando las funciones estándar de system.io. También podría publicar un DCP por separado específicamente para mantener el conteo (entonces necesitaría un esquema y un componente para cada publicación).

La idea es determinar el recuento en tiempo de renderizado y de alguna manera publicar ese número. Sacar un solo número del lado de la presentación sería más rápido que tirar 2000 DCP.

+0

Gracias Nickoli. Creo que esta es una buena respuesta y estoy de acuerdo en que hacer esto en tiempo de publicación sería más eficiente. Creo que sería bueno crear una implementación de eXtension de "mejores prácticas" para lograr cierta consistencia entre los clientes de Tridion ... ¡Solo necesito encontrar tiempo ahora! –

Cuestiones relacionadas