Boucle para agrupar articulos del mismo día

Buenas,

Estoy atascado:

La idea es agrupar los artículos según el día de publicación:
tengo este boucle:

[(#DATE|jour)]
[(#DATE|mois|couper{3})]
[(#DATE|annee)]

#TITRE

[(#DATE|jour)]-[(#DATE|mois|couper{3})]-[(#DATE|annee)] Category Name

El resultado està aqui: http://www.aafb.es/actualitat-ferroviaria-actualidad/?var_mode=recalcul

Seguro que es una tonteria pero no veo el fallo

Un saludo,
Miguel C. Mengod

Sun, 21 Feb 2010 02:03:34 +0100, Miguel:

                    <BOUCLE2(ARTICLES){id_rubrique}{par
date}{inverse}> <div class="archive-post-date">

Bueno eso bien, recorres los artículos por fecha, el más reciente antes.

                        <div
class="archive-post-day">[(#DATE|jour)]</div> <div
class="archive-post-month">[(#DATE|mois|couper{3})]</div>
                        <div
class="archive-post-month">[(#DATE|annee)]</div>
                    </div>

Eso lo escribes por cada artículo. Si tienes 42 artículos, va a
aparecer 42 veces, aunque sean todos del mismo día.
Usa el filtro |unique: |unique - SPIP
También es útil conocer #TOTAL_UNIQUE:
#TOTAL_UNIQUE - SPIP (tal vez no en este caso).

                    <B3>
                        <BOUCLE3(ARTICLES){id_rubrique}{jour_relatif}{par
date}{inverse}{doublons}>
                        <div class="archive-post-title">
                            <h3><a href="#URL_ARTICLE">#TITRE</a></h3>
                            <div
class="post-date">[(#DATE|jour)]-[(#DATE|mois|couper{3})]-[(#DATE|annee)]
<a href="#">Category Name</a></div>
                        </div>
                        </BOUCLE3>
                    </B3>

Vas listando todos los artículos del mismo día, pero tu {doublons} no
va a impedir que al paso de bucle siguiente aparezca el indicador de
fecha que vimos más arriba.

(Por cierto: |nom_mois es lo que quieres, no |mois. Es que |couper{3} me
hace pensar que tu intención es poner por ejemplo "ene", "feb", etc.)

Bueno en resumen, tu bucle B3 adentro de tu bucle B2 es un error de
lógica. Tienes que hacer sólo tu bucle B2, es decir sí enseñar cada
artículo cuando le toque, pero poner la fecha sólo la primera vez de
cada día (con |unique).

--
davux

Me he perdido…

Me intenté basar en este contrib http://www.spip-contrib.net/Liste-d-Articles-par-annee-puis

Si elmino B3, ya no tengo el « separador que quiero »…

Tengo un cacao mental y no acabo de ver lo que me intentas explicar

El 21 de febrero de 2010 10:21, davux <da@weeno.net> escribió:

Sun, 21 Feb 2010 02:03:34 +0100, Miguel:

<BOUCLE2(ARTICLES){id_rubrique}{par
date}{inverse}>

Bueno eso bien, recorres los artículos por fecha, el más reciente antes.

[(#DATE|jour)]
[(#DATE|mois|couper{3})]
[(#DATE|annee)]

Eso lo escribes por cada artículo. Si tienes 42 artículos, va a
aparecer 42 veces, aunque sean todos del mismo día.
Usa el filtro |unique: http://www.spip.net/es_article4524.html
También es útil conocer #TOTAL_UNIQUE:
http://www.spip.net/es_article4457.html (tal vez no en este caso).

#TITRE

[(#DATE|jour)]-[(#DATE|mois|couper{3})]-[(#DATE|annee)] Category Name

Vas listando todos los artículos del mismo día, pero tu {doublons} no
va a impedir que al paso de bucle siguiente aparezca el indicador de
fecha que vimos más arriba.

(Por cierto: |nom_mois es lo que quieres, no |mois. Es que |couper{3} me
hace pensar que tu intención es poner por ejemplo « ene », « feb », etc.)

Bueno en resumen, tu bucle B3 adentro de tu bucle B2 es un error de
lógica. Tienes que hacer sólo tu bucle B2, es decir sí enseñar cada
artículo cuando le toque, pero poner la fecha sólo la primera vez de
cada día (con |unique).

–
davux


Spip-es@rezo.net - http://listes.rezo.net/mailman/listinfo/spip-es

–
Un saludo,
Miguel C. Mengod

Mon, 22 Feb 2010 00:06:32 +0100, Miguel:

Me intenté basar en este contrib
Lister par année puis par mois - SPIP-Contrib

Si, pero quitaste el criterio {fusion} que es esencial. Éste es
necesario para hacer sólo un paso de bucle por año (por ejemplo), y no
por cada artículo.

Puedes seguir el ejemplo, pero síguelo totalmente, y lo vas adaptando
paso a paso, comprobando que siga funcionando cada vez.

Tengo un cacao mental y no acabo de ver lo que me intentas explicar

Lo que te explicaba en el mensaje anterior es que tu organización tal y
como la hiciste, no puede funcionar: tu boucle2 recorre cada artículo
y va escribiendo su fecha, lo cual no quieres: sólo quieres cada fecha
distinta una vez. El hecho de añadirle boucle3 adentro, sólo aumenta el
número de cosas escritas por boucle2.

Entonces te hablé de una manera de hacer que consiste en recorrer
efectivamente cada artículo con boucle2 (así normal, sin agregarle
boucle3 adentro), y controlar con |unique si pones o no la fecha. Y el
separador lo puedes poner incluir antes de la fecha, para que aparezca
a cada cambio de fecha.

[<div class="archive-separator"></div>
<div class="archive-post-date">
  <div class="archive-post-day">(#DATE|jour|unique{dia})</div>
  <div class="archive-post-month">[(#DATE|mois|couper{3})]</div>
  <div class="archive-post-month">[(#DATE|annee)]</div>
</div>]

Como ves, todo el bloque se escribe sólo si #DATE|jour|unique{dia}
tiene un valor, es decir sólo la primera vez que se encuentre el día.

De esta forma vas recorriendo los días uno por uno sin complicación
adicional, omitiendo sólo la fecha cuando ya se ha encontrado antes.

Otra técnica es la que está explicada en el artículo que mencionaste de
spip-contrib, usando el criterio {fusion}, es decir el GROUP BY de SQL.
Lee la documentación de éste si no tienes claro qué hace.

(Por cierto, como detalle: deberías intentar hacer la separación visual
sin añadir un elemento HTML falso. Jugando con CSS lo puedes conseguir,
pero ya es otro asunto.)

--
davux