précédent suivant sans php ?

Bonjour,

Est-ce que c'est possible de faire des boutons "<<" ">>"
pour naviguer d'un article au précédent ou suivant dans la même rubrique,
et ce sans utiliser de php ?

JL

La documentation de SPIP est ton amie (pagination)

Choisir le modèle de pagination

Depuis SPIP 1.9.1, la balise #PAGINATION accepte un paramètre {modele},
qui permet de modifier le résultat de la balise.

Ainsi #PAGINATION{precedent_suivant} affichera des liens vers les pages
précédentes et suivantes. Les liens seront les suivants

    page précédente | page suivante

#PAGINATION{page} affichera quelque chose de la forme suivante

    1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | ...

#PAGINATION{page_precedent_suivant} affichera quelquechose comme

    < 1 | 2 | 3 | 4 | 5 | 6 | >

Il est possible de définir d’autres modèles de pagination, qui devront s’appeler
pagination_modele. Pour plus d’info, lire la documentation sur les modèles.

JLuc a écrit :

Bonjour,

Pareil,

Est-ce que c'est possible de faire des boutons "<<" ">>"
pour naviguer d'un article au précédent ou suivant dans la même rubrique,
et ce sans utiliser de php ?

Lignes 20 à 25.

-- Franck

Franck Ducas wrote:

Est-ce que c'est possible de faire des boutons "<<" ">>"
pour naviguer d'un article au précédent ou suivant dans la même rubrique,
et ce sans utiliser de php ?

Connexion · GitLab
Lignes 20 à 25.

très bien !
{age_relatif>0}{!par date}{0,1} pour le précédent.
et {age_relatif<0}{par date}{0,1} pour le suivant...
je pense que ça va faire l'affaire !

JLuc

JLuc wrote:

Franck Ducas wrote:

Connexion · GitLab
Lignes 20 à 25.

Bizarrement ça ne donne pas les bons résultats.
Les 2 insertions suivantes sont à la suites et ne donnent pas les mêmes résultats...
Il y a une quinzaine de pages dans la rubrique.
ça coïncide pour la moitié, mais les liens suivants s'arrêtent à la moitié !!
Je me demande si ça vient pas des doublons mais je vois pas...
(pas de pb avec la solution "avec php")

C'est à l'intérieur d'une <BOUCLE_article_principal(ARTICLES){id_article}{doublons}>

1) comme fait dans le lien plus haut
<BOUCLE_precedent(ARTICLES){id_rubrique}{age_relatif>0}{!par date}{0,1}{doublons}>
<a href='#URL_ARTICLE' [ title='(#TITRE|couper{80}|nobullshit)']>
pr&eacute;c&eacute;dent</a>
</BOUCLE_precedent>
<BOUCLE_suivant(ARTICLES){id_rubrique}{age_relatif<0}{par date}{0,1}{doublons}>
<a href='#URL_ARTICLE' [ title='(#TITRE|couper{80}|nobullshit)']>
suivant</a>
</BOUCLE_suivant>
<br>

