Bonjour,
J'ai mis en place sur mon site (toujours en local pour le moment) un système de commentaires indentés, qui fonctionne plutôt bien grâce aux fonctions suivantes :
Ce genre de système est-il compatible avec un scroll infini ? (c'est-à-dire qui affiche les commentaires au fur et à mesure que scrolle dans la page) Ce qui me pose problème, c'est que l'on ne peut pas savoir d'avance où les commentaires doivent être placés.Par exemple, un commentaire récent, placé tout au début de la table dans la BDD, peut très bien devoir être affiché à la toute fin de la page seulement, s'il s'agit d'une réponse à un commentaire déjà ancien.
Je me demande quelle est la meilleure solution, et je n'ai pas réussi à en trouver des exemples sur le net : je pourrais par exemple stocker tous les commentaires (dans l'ordre d'affichage, cette fois) dans un tableau de session, puis les afficher 5 par 5 avec un système de "scroll infini". Ou les stocker plutôt dans une variable globale ? Dans un cas comme dans l'autre, on perd l'une des qualités majeures du scroll infini : le chargement des données uniquement lorsqu'il est nécessaire de les afficher, et non pas en totalité dès le départ.
Comment résoudre ces problèmes au mieux ? Je suis preneur de toutes les bonnes idées. Merci d'avance pour votre aide !
Modifié par Fix (30 Nov 2013 - 16:41)
J'ai mis en place sur mon site (toujours en local pour le moment) un système de commentaires indentés, qui fonctionne plutôt bien grâce aux fonctions suivantes :
class Threaded_comments
{
public $parents = array();
public $children = array();
function __construct($comments) {
foreach ($comments as $comment) {
if ($comment['parent_id'] === NULL) {
$this->parents[$comment['comment_id']][] = $comment;
} else {
$this->children[$comment['parent_id']][] = $comment;
}
}
}
private function format_comment($comment, $depth) {
// Ici on affiche les commentaires !
}
private function print_parent($comment, $depth = 0) {
foreach ($comment as $c) {
$this->format_comment($c, $depth);
if (isset($this->children[$c['comment_id']])) {
$this->print_parent($this->children[$c['comment_id']], $depth + 1);
}
}
}
public function print_comments() {
foreach ($this->parents as $c) {
$this->print_parent($c);
}
}
}
Ce genre de système est-il compatible avec un scroll infini ? (c'est-à-dire qui affiche les commentaires au fur et à mesure que scrolle dans la page) Ce qui me pose problème, c'est que l'on ne peut pas savoir d'avance où les commentaires doivent être placés.Par exemple, un commentaire récent, placé tout au début de la table dans la BDD, peut très bien devoir être affiché à la toute fin de la page seulement, s'il s'agit d'une réponse à un commentaire déjà ancien.
Je me demande quelle est la meilleure solution, et je n'ai pas réussi à en trouver des exemples sur le net : je pourrais par exemple stocker tous les commentaires (dans l'ordre d'affichage, cette fois) dans un tableau de session, puis les afficher 5 par 5 avec un système de "scroll infini". Ou les stocker plutôt dans une variable globale ? Dans un cas comme dans l'autre, on perd l'une des qualités majeures du scroll infini : le chargement des données uniquement lorsqu'il est nécessaire de les afficher, et non pas en totalité dès le départ.
Comment résoudre ces problèmes au mieux ? Je suis preneur de toutes les bonnes idées. Merci d'avance pour votre aide !
Modifié par Fix (30 Nov 2013 - 16:41)