100 visualizações
Récupérer membres d'un groupe |
|
---|---|
Bonjour ! :) J'ai fouillé dans le fofo pour cette question, je pense que j'ai déjà aperçu un post identique mais je ne le trouve plus :/ J'aimerai récupérer les membres qui ont été assigné dans un groupe "streamer", pour afficher les membres à la suite du lecteur twitch pour mettre en avant les membres qui stream. Du coup je dois partir sur...: <?php ..? En sachant qu'il pourrait y avoir plusieurs membres je dois donc partir sur une boucle ? Mon site Merci d'avance :) French Family |
3 participantes
18 respostas |
|
---|---|
Bonjour Gnesis, J'ai fait des petits test de mon côté :). Le résultat : $group = $this->groups->check_group(array(4)); Petites explications pour mieux comprendre la démarche : On récupère les informations du groupe concerné, avec l'ID (ici j'ai pris le 4) : $group = $this->groups->check_group(array(4)); On récupère tous les membres du site ainsi que quelques infos de leur profil pour afficher l'avatar si besoin : $users = $this->db ->select('u.user_id', 'u.username', 'up.avatar', 'up.sex') On boucle sur tous les membres : foreach ($users as $user) Dans la boucle, on regarde si l'id du membre appartient au groupe testé : if (in_array($user['user_id'], $group['users'])) Du coup, si la condition est bonne, tu peux afficher le contenu que tu veux avec nos raccourcis : $link = $this->user->link($user['user_id'], $user['username']); Voila :) A bientôt ! eResnova |
|
Bonjour eResnova, Merci pour la réponse :) J'ai testé ça, en mettant l'id du groupe souhaité, mais aucun affichage de membres, j'ai essayer d'attribuer le groupe admin (1) pour tester et du coup le CSS ne fonctionne plus ... Normalement ce code là peut fonctionner pour plusieurs groupes différents, autant admin que streamer ? French Family |
|
Bonjour Gnesis, Où essayes tu d'ajouter ce code ? |
|
Dans un module dans views/index.tpl.php French Family |
|
D'accord. Mon bout de code est à placer dans ton contrôleur index Au niveau de la condition if ( ... ) tu peux stocker dans un array $treamers les utilisateurs à conserver. Ensuite tu peux appeler ta vue et transmettre dedans ton data.Si tu comprend pas, dit le moi, je connais pas ton niveau de code NeoFrag :) ! Ou sinon, poste moi un bout de ton widget ;) |
|
On va dire que je m'y retrouve plus ou moins en Php, je pense que je suis arrivé au while sur Codecademy donc je n'ai pas vraiment le niveau pour coder, bien que Neofrag me motive à apprendre vu toute les fonctions qu'on peut ajouter quand on s'y connait un minimum ^^ Donc mon code dans views/index.tpl.php : <div class="container-webtv"> Dans controllers/index.php : class m_webtv_c_index extends Controller_Module Merci beaucoup :D French Family |
|
haaa, mais c'est normal aussi que ça ne t'affiche rien. lol :D Il n'y a pas d'echo dans ta vue. Je t'avais juste pré-remplis 2 variables dans ta condition mais il faut les afficher :) echo $this->user->link($user['user_id'], $user['username']); par exemple, etc...Petite remarque : Dans ton contrôleur index.php, ce petit bout de code est faux, plutôt inutile : $this->load->view('index', array('webtv')) En gros, tu peux déclarer un array dans ta vue pour transmettre des variables que tu aurais définies dans ton contrôleur :). Mais la, tu ne transmet rien de cette façon. C'est plus : $this->load->view('index', array('webtv' => $variable)) Et de cette façon, côté vue .tpl.php, tu peux faire un <?php echo $data['webtv']; ?> ce qui affichera le contenu de ta variable $variable. Mais tu peux aussi ne pas en déclarer de cette façon : $this->load->view('index') |
|
Niquel ça fonctionne mieux avec le echo en effet xD Donc si je comprend bien, pour le $this->load->view('index', array('webtv' => $variable)) Dans mon controllers je dois par exemple donner une valeur à ma variable ex: $variable = Gnesis; et dans le .tpl.php le echo $data['webtv']; m'affichera la valeur ?Et le array sert à afficher la valeur de plusieurs variable ? (J'essai de comprend un peu le fonctionnement :p). Encore un grand merci pour ton aide :) French Family |
|
Sry doublon :) Je vois aussi que pour récupérer les données de l'utilisateur : $users = $this->db ->select('u.user_id', 'u.username', 'up.avatar', 'up.sex') Il y en a avec u. et d'autres avec up. u pour les informations de base stocké dans nf_users et up pour nf_users_profiles ? Car j'aimerai récupérer plusieurs informations comme la localisation, la citation, etc... Je peux donc continuer avec : $users = $this->db ->select('u.user_id', 'u.username', 'up.avatar', 'up.sex', 'up.last_name', 'up.quote', 'up.location', 'up.website') ?Et pour les afficher je peut donc ajouter une variable pour chaque éléments que je récupère ? $user_quote = $this->user($user['user_id'], $user['username'], $user['quote']); echo $user_quote; ? French Family |
|
Oui c'est ça. En gros tu déclare tes variables dans l'array et tu leur donne un nom de référence pour les appeler dans ta vue : array( webtv et autre sont les "nouveaux" noms de tes variables pour les appeler dans ta vue. Tu peux très bien mettre : 'mavariable' => $mavariable, En fait, le contrôleur à pour rôle de recevoir les données et de les traiter (avec des conditions, etc...). Tu récupère ainsi dedans tes variables, tes requêtes côté bdd, etc... Et ensuite tu les envoies dans ta vue. Les vues doivent uniquement traiter des opérations pour afficher les données, sinon on s'y perd et c'est le principe du MVC en php :). Donc dans les vues tu peux faire tes echos, les boucles foreach () etc... Mais si tu fais une requête bdd dedans, c'est "moche"... Même chose pour les requêtes vers la bdd, l'idéal est de les placer dans ton model, et depuis le contrôleur tu appel ta fonction définie dans le model comme ceci : $this->model()->nom_de_ta_fonction(); Petite précision : tu peux avoir plusieurs fichiers model si tu as besoin de séparer un peu ton code. Exemple avec le module actualités, on a fait un model news et un model categories pour distinguer les différentes requêtes.Le model news pourra s'appeler comme ça : $this->model()->nom_de_ta_fonction(); Mais le model categories s’appellera de cette façon : $this->model('categories')->nom_de_ta_fonction(); Si le model porte le même nom que ton module, tu n'as pas besoin de préciser son nom. ;) Voila :) Il reste plusieurs points à expliquer, on pourra les voir suivant tes besoins ;). |
|
Deuxième réponse : Oui tu as compris le principe. On appel ça un join car on lie 2 tables différentes avec un point commun ( user_id ). Du coup ça permet de faire une seule requête pour récupérer plusieurs informations.Donc comme tu l'as dit, cette requête est bonne : $users = $this->db ->select('u.user_id', 'u.username', 'up.avatar', 'up.sex', 'up.last_name', 'up.quote', 'up.location', 'up.website'); Pour les afficher c'est pas bon par contre :p Dans ta boucle foreach ($users as $user) : Tu peux récupérer chaque champ de cette façon : $user['nom_du_champ']; Le $this->user() est un raccourci pour récupérer directement l'information du membre connecté à l'instant T sur ton site.C'est avec cette petite fonction qu'on peut vérifier si un utilisateur est connecté ou non, adminsitrateur ou non : if ($this->user()) = membre connecté if ($this->user('admin')) = administrateur echo $this->user('username'); = affiche le pseudo de l'utilisateur connecté etc ... |
|
@eResnova serait t'il possible de faire la meme chose pour le module "membre en ligne" ? |
|
Merci pour tout ces détails, j'y vois un peu plus clair ! :) Il reste plusieurs points à expliquer, on pourra les voir suivant tes besoins ;).Suivant mes besoins comme ? :P French Family |
|
Re ! :D J'ai une autre petite question, dans les informations du membre, j'ai ajouté son lien mais j'aimerai pousser la chose légèrement plus loin. À la base, j'ai affiché un fa-link comme icone pour précéder le lien, mais j'aimerai afficher l'icone en fonction du lien que la personne à indiqué, youtube un fa-youtube, twitch un fa-twitch, facebook un fa-facebook, etc... Le bout de mon code: $site = "<a href='".$user['website']."'>Accéder à sa page</a>"; echo "<div class='badge-site'><i class='fa fa-link'></i>"; if ($user['website'] == null){ echo "Pas de lien"; }elseif ($user['website'] == 'https://www.youtube.com/') { echo "<i class='fa fa-youtube-play'></i>".$site." "; }else{ echo $site; } echo "</div>"; Quand je copie le lien du membre en entier, ça fonctionne, mais du coup, est-il possible de demander à la condition de chercher dans le lien si youtube est indiqué ou non pour validé la condition ? Pour être clair : if ($user['website'] == 'Recherche le mot youtube') { echo " "; } Thanks :D French Family |
|
Tu peux faire comme ça : if (preg_match("/youtube/", $user['website'])) Après tu as juste à afficher la variable $link dans ta vue :) |