2) avec du php
<?php $lien_prec = $lien_suiv = ''; ?>
<BOUCLE_avant(ARTICLES){id_rubrique}{par date}>
<?php
if (#_article_principal:ID_ARTICLE==#ID_ARTICLE)
  echo $lien_prec;
$lien_prec = "<a href='#URL_ARTICLE'[ title='(#TITRE|couper{80}|nobullshit)']>pr&eacute;c&eacute;dent</a>"
?>
</BOUCLE_avant>
<BOUCLE_apres(ARTICLES){id_rubrique}{par date}{inverse}>
<?php
if (#_article_principal:ID_ARTICLE==#ID_ARTICLE)
  echo $lien_suiv;
$lien_suiv = "<a href=\"#URL_ARTICLE\" [ title='(#TITRE|couper{80}|nobullshit)']>suivant</a>";
  ?>
</BOUCLE_apres>

Vous voyez comment se fait-ce ?
JLuc

Il y a la boucle que tu cherches ici : La gestion des dates - SPIP.

La différence vient d'une possibilité d'avoir 2 articles à la même date. D'où les critères {age_relatif<=0}{!par date}{1,1}.

Evidemment peut-être que les doublons introduisent une exclusion. Ce qui risque de bloquer la chaîne des liens précédents ou suivants.

BMR

JLuc a écrit :

JLuc wrote:

Franck Ducas wrote:

Connexion · GitLab
Lignes 20 à 25.

Bizarrement ça ne donne pas les bons résultats.
Les 2 insertions suivantes sont à la suites et ne donnent pas les mêmes résultats...
Il y a une quinzaine de pages dans la rubrique.
ça coïncide pour la moitié, mais les liens suivants s'arrêtent à la moitié !!
Je me demande si ça vient pas des doublons mais je vois pas...
(pas de pb avec la solution "avec php")

C'est à l'intérieur d'une <BOUCLE_article_principal(ARTICLES){id_article}{doublons}>

1) comme fait dans le lien plus haut
<BOUCLE_precedent(ARTICLES){id_rubrique}{age_relatif>0}{!par date}{0,1}{doublons}>
<a href='#URL_ARTICLE' [ title='(#TITRE|couper{80}|nobullshit)']>
pr&eacute;c&eacute;dent</a>
</BOUCLE_precedent>
<BOUCLE_suivant(ARTICLES){id_rubrique}{age_relatif<0}{par date}{0,1}{doublons}>
<a href='#URL_ARTICLE' [ title='(#TITRE|couper{80}|nobullshit)']>
suivant</a>
</BOUCLE_suivant>
<br>

2) avec du php
<?php $lien_prec = $lien_suiv = ''; ?>
<BOUCLE_avant(ARTICLES){id_rubrique}{par date}>
<?php
if (#_article_principal:ID_ARTICLE==#ID_ARTICLE)
  echo $lien_prec;
$lien_prec = "<a href='#URL_ARTICLE'[ title='(#TITRE|couper{80}|nobullshit)']>pr&eacute;c&eacute;dent</a>"
?>
</BOUCLE_avant>
<BOUCLE_apres(ARTICLES){id_rubrique}{par date}{inverse}>
<?php
if (#_article_principal:ID_ARTICLE==#ID_ARTICLE)
  echo $lien_suiv;
$lien_suiv = "<a href=\"#URL_ARTICLE\" [ title='(#TITRE|couper{80}|nobullshit)']>suivant</a>";
  ?>
</BOUCLE_apres>

Vous voyez comment se fait-ce ?
JLuc

BMR wrote:

Il y a la boucle que tu cherches ici : La gestion des dates - SPIP.

Ici j'ai jamais 2 articles à la même date
(de toute façon la date n'inclure t elle pas les secondes ?)

J'ai réussi à partir de l'exemple de la doc,
mais en corrigeant la première boucle
car le résultat doit être :

<BOUCLE_precedent(ARTICLES){id_rubrique}{age_relatif>0}{!par date}{0,1}>
<a href='#URL_ARTICLE' [ title='(#TITRE|couper{80}|nobullshit)']>
pr&eacute;c&eacute;dent</a>
</BOUCLE_precedent>
<BOUCLE_suivant(ARTICLES){id_rubrique}{age_relatif<0}{par date}{0,1}>
<a href='#URL_ARTICLE' [ title='(#TITRE|couper{80}|nobullshit)']>
suivant</a>
</BOUCLE_suivant>

(l'exemple de la doc exclut le premier résultat mais puisque age_relatif > 0 strict,
il ne faut pas !!)
JLuc

Manu Guillemont wrote:

La documentation de SPIP est ton amie (pagination)

J'ai essayé mais ce n'est pas possible ici d'utiliser la pagination
car "la balise #PAGINATION, placée dans une des parties optionnelles
(« avant » ou « après ») de la boucle, affiche la « pagination »."

Or c'est au coeur de #navigation,
en plein milieu de la page
et donc de la boucle
et non dans une partie optionnelle...

JLuc

Selon JLuc <jluc@no-log.org>:

BMR wrote:
> Il y a la boucle que tu cherches ici :
> La gestion des dates - SPIP.

Tu peux essayer ça aussi, qui semble avoir été réparé dans la dernière version
SVN :

-- Franck

franck.ducas@free.fr wrote:

Selon JLuc <jluc@no-log.org>:

BMR wrote:

Il y a la boucle que tu cherches ici :
La gestion des dates - SPIP.

Tu peux essayer ça aussi, qui semble avoir été réparé

D'après la doc, la pagination n'est accessible
que dans les parties conditionnelles d'une boucle, non ?
Ou dans un inclure c'est possible au coeur de la boucle ?

JLuc

JLuc a écrit :

franck.ducas@free.fr wrote:

Selon JLuc <jluc@no-log.org>:

BMR wrote:

Il y a la boucle que tu cherches ici :
La gestion des dates - SPIP.

Tu peux essayer ça aussi, qui semble avoir été réparé

D'après la doc, la pagination n'est accessible
que dans les parties conditionnelles d'une boucle, non ?
Ou dans un inclure c'est possible au coeur de la boucle ?

JLuc

je ne sais pas si ça répond à ton problème,
j'ai fait un modèle (pas encore en ligne) qui propose
< 5/10 20 > si ça peut t'aider le voici

j'ai crée 2 modeles de pagination copié sur les originaux
modeles/pagination_walma.html
en voici le code
/////////////////////////////
#ENV*{bloc_ancre}
#SET{bornes,#ENV{page_courante}|calcul_bornes_pagination{#ENV{nombre_pages},10}}
#SET{premiere, #GET{bornes}|reset}
#SET{derniere, #GET{bornes}|end}
#SET{separateur,''}
#SET{i,#ENV{page_courante}|moins{1}}
[(#GET{i}|>{0}|?{' ',' '})[
  (#SET{item, #GET{i}|moins{1}|mult{#ENV{pas}} })
  ][(#INCLURE{fond=modeles/paginationitemw}{num=#GET{i}}{texte=<span id="back">&lt;</span>}{url=#ENV{url}|parametre_url{grande,''}|parametre_url{#ENV{debut},#ENV{page_courante}|=={#GET{premiere}}|?{#GET{derniere}|moins{1}|mult{#ENV{pas}},#GET{item}}}}{page_courante=#ENV{page_courante}}{derniere=#ENV{derniere}})]
  #SET{i,#GET{i}|plus{2}}
  [(#GET{i}|<{#ENV{nombre_pages}}|?{' ',''})]
]
[(#SET{i,#ENV{page_courante}|plus{1}})]
[(#GET{i}|<={#ENV{nombre_pages}}|?{' ',' '})
[(#SET{item, #GET{i}|moins{1}|mult{#ENV{pas}} })]
[(#INCLURE{fond=modeles/paginationitemw}{num=#GET{i}}{texte=<span id="go">&gt;</span>}{url=#ENV{url}|parametre_url{grande,''}|parametre_url{#ENV{debut},#ENV{page_courante}|=={#GET{derniere}}|?{'',#GET{item}}}}{page_courante=#ENV{page_courante}}{derniere=#ENV{derniere}})]
]

      [<!--(#REM) numérotation au centre du compteur -->]
      <a id="compteurcentreref" href="[(#SELF|parametre_url{id_document,''}|parametre_url{#ENV{debut},''}|parametre_url{grande,''}|parametre_url{pas,''}|parametre_url{recherche,#RECHERCHE})]#bloc0">
      [
     [(#ENV{page_courante}|=={1}|?{#ENV{page_courante},[(#EVAL{[(#GET{item})]-[(#ENV{pas})]+1})]})]-[(#GET{item}|>={[(#TOTAL)]}|?{[(#TOTAL)],[(#GET{item})]})]
       ] / #TOTAL
      </a>
/////////////////////////////

et dans modeles/paginationitemw.html
j'ai
/////////////////////////////
[(#ENV{num}|=={#ENV{page_courante}}|?{'',' '})
    [<a href='#ENV{url}'>(#ENV*{texte})</a>]
]
/////////////////////////////
Puis je l'appelle dans une boucle d'un squelette
<B_maboucle>
[(#PAGINATION{walma})]
<BOUCLE_maboucle(ARTICLES){pagination #ENV{pagine,5}}>

A tester donc!
++
touti

Merci pour vos réponses.
J'explorais aussi pagination mais la réponse inspirée de la doc va très bien.
J'espère que ce sera utile à d'autres.
JLuc

toutati wrote:

j'ai fait un modèle (pas encore en ligne) qui propose
< 5/10 20 > si ça peut t'aider le voici