Page 1 sur 1

pagination

Posté : 26 janv. 2011, 22:05
par olivxii
bonjour, j'essaie de faire une pagination afin de limiter le nombres d'articles postés par page.
mon soucis est que les articles postés ne son visible que si vous etes amis avec la personnes qui a posté.

ma fonction get pour l'affichage des articles :
function get_news() {
		 	$answer = true;
		 	$news = array();			
			$nb_articles = 25;			
			$begin = 0;
                        $nb_articles = ceil($news/$nb_articles);			
			$first_news_id = 0;
			$last_news_id = $this->last_news_id;
- dans cette partie ==> $nb_articles = ceil($news/$nb_articles) je ne suis pas sur de cette variable

donc la j'ai bien 25 article sur la page, mais j'aimerais avoir un lien en bas de celle ci pour voir les suivants.
le soucis de ma table c'est que tout les articles se trouvent dans le meme champs.

voici ma requete :
switch ($this->type) {
				case 'MAIN' : {
					// Main Wall
				
					if ($this->option != 'more') {
						if ($this->filter == 'none') {
							// Get the last news
							$sel_req = "SELECT id FROM `".$this->config['bdd_table']
								."news` WHERE (`id` > ".$this->last_news_id.") AND
								(
								  (
									(`type` = 'WALL') 
									AND 
									news_id IN (SELECT id from `".$this->config['bdd_table']."wall` 
										WHERE ( (`user_id` = '".$this->owner_id."') OR user_id IN 
										(SELECT friend_id FROM `".$this->config['bdd_table']."friends` 
										         WHERE `user_id`='".$this->owner_id."'))
												 AND ( (`sender_id` = '".$this->owner_id."') OR `sender_id` in 
												 (SELECT friend_id FROM `".$this->config['bdd_table']."friends`
 												  WHERE `user_id`='".$this->owner_id."'))
												)
									)
								
								   OR 
								( 
									(`type` = 'STATUTE') 
									AND (`user_id` in (SELECT friend_id FROM `".$this->config['bdd_table']
										."friends` WHERE `user_id`='".$this->owner_id."')
									OR (`user_id`='".$this->owner_id."') )
								)
							)
						ORDER BY date DESC limit ".$begin.",".$nb_articles.";";	 
				
						} 
pour la requete j'ai essayé :
switch ($this->type) {
				case 'MAIN' : {
					// Main Wall
				
					if ($this->option != 'more') {
						if ($this->filter == 'none') {
							// Get the last news
							$sel_req = "SELECT id FROM `".$this->config['bdd_table']
								."news` WHERE (`id` > ".$this->last_news_id.") AND
								(
								  (
									(`type` = 'WALL') 
									AND 
									news_id IN (SELECT id from `".$this->config['bdd_table']."wall` 
										WHERE ( (`user_id` = '".$this->owner_id."') OR user_id IN 
										(SELECT friend_id FROM `".$this->config['bdd_table']."friends` 
										         WHERE `user_id`='".$this->owner_id."'))
												 AND ( (`sender_id` = '".$this->owner_id."') OR `sender_id` in 
												 (SELECT friend_id FROM `".$this->config['bdd_table']."friends`
 												  WHERE `user_id`='".$this->owner_id."'))
												)
									)
								
								   OR 
								( 
									(`type` = 'STATUTE') 
									AND (`user_id` in (SELECT friend_id FROM `".$this->config['bdd_table']
										."friends` WHERE `user_id`='".$this->owner_id."')
									OR (`user_id`='".$this->owner_id."') )
								)
							)
                                                              order by date desc limit ".(($begin-0)*$nb_articles).",".$nb_articles.";";
ensuite la ligne :
for ($i=0;$i<=$nb_articles;$i++) {
echo "$i";
}
malheureusement sans resultat car ma page se vide de tout articles quand je place comme cela.

merci de votre aide

Re: pagination

Posté : 26 janv. 2011, 22:22
par moogli
salut,

sur le principe c'est la deuxième solution mais tu y met le dernier id utilisé (id > dernierID


@+

Re: pagination

Posté : 26 janv. 2011, 22:31
par olivxii
en faite ce qui me gene c'est ici :

$nb_articles = ceil($news/$nb_articles);

$news je ne suis pas sur car en faite cette page est celle des class php du mur et non l'affichage des news.

j'ai vu sur un tuto qu'il fallais le nombre total de messages postés et le divisé par le nombres de message par page afin d'obtenir les resultat de 25 par page.

mon soucis c'est que ma requete ne recupere que les message posté par les membre qui sont amis avec moi donc pas le total des messages postés, la est la difficulté.

comment s'avoir quelle est cette variable, moi j'ai mis $news mais je ne pense pas que cela soit cela.

sachant que le nombre de messages posté par mes amis est compris dans la variable $nb_articles

Re: pagination

Posté : 26 janv. 2011, 22:57
par moogli
heu wé faut utiliser le notre mw d'article présent dans la table, donc la faut que tu te débrouille avoir cette info (select count..).


pour le limte j'ai mis une anerie => select truc from table where id > dernierId limit nbarticle :)

@+

Re: pagination

Posté : 26 janv. 2011, 23:56
par olivxii
l'id est recuperée, ma requete est sous cette forme :
$sel_req = "SELECT id FROM `".$this->config['bdd_table']."news`
									WHERE ( (`id` > ".$this->last_news_id.") AND
									((`user_id` IN (SELECT friend_id FROM `".$this->config['bdd_table']."friends` 
									WHERE `user_id`='".$this->owner_id."'))
									OR (`user_id`='".$this->owner_id."')) AND (`type`='".$this->filter."'))
									ORDER BY date DESC LIMIT ".$begin.",".$nb_articles.";"; 
en fait c'est un peut plus complexe que je ne pensais .....

ce que je pensais c'etais si $nb_articles = 25 afficher les 25 suivant mais alors la je patauge complet ...

Re: pagination

Posté : 27 janv. 2011, 00:07
par moogli
heu je suis un peu perplexe, tu veux faire une pagination sur les news ?

quand je vois
$answer = true;
$news = array();
$nb_articles = 25;
$begin = 0;
$nb_articles = ceil($news/$nb_articles);
$first_news_id = 0;
$last_news_id = $this->last_news_id;

tu fais une division d'un tableau par un nombre c'est pas bon ça ;)

ce code c'est un truc que tu a fait ou bien un reprise d'un code ?

Tu a le principe de la pagination après, c'est pas clair ton truc, tu parle de news, d'article et c'est le drame :)


@+

Re: pagination

Posté : 27 janv. 2011, 00:19
par olivxii
en faite il s'agit du script de devolia afin de créer un réseau social.

il fonctionne a merveille mais je voudrais juste y rajouter des fonctions

en faite tu a un mur ou les articles de tes amis ou autre se dépose comme sur facebook et un mur de profil ou il n'y a que les tiens.

la la limite est de 25 mais je voudrais que l'on puisse en afficher plus si on le désire avec un lien en bas de la page.

le soucis c'est qu'il y a 12 pages et 15 templates sans compté les css et js php différentes qui on chacune des fonctions différentes.

j'ai vu cette ligne qui normalement devrais "Obtenez des nouvelles plus anciennes avec filtre":
else {
							// Get older news with filter
							$sel_req = "SELECT id FROM `".$this->config['bdd_table']."news`
									WHERE ( (`id` > ".$this->last_news_id.") AND
									((`user_id` IN (SELECT friend_id FROM `".$this->config['bdd_table']."friends` 
									WHERE `user_id`='".$this->owner_id."'))
									OR (`user_id`='".$this->owner_id."')) AND (`type`='".$this->filter."'))
									ORDER BY date DESC LIMIT ".$begin.",".$nb_articles.";"; 
mais comment les afficher car je n'est pas d'autres requetes que celle-ci ...

Re: pagination

Posté : 27 janv. 2011, 00:39
par moogli
dans ce cas le plus simple pour toi est de demander de l'aider aux dev de l'appli :)


Dans ce que je vois il faut jouer avec $begin et $nb_article !

$begin est le dernier $id utilisé, en fait un offset
LIMIT accepte un ou deux arguments numériques. Ces arguments doivent être des entiers constants.

Avec un argument, la valeur spécifie le nombre de lignes à retourner depuis le début du jeu de résultat. Si deux arguments sont donnés, le premier indique le décalage du premier enregistrement à retourner, le second donne le nombre maximum d'enregistrement à retourner. Le décalage du premier enregistrement est 0 (pas 1) :
regarde le tuto sur la pagination c'est exactement la même chose.

tu doit gérer le $begin.

@+

Re: pagination

Posté : 27 janv. 2011, 01:17
par olivxii
oui ca je le sait j'arrete pas de visualiser des tuto mais a chaque fois je vois ceci afin de compter le nombre de messages :
$retour_total=mysql_query('SELECT COUNT(*) AS bdd FROM champs'); 
$donnees_total=mysql_fetch_assoc($retour_total); 
$total=$donnees_total['total']; 

Re: pagination

Posté : 27 janv. 2011, 02:07
par devlop78
oui ca je le sait j'arrete pas de visualiser des tuto mais a chaque fois je vois ceci afin de compter le nombre de messages :
$retour_total=mysql_query('SELECT COUNT(*) AS bdd FROM champs'); 
$donnees_total=mysql_fetch_assoc($retour_total); 
$total=$donnees_total['total']; 
Là tu vas obtenir null.
$total=$donnees_total['bdd'];
sera mieux

Re: pagination

Posté : 27 janv. 2011, 02:10
par olivxii
ce n'etait qu'un exemple non adapté a ma requête ..

pour etre plus claire voici le code :
/**
		 * Collect all the last news of the wall
		 */
		 
		 function get_news() {
		 	$answer = true;
		 	$news = array();			
			$nb_articles = 50;			
			$begin = 0;			
			$first_news_id = 0;
			$last_news_id = $this->last_news_id;
			
			switch ($this->type) {
				case 'MAIN' : {
					// Main Wall
				
					if ($this->option != 'more') {
						if ($this->filter == 'none') {
							// Get the last news
							$sel_req = "SELECT id FROM `".$this->config['bdd_table']
								."news` WHERE (`id` > ".$this->last_news_id.") AND
								(
								  (
									(`type` = 'WALL') 
									AND 
									news_id IN (SELECT id from `".$this->config['bdd_table']."wall` 
										WHERE ( (`user_id` = '".$this->owner_id."') OR user_id IN 
										(SELECT friend_id FROM `".$this->config['bdd_table']."friends` 
										         WHERE `user_id`='".$this->owner_id."'))
												 AND ( (`sender_id` = '".$this->owner_id."') OR `sender_id` in 
												 (SELECT friend_id FROM `".$this->config['bdd_table']."friends`
 												  WHERE `user_id`='".$this->owner_id."'))
												)
									)
								
								   OR 
								( 
									(`type` = 'STATUTE') 
									AND (`user_id` in (SELECT friend_id FROM `".$this->config['bdd_table']
										."friends` WHERE `user_id`='".$this->owner_id."')
									OR (`user_id`='".$this->owner_id."') )
								)
							)
						ORDER BY date DESC limit ".$begin.",".$nb_articles.";";	 
				
						} 
						
						else {
							// Get the last news with filter
							$sel_req = "SELECT id from `".$this->config['bdd_table']."news` 
								WHERE ( (`id` > ".$this->last_news_id.") AND 
									((user_id IN (SELECT friend_id FROM `"
									.$this->config['bdd_table']."friends` WHERE 
									`user_id`='".$this->owner_id."'))
									OR (`user_id`='".$this->owner_id."')) AND (`type`='".$this->filter."'))
									ORDER BY date DESC limit ".$begin.",".$nb_articles.";";									
																						
						}
						
						}
					
					
					else {
						// Get older news
						if ($filter == 'none') {
							$sel_req = "SELECT id from `".$this->config['bdd_table']."news` 
								WHERE (`id` < ".$this->last_news_id.") 
								AND								
								(
								  (
									(`type` = 'WALL') 
									AND 
									news_id IN (select id from `".$this->config['bdd_table']."wall` 
										WHERE ( (`user_id` = '".$this->owner_id."') OR user_id IN
										(SELECT friend_id FROM `".$this->config['bdd_table']."friends`
										 	WHERE `user_id`='".$this->owner_id."'))
											AND ( (`sender_id = '".$this->owner_id."') OR sender_id in 
											(SELECT friend_id FROM `".$this->config['bdd_table']."friends`
											 WHERE `user_id`='".$this->owner_id."'))
											)
									)
									OR 
									( 
										(`type` = 'STATUTE') 
										AND (user_id IN (SELECT friend_id 
										FROM `".$this->config['bdd_table']."friends` 
										WHERE `user_id`='".$this->owner_id."')
										OR (`user_id`='".$this->owner_id."') )
									)
								)
							ORDER BY date DESC limit ".$begin.",".$nb_articles.";";
						
						} else {
							// Get older news with filter
							$sel_req = "SELECT id FROM `".$this->config['bdd_table']."news`
									WHERE ( (`id` > ".$this->last_news_id.") AND
									((`user_id` IN (SELECT friend_id FROM `".$this->config['bdd_table']."friends` 
									WHERE `user_id`='".$this->owner_id."'))
									OR (`user_id`='".$this->owner_id."')) AND (`type`='".$this->filter."'))
									ORDER BY date DESC LIMIT ".$begin.",".$nb_articles.";"; 
							
						}
					}
					
					break;
				}
en faite je regle uniquement le nombre d'articles sur une page ... je souhaite pouvoir en afficher plus voir la totalité mais pas sur cette meme page, un petit lien en bas qui dit "voir la suite"

Re: pagination

Posté : 29 janv. 2011, 03:28
par olivxii