Affichage tableau avec timer ??

maxencer
Invité n'ayant pas de compte PHPfrance

14 avr. 2010, 15:49

Salut, voila j'ai développer un petit module pour joomla qui affiche des vignettes à partir de la base de donnée. On peut sélectionner la catégorie, le nombre à afficher et cela affiche dans un tableau.

Je voudrais rajouter une option, qui en faite, les vignettes, au lieu de s'afficher toute d'un coup, seul une s'affiche et change toute les 5 secondes par exemple.
Et je ne vois pas du tout comment faire.

Mon code actuel
class modAutoHelper
{
	function getAuto(&$params)
	{
global $mainframe;
		
		$categorie = $params->get('nom');
		$nombre  = $params->get('nombre');
		$hauteur  = $params->get('height');
		$largeur  = $params->get('width');
		$titre  = $params->get('affichetitre');
		$categ  = $params->get('affichecateg');

		$db			=& JFactory::getDBO();
		$query = "SELECT *"
		. "\n FROM #__vp_projects"
		. "\n WHERE  category_id = $categorie"
		. "\n ORDER BY id DESC"
		. "\n LIMIT $nombre"
		;
		$db->setQuery( $query );
		$rows = $db->loadObjectList();

$auto = "<table>\n";
		if ($categ == 1) 
			{
				if ($rows2) 
					{
						foreach ($rows2 as $row2) 
							{
								
								if ($titre == 1) 
									{
										$auto .= "  <tr><td>". $row2->title . "</td></tr>\n";
									}
								$auto .= "  <tr><td><a href='?option=com_vipportfolio&view=projects'><img title='". $row2->title . "' width=$largeur height=$hauteur src='images/vipportfolio/". $row2->image . "'></a></td></tr>\n";
							}
						
					}
			}

$auto .=  "</table>\n";	
		
		return $auto;
	}
}

Et les données sont afficher grace à :
<?php 
echo $auto;

 ?>

Mammouth du PHP | 672 Messages

14 avr. 2010, 17:25

Bonjour.

PHP travaille du côté Serveur.
Pour le serveur, tant que le client n'a pas fait de demande il ne fait rien (c'est le principe du client/serveur).

Conclusion : tu ne peux pas modifier un affichage toutes les 5 sec. sur une page (affichée côté client) avec PHP.
Ou alors il faudrait passer par un header( "refresh:5;url=$mapage); mais ça rafraîchit toute la page :?

Solution : utiliser le JavaScript pour gérer ça.
Après, tu as le choix :
- Tu envoies plusieurs images à la fois et JS gère laquelle est affichée en fonction d'un timer (lourd)
- Tu utilises AJAX : un script JS va se déclencher toutes les 5 secondes pour appeler un script PHP sur le serveur. Ce script renvoie une image, et JS l'affiche...

ViPHP
AB
ViPHP | 5818 Messages

14 avr. 2010, 19:00

- Tu envoies plusieurs images à la fois et JS gère laquelle est affichée en fonction d'un timer (lourd)
- Tu utilises AJAX : un script JS va se déclencher toutes les 5 secondes pour appeler un script PHP sur le serveur. Ce script renvoie une image, et JS l'affiche...
Pour la solution 1 la "lourdeur" dépend du poids total des vignettes. C'est pas nécessairement lourd : si les vignettes font de l'ordre de 5 Ko on peut bien en faire charger une quarantaine pour un total de 200 ko sans problème. D'ailleurs dans ce cas ce serait la solution 2 qui serait lourde, quarante requêtes juste pour ça ...
Je veux dire faut quand même faire en fonction du contexte et ajax n'est pas systématiquement à recommander :)

Petit nouveau ! | 1 Messages

14 avr. 2010, 20:46

Ba c'est pour au grand maximum 10 vignettes qui doivent faire 5ko.

Le problême c'est que le titre et l'adresse des vignettes sont stockés dans un tableau que j'affichais dans dans un tableau.

Je ne vois pas trop comment faire pour afficher une a une, il n'y a pas un tuto qui expliquerai comment faire avec du php, mysql et donc javascript ? car la, je rame un peu ^^ :D

ViPHP
AB
ViPHP | 5818 Messages

14 avr. 2010, 21:37

Ben faudrait transmettre ton tableau php vers javascript avec json par exemple.
Ensuite tu indiques la source de l'image et le titre avec javascript en utilisant le DOM et tu utilises setTimeout() pour un changement toutes les cinq secondes.

Si tu n'y connais rien en javascript il te faudra un peu d'apprentissage mais au total ça devrait pas dépasser une quinzaine de lignes de code.

Sinon tu peux regarder du côté de jquery qui doit savoir faire ça assez facilement.