Jump to content

Problème avec la pagination, href du lien incorrecte


Recommended Posts

Bonjour,

 

J'ai adapté le template pagination pour n'avoir qu'une flèche suivant et précédent mais le href des liens n'est pas le bon, il est modificé par du JS quelque part.

Mon lien est le suivant :

<a href="{$link->goPage($requestPage, $p_next)}" id="pagination_next"></a>

Ce que j'ai dans le href est correcte (j'ai bien ce que j'attends quand je l'affiche sur le template), sauf que le href est modifié en js et remplacé par un lien vers la page une.

 

Quand je change l'id de mon lien ça ne le fait plus, mais je n'ai plus les fonctionnalité de pagination ajax non plus, et j'aimerai les garder.

Est ce que vous savez où je peux désactiver le code JS qui modifie le href?

 

Romain.

Link to comment
Share on other sites

Rien justement, c'est ça le souci.

Même quand je remet le template pagination par défaut, sur une catégorie monsite.com/12-categ j'ai pas les bon lien pour les page, il me met à chauqe fois un lien vers la page 1 (que ce soit le a de la page 2, 3 ou suivant).

J'ai donc ce code dans mon template :


<ul class="pagination">
    {if $p != 1}
        {assign var='p_previous' value=$p-1}
        <li id="pagination_previous"><a {$no_follow_text} href="{$link->goPage($requestPage, $p_previous)}">« {l s='Previous'}</a></li>
        {else}
        <li id="pagination_previous" class="disabled"><span>« {l s='Previous'}</span></li>
        {/if}
        {if $start==3}
        <li><a {$no_follow_text}  href="{$link->goPage($requestPage, 1)}">1</a></li>
        <li><a {$no_follow_text}  href="{$link->goPage($requestPage, 2)}">2</a></li>
        {/if}
        {if $start==2}
        <li><a {$no_follow_text}  href="{$link->goPage($requestPage, 1)}">1</a></li>
        {/if}
        {if $start>3}
        <li><a {$no_follow_text}  href="{$link->goPage($requestPage, 1)}">1</a></li>
        <li class="truncate">...</li>
        {/if}
        {section name=pagination start=$start loop=$stop+1 step=1}
            {if $p == $smarty.section.pagination.index}
            <li class="current"><span>{$p|escape:'htmlall':'UTF-8'}</span></li>
                {else}
            <li><a {$no_follow_text} href="{$link->goPage($requestPage, $smarty.section.pagination.index)}">{$smarty.section.pagination.index|escape:'htmlall':'UTF-8'}</a></li>
            {/if}
        {/section}
        {if $pages_nb>$stop+2}
        <li class="truncate">...</li>
        <li><a href="{$link->goPage($requestPage, $pages_nb)}">{$pages_nb|intval}</a></li>
        {/if}
        {if $pages_nb==$stop+1}
        <li><a href="{$link->goPage($requestPage, $pages_nb)}">{$pages_nb|intval}</a></li>
        {/if}
        {if $pages_nb==$stop+2}
        <li><a href="{$link->goPage($requestPage, $pages_nb-1)}">{$pages_nb-1|intval}</a></li>
        <li><a href="{$link->goPage($requestPage, $pages_nb)}">{$pages_nb|intval}</a></li>
        {/if}
        {if $pages_nb > 1 AND $p != $pages_nb}
            {assign var='p_next' value=$p+1}
        <li id="pagination_next"><a {$no_follow_text} href="{$link->goPage($requestPage, $p_next)}">{l s='Next'} »</a></li>
        {else}
        <li id="pagination_next" class="disabled"><span>{l s='Next'} »</span></li>
        {/if}
</ul>

Et ce code dans ma page web


<ul class="pagination">
    <li id="pagination_previous" class="disabled"><span>« Précédent</span></li>
    <li class="current"><span>1</span></li>
    <li class="truncate">...</li>
    <li id="pagination_next"><a href="http://prisma.approach-outdoor.com/20-outdoor#/page-1">Suivant »</a></li>
</ul>

Une idée de pourquoi ça me fait ça?

 

Romain.

Link to comment
Share on other sites

Ok, merci quand même, je suis sur une piste là, je trouve une solution propre et je la posterai si d'autre on le même problème.

 

[EDIT] Voila la solution :

dans le ficher /modules/blocklayered/blocklayered.js, il faut remplacer paginationButton() ligne 231 par celle si :

function paginationButton() {
	$('#pagination a').not(':hidden').each(function () {
		if ($(this).attr('href').search(/&|\?p=/) == -1) {
			var page = 1;
		}
		else {
			var page = $(this).attr('href').replace(/^.*[&|\?]p=(\d+).*$/, '$1');
		}
		var location = window.location.href.replace(/#.*$/, '');
		$(this).attr('href', location+current_friendly_url.replace(/\/page-(\d+)/, '')+'/page-'+page);
	});
	$('#pagination li').not('.current, .disabled').each(function () {
		var nbPage = 0;
		if ($(this).attr('id') == 'pagination_next')
			nbPage = parseInt($('#pagination li.current').children().html())+ 1;
		else if ($(this).attr('id') == 'pagination_previous')
			nbPage = parseInt($('#pagination li.current').children().html())- 1;
	
		$(this).children().click(function () {
			if (nbPage == 0)
				p = parseInt($(this).html()) + parseInt(nbPage);
			else
				p = nbPage;
			p = '&p='+ p;
			reloadContent(p);
			nbPage = 0;
			return false;
		});
	});
}

Petite explication, dans la fonction de base, le teste ligne 233 ne se faisait que sur une pagination avec une url du type &p=2, dans mon cas j'avais ?p=2. J'ai donc modifié les regex ligne 233 et 237 et ça marche nikel, une jolie pagination en Ajax!

 

En espérant que ça sauve la vie d'autre personne!

 

Romain.

Edited by Lorem Ipsum (see edit history)
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...