parcourir plxRecord_arts

Hello,


je réalise un template en "onepage" avec un menu basé sur des ancres.
Je n'ai donc que home.php à gérer.
Chaque contenu est ancré avec un identifiant correspondant à l'url de l'article.


J'utilise donc:
<?php while($plxShow->plxMotor->plxRecord_arts->loop()): ?>
	<div class="artList" id="<?php echo $plxShow->plxMotor->plxRecord_arts->f('url'); ?>">
		<h2><?php $plxShow->artTitle(); ?></h2>
		<div class="art-chapo">
			<?php $plxShow->artChapo(); ?>
		</div>
	</div>
<?php endwhile; ?>


J'aimerai insérer le lien vers l'article suivant, du type:
<?php echo $plxShow->plxMotor->plxRecord_arts->f('url')[+1]; ?>
cette écriture est pour l'exemple hein !
or on ne peut pas y arriver avec cette boucle.


On trouve tout dans l'objet plxRecord_arts :D:
<?php print_r($plxShow->plxMotor->plxRecord_arts) ;?>
mais je ne sais pas comment faire ...

PluXml a-t-il prévu une interface d'itération ( j'ai fait des recherche sur le parcourt d'objet, mais je ne comprend rien à la POO :( )


J'utilise celle pour plxGlob_arts donnée dans le forum, mais je n'arrive pas à l'adapter pour plxRecord_arts.


La solution bourine serait de faire
<a href="#<?php echo $plxShow->plxMotor->plxRecord_arts->f('url'); ?>">Next</a>
Avec un style CSS margin-top: -200px; mais c'est du bidouillage :D

Une solution magique viendrait-elle à votre esprit ??


Cordialement,

_____
D.San

Réponses

  • Quand ça ne marche pas dans un sens, on prend une alternative ! :D
    Comme ce thème utilise jQuery, j'utilise ce petit script qui fonctionne:
    function theme() {
    	$("body").addClass("js");
    
    	var ancre, i, url,
    	ancre = new Array(),
    	ancre = $('.ancre'),
    	url = new Array();
    	if(ancre) {
    		var nb = ancre.length;
    		ancre.each(function(i,item){
    			if(i<nb-1){
    				url[i] = $(ancre[i+1]).attr('href'),
    				$(ancre[i]).attr('href', url[i]);
    			} else {
    				$(ancre[i]).hide();
    			}
    		});
    	}
    }
    
    Avec le lien:
    <a href="#<?php echo $plxShow->plxMotor->plxRecord_arts->f('url'); ?>" class="ancre next">Next</a>
    


    Je ne suis pas contre une solution sans JS ...
  • danielsandanielsan Member
    mars 2012 modifié
    Vu que j'ai présenté une solution alternative, la voici au complet.


    Objectif:
    nous listons les articles sur une même page et nous souhaitons avoir des liens qui nous amènent d'un bloc à l'autre ( du type article suivant / article précédent ).
    Pour cela, nous utiliserons le principe des ancres.


    Le principe:
    1/ encadrer notre contenu d'un bloc avec une class "artList".
    2/ attribuer à chacun de ces blocs un identifiant unique ( ici l'url de l'article )


    J'applique ce principe dans le template home.php ( mais fonctionne pour les autres ).
    <?php include(dirname(__FILE__).'/header.php'); ?>
    
    <?php while($plxShow->plxMotor->plxRecord_arts->loop()): ?>
    	<div class="artList" id="<?php echo $plxShow->plxMotor->plxRecord_arts->f('url'); ?>">
    		<h2><?php $plxShow->artTitle(); ?></h2>
    		<a href="#<?php echo $plxShow->plxMotor->plxRecord_arts->f('url'); ?>" class="ancre prev">Prev</a>
    		<div class="art-chapo">
    			<?php $plxShow->artChapo(); ?>
    		</div>
    		<a href="#<?php echo $plxShow->plxMotor->plxRecord_arts->f('url'); ?>" class="ancre next">Next</a>
    	</div>
    <?php endwhile; ?>
    
    <?php include(dirname(__FILE__).'/footer.php'); ?>
    

    le problème est que chaque lien pointe vers son propre bloc alors que nous voulons que le lien "précédent" pointe vers le bloc du dessus et le lien "suivant" vers celui du dessous.


    Pour faire les modifs, nous utilisons ce script utilisant jQuery.
    Le principe est de trouver le lien "ancre" dans le bloc et de lui faire pointer vers l'id du bloc associé
    function theme() {
    	$("body").addClass("js");
    
    	var artList, i, url,
    	artList = new Array(),
    	artList = $('.artList');
    	if(artList) {
    		var nb = artList.length;
    		artList.each(function(i,item){
    
    			if(i>0){
    				$(artList[i]).find('a.ancre.prev').attr('href', "#" + $(artList[i-1]).attr('id'));
    			} else {
    				$(artList[i]).find('a.ancre.prev').hide();
    			}
    
    			if(i<nb-1){
    				$(artList[i]).find('a.ancre.next').attr('href', "#" + $(artList[i+1]).attr('id'));
    			} else {
    				$(artList[i]).find('a.ancre.next').hide();
    			}
    
    		});
    	}
    }
    


    Voilà, il ne vous reste qu'à jouer avec des animations de scroll et le tour est joué :D


    En espérant que ça en aidera au moins un !


    L'exemple arrive pour bientôt... :P
Connectez-vous ou Inscrivez-vous pour répondre.