Ordre des commentaires inverser et paginer (+livre d'or en accessoire)

Bonjour,

suite a une demande precedente , je remet ici une solution qui permet d'inverser l'ordre d'affichage des commentaires.

Description:

fonction d'affichage des données des commentaires , copier / renommer et modifier pour recuperer celle-ci coté serveur sans les affichées.

recuperation des données concernant les commentaires dans un tableau a 2 dimensions a partir du template.

Tri inverse du tableau multidimensionnel avec la fonction : krsort(array);

extraction du nombre d'enregistrements

pagination , test sur le nombre de pages et affichages des liens necessaires.

pagination au travers de l'url avec renvoi a la premier page si n° de page inexistant .
la fonction de tri inverse peut-etre annulé dans le script ou simplement par l'url.

Modifications a apportés:
1) Le fichier functions.php
ajouté le code suivant juste aprés une ligne comportant le code suivant: break;
/* ****************** retourne les chaines au lieu de les afficher ************************** */
		case 'lien_page':
			$lien = $pluxml->result->f('file_num')+0;
				return $lien.'-'.$pluxml->result->f('art_name');
			
		break;	
		case 'com_author_array':
			if($option = 'link' && $pluxml->coms->f('site') != 'http://'){
				return '<strong><a href="'.$pluxml->coms->f('site').'">'.$pluxml->coms->f('author').'</a></strong>';
			}else{
				return '<strong>'.$pluxml->coms->f('author').'</strong>';
			}
		break;
		
		case 'com_date_array':
			return date::dateIso2Hum($pluxml->coms->f('date'));
		break;

		case 'com_content_array':
			return $pluxml->coms->f('content');
		break;	
/* *************** fin retour de chaines **************************** */
2) Dans le fichier template.php , recherchez la portion:
<?php if($pluxml->coms):?>
<div id="comments">
<h2>Commentaires</h2>
<?php while($pluxml->coms->loop()):?>
<div class="comment <?php echo 'ligne'.$pluxml->coms->i%2 ?>">
<p>Par <?php __('com_author', 'link'); ?> le <?php __('com_date'); ?></p>
<blockquote><p><?php __('com_content'); ?></p></blockquote>
</div>
<?php endwhile; ?>
</div>
<?php endif; ?>
et remplacer cette portion avec celle-ci:
<?php if($pluxml->coms):
		$i=0;
		?>	
		<div id="comments">
			<h2>Commentaires</h2>
		<?php while($pluxml->coms->loop()):
		$i_com=$i;
		$ligne_com=$i_com%2;
		$auteur_com=__('com_author_array','link');
		$date_com=__('com_date_array');
		$contenu_com=__('com_content_array');
		$commentaire[$i] = array($auteur_com,$date_com , $contenu_com , $ligne_com );
		$i++;
		endwhile; 
    // fin remplissage tableau
	
	//recuperation des variables d'url
		// recuperation du numero de page a afficher
		if(!isset($_GET['pagenum'])) {$page_num=1;}
		else {$page_num=$_GET['pagenum'];}
		
		// choix du sens d'affichage  croissant ou decroissant
		if(!isset($_GET['tri'])) {$tri="kr";}
		else {$tri="k";}
	
	// mise en place variables pour pagination comptage des commentaires , et configuration
	
	$compteur=0; //raz
	$nb=count($commentaire);//nombre de commentaires
	$comm_par_page=10; // nombres de commentaires a affiché par pages
	$pages_com_ar=ceil($nb/$comm_par_page); // nombre de pages
	$pages_com=floor($nb/$comm_par_page); //  pour gestion des liens
	// verification et nettoyage des numeros de pages qui n'existent pas avec renvoi a la premiere page .
	if (($page_num==0) || ($page_num > $pages_com_ar)) {$page_num=1;}
	$page_numero=$page_num; //numero de page
	$prem=($page_numero*$comm_par_page)-$comm_par_page;//numero du premier message a afficher
	$der=$prem+$comm_par_page;//numero du dernier message a afficher
	$before=$page_numero-1 ;
	$after=$page_numero+1 ;	
	
	//  fin variables de pagination	

	
// lien de navigations de page en page 
//test si premiere page 
echo '<p id="nav_comment">page';
if ($pages_com_ar>1){echo's';}
echo ' : · ';
	// test si plusieurs pages si besoin d'afficher une pagination (liens precedents/premier)
	if ($pages_com>=0){
		if (($page_num!=0) && ($page_num!=1)) // test que ce n'est pas la premiere page
		{	echo '<a href="?'.__('lien_page').'" title="premiere page de commentaires">1</a> · ';
		}
		$pagesbefore=2;  // boucle affichant les liens des pages precedentes existantes 
			     while($pagesbefore < $page_num)
			     {
			           echo '<a href="?'.__('lien_page').'&pagenum='.$pagesbefore.'" title="page N°'.$pagesbefore.'">'.$pagesbefore.'</a> · ';

			           $pagesbefore++;
			     }
	}
echo ' <b style="color:#DCA61C">'.$page_num.' </b> · ' ; // affiche numero de page en cours

	// test si plusieurs pages si besoin d'afficher une pagination (liens suivants/derniers)
	if ($pages_com>0){

		if ($page_num!=$pages_com_ar) // test que ce n'est pas la derniere page
		{	echo '<a href="?'.__('lien_page').'&pagenum='.$after.'" title="page N°'.$after.' " >'.$after.'</a> · ';
		}
		
		// boucle affichant les liens des pages suivantes existantes 
		$pagesafter=$after; 
		$pagesafter++;	
		     while(($pagesafter < $pages_com_ar) && ($pagesafter > $after))
		     {
		           echo '<a href="?'.__('lien_page').'&pagenum='.$pagesafter.'" title="page N°'.$pagesafter.'">'.$pagesafter.'</a> · ';

		           $pagesafter++;
		     }
	 // on affiche le lien vers la derniere page si celle ci n'est pasla page courante
		if (($page_numero!=$pages_com_ar) && ($after!=$pages_com_ar)) //test si pages precedentes existent
		{	echo '<a href="?'.__('lien_page').'&pagenum='.$pages_com_ar.'"  title="Derniere page" >'.$pages_com_ar.'</a>  · ';
		}
	}
	echo '</p>';

	
	eval($tri.'sort($commentaire);');
		$comnum=$nb;
foreach($commentaire as $valeur)
    {
	if ($compteur!=$nb) {

		if(($compteur>=$prem) && ($compteur<$der) ) {
		    echo '<div class="comment  ligne'.$valeur[3] .'"><p><span style="float:right;">N°'.$comnum .'/'.$nb.' .</span>Par '.$valeur[0].' le ';
			echo $valeur[1].'</p><blockquote><p>';
			echo $valeur[2].'</p></blockquote></div>';
			}
		$comnum--;	
		$compteur++;
	}
    }  ?>
	</div>
		<?php endif; ?>
C'est un peu plus long (la pagination aurait surement du etre traité en modulo mais je laisse brut comme ça , je suis plus doué pour faire de la soupe).

Ce system fonctionne sur un hebergement php4(free en l'occurance) et 5 (xampp) . (je repond la a une de mes questions : http://forum.pluxml.org/viewtopic.php?id=664 )

Ce system , permet , a partir de la pagination de créer un livre d'or en dédiant un article à cet effet.

Une demo : http://yidille.free.fr/plux/bs_plux/index.php?7-livre-d-or

P.S. En prime , dans la demo , un petit script pour remettre vos visteurs dans les rails ... si ils se perdent au cours de leur navigation.

GC
Connectez-vous ou Inscrivez-vous pour répondre.