Administrateur Systèmes d'Information mais aussi Développeur Web.
Passionné par plein de choses :)

Arnaud Bosquet

Administrateur Systèmes d'Information / Dev Web / Tennis

Récupérer la date du premier jour de la semaine

Un petit bout de code PHP, qui fait écho à une question qu’on m’a posée : comment récupérer la date du premier jour de la semaine ?
Très utile pour les scripts de calendrier, par exemple.

MAJ : Si votre serveur utilise une version >= PHP 5.1.0 vous pouvez utiliser la fonction suivante :

<?php
echo date('l d F Y', mktime(0, 0, 0, date('m'), date('d')-date('N')+1, date('Y')));
// Affiche par exemple : monday 26 september 2011
?>

Sinon, vous pouvez utiliser le bout de code ci-dessous mais attention; la fonction date(‘w’) retourne 0 pour le dimanche. Il faudrait améliorer un peu la ligne ci-dessous :

<?php
echo date('l d F Y', mktime(0, 0, 0, date('m'), date('d')-date('w')+1, date('Y')));
// Affiche par exemple : monday 14 february 2011
?>

Comment faire un « infinite scroll » en jQuery

Il parait que c’est la tendance pour l’année 2011 : l’infinite Scroll. Beuh, qu’est-ce qui se cache derrière ce nom bizarre ?

L’infinite Scroll va charger du contenu pendant que la barre de défilement descend. Concrètement, ça permet aux utilisateurs de ne pas cliquer sur les liens « pages suivantes ». On allège aussi le chargement de ses pages en affichant uniquement le début.
On trouve ça sur les albums photos Facebook, les pages Tumblr, et autres…

Dans l’exemple ci-dessous, on va afficher les 5 derniers commentaires et avant d’arriver en fin de scroll, on charge les 5 suivants, etc…

1. Live Demo

2. Explications :

Index.php

<html>
<head>
<title>Infinite Scroll</title>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
 
$(document).ready(function(){ // Quand le document est complètement chargé
 
	var load = false; // aucun chargement de commentaire n'est en cours
 
	/* la fonction offset permet de récupérer la valeur X et Y d'un élément
	dans une page. Ici on récupère la position du dernier div qui 
	a pour classe : ".commentaire" */
	var offset = $('.commentaire:last').offset(); 
 
	$(window).scroll(function(){ // On surveille l'évènement scroll
 
		/* Si l'élément offset est en bas de scroll, si aucun chargement 
		n'est en cours, si le nombre de commentaire affiché est supérieur 
		à 5 et si tout les commentaires ne sont pas affichés, alors on 
		lance la fonction. */
		if((offset.top-$(window).height() <= $(window).scrollTop()) 
		&& load==false && ($('.commentaire').size()>=5) && 
		($('.commentaire').size()!=$('.nb_com').text())){
 
			// la valeur passe à vrai, on va charger
			load = true;
 
			//On récupère l'id du dernier commentaire affiché
			var last_id = $('.commentaire:last').attr('id');
 
			//On affiche un loader
			$('.loadmore').show();
 
			//On lance la fonction ajax
			$.ajax({
				url: './ajax_comment.php',
				type: 'get',
				data: 'last='+last_id,
 
				//Succès de la requête
				success: function(data) {
 
					//On masque le loader
					$('.loadmore').fadeOut(500);
					/* On affiche le résultat après
					le dernier commentaire */
					$('.commentaire:last').after(data);
					/* On actualise la valeur offset
					du dernier commentaire */
					offset = $('.commentaire:last').offset();
					//On remet la valeur à faux car c'est fini
					load = false;
				}
			});
		}
 
 
	});
 
});
 
</script>
<style>
body{
background:#ffffff;
}
/* Juste pour l'affichage, aucun intérêt ici ;) */
</style>
</head>
 
<body>
<div class="article">
	<div class="nb_com">
		25
	</div> commentaires
	<br /><br />
	Un article par exemple...
</div>
<div class="cont_com">
	Les commentaires sur l'article : 
 
	<?php
	$sql=mysql_query("SELECT * FROM commentaires
	ORDER BY id DESC LIMIT 5");
	while($data=mysql_fetch_assoc($sql))
	{
		// On affiche les commentaires avec l'ID comme attribut du div
	?>
		<div class="commentaire" id="<?php echo $data['id']?>">
			<?php echo $data['text_com']; ?>
		</div>
	<?php
	}
	?>
 
	<div class="loadmore">
		Chargement en cours...
	</div>
</div>
</body>
 
</html>

ajax_comment.php

<?php
$sql=mysql_query("SELECT * FROM commentaires WHERE 
id < ".mysql_real_escape_string($_GET['last'])." ORDER BY id DESC LIMIT 5");
while($data=mysql_fetch_assoc($sql))
{
?>
	<div class="commentaire" id="<?php echo $data['id']?>">
		<?php echo $data['text_com']; ?>
	</div>
<?php
}
?>

Note : jfefe est parti de ce code pour développer un plugin Spip. Vous pouvez le retrouver ici : http://www.spip-contrib.net/defilement-infini-sur-les-articles