Vous n'êtes pas identifié.
Annonce
Annonce 1 : Le Codex en français a besoin de vous pour avancer !
Annonce 2 : Avant de poster, n'oubliez pas de faire une petite Recherche et de lire les règles de ce forum.
#1 16-05-2008 13:54:39
- nightbox
- Connaisseur WP
- Date d'inscription: 13-12-2006
- Messages: 28
Liste membres à trier alphabetiquement
Bonjour,
Ma configuration WP actuelle
- Version de WordPress : 2.5
- Thème utilisé : insense
- Plugins en place : Angsuman's Authenticated WordPress Plugin, Cimy User Extra Fields
- Nom de l'hebergeur : local
- Adresse du site :
Problème(s) rencontré(s) :
Bonjour tout le monde,
Voila j'ai un site communautaire à réaliser avec une page listant les membres (environ 80). Il faut aussi pouvoir effectuer une sélection des membres en fonction de la première lettre de leur nom. Concrètement, on clique sur une lettre parmi celle de l'alphabet et seul comme cela se fait sur ce site.
Actuellement je suis arrivé à afficher la liste de tout les membres grâce à une page statique dans laquelle j'ai fait intervenir le plugin Cimy user Extra Fields et l:
Code:
- <?php
- /*
- Template Name: Archives
- */
- ?>
- <?php get_header(); ?>
- <!-- Side ContentWrapper START -->
- <div id="ContentWrapper">
- <!-- Side SCS START -->
- <div class="SCS">
- <?php
- $values = get_cimyFieldValue(false, 'PHOTO');
- foreach ($values as $value) {
- ?>
- <div style="padding-bottom: 50px;" class="Post">
- <div class="PostHead">
- <h1><a href="#"/><a rel="bookmark" href="http://127.0.0.1/wordpress/?author=<?php $curauth = get_userdatabylogin($value['user_login']); echo $curauth->ID; ?>
- "title="Lien vers le profil du membre"><?php echo $value['user_login']; ?></a> </h1>
- <p class="PostDate">
- <img src="<?php echo $value['VALUE']; ?>"width=30 height=30 />
- </p>
- <p class="PostInfo"><?php echo $curauth->first_name; ?> <?php echo $curauth->last_name; ?> <?php $value = get_cimyFieldValue($curauth->ID, 'ADRESSE');
- echo $value; ?></p>
- </div>
- <div class="PostContent">
- <p></p>
- </div>
- </div>
- <?php }?>
- </div>
- <!-- Side SC END -->
- </div>
- <!-- Side ContentWrapper END -->
- <?php get_sidebar(); ?>
- <?php get_footer(); ?>
Bon j'imagine que c'est pas trés bien codé mais l'important c'est l'idée....
Voila donc maintenant comment faire pour sélectionner les membres en fonction de la première lettre de leur pseudo ?
J'ai cherché a utiliser une variable qui extrait la première lettre du pseudo $n = $value['user_login']{0
. J'ai aussi cherché à utiliser ceci :
Code:
- <a href="#?lettre=a">A</a>-
- <a href="#?lettre=b">B</a>-
- <a href="#?lettre=c">C</a>-
- <a href="#?lettre=d">D</a>-
- <a href="#?lettre=e">E</a>-
- etc.
Mais je sais pas ce que ça donne étant donné qu'il y adéjà un argument dans l'url de la page : http://127.0.0.1/wordpress/?page_id=20.
Quelqu'un aurait une solution siouplé ?
Hors ligne
#2 16-05-2008 16:45:57
- jmini
- Expert WP
- Date d'inscription: 01-05-2008
- Messages: 222
Re: Liste membres à trier alphabetiquement
Je ne suis pas le mieux placer pour te dire ou placer ce code.
Je ne maitrise pas encore bien ce genre de chose.
Mais j'ai vu récemment passer un article ou ils utilisaient le contenu des liens de la catégorie blogoliste pour l'afficher dans une page spéciale (en utilisant les modèles de pages). Il créaient un modèle de page supplémentaire, basé sur celui des pages et après le contenu de cette pages ils avaient mis du code pour afficher la liste des liens contenus dans la catégorie blogoliste.
Je pense que cela peut être intéressant bien que dépendant du thème.
Sinon un autre truc a regarder est de passer par les shortcode.
Mais bon je voulais en venir au code. Je pense que tu ferais mieux d'intéroger la base de donner WP directement. Si tu recherche tous les membres, il suffit de tester quand la lettre à changé à chaque fois.
Ici j'affiche l'ID et le pseudo de chaque membre :
Code:
- $users = $wpdb->get_results("SELECT ID, display_name FROM $wpdb->users WHERE user_status = 0 ORDER BY display_name");
- $firstletter="";
- foreach ($users as $user) {
- if($firstletter!=strtoupper(substr($user->display_name,0,1))) {
- $firstletter=strtoupper(substr($user->display_name,0,1));
- echo "nouvelle lettre : ".$firstletter."<br>\n";
- }
- echo $user->ID." = ".$user->display_name."<br>\n";
- }
En modifiant la requête SQL vers la base de donnée :
- Tu peux chercher d'autres trucs comme l'url...
- Tu dois aussi pouvoir limiter ta recherche aux nom qui commence par une certaine lettre
Hors ligne
#3 16-05-2008 20:57:06
- nightbox
- Connaisseur WP
- Date d'inscription: 13-12-2006
- Messages: 28
Re: Liste membres à trier alphabetiquement
Merci pour ta réponse mais malheureusement il me manque encore la façon de faire pour sélectionner les membres qui commence par une même lettre. En effet je ne sais pas si il faut mettre une variable en argument de l'url ou une autre technique....
Hors ligne
#4 17-05-2008 00:41:27
- jmini
- Expert WP
- Date d'inscription: 01-05-2008
- Messages: 222
Re: Liste membres à trier alphabetiquement
OK je croyais qu'il fallait juste intercaler des balises dès qu'une nouvelle arrivait (effectivement ma boucle sert à cela)
Si tu la mets dans l'url : c'est de ce type :
www.url.com?param1=valeur¶m2=valeur
ensuite tu peux y accéder par :
$_GET['param1']
$_GET['param2']
ATTENTION A BIEN SECURISER ENSUITE CE QUI ARRIVE = tu contrôle que la valeur n'est pas n'importe quoi, sinon c'est la porte ouverte à une attaque par injection SQL (très simple à mettre en place et potentiellement très puissante)
Alors pour redévelopper une solution générale assez simple et qui exploite bien WP :
- Je ferais autant de page que nécessaire dans un modèle de page : liste_membre.
- Sur la page tu ajoutes un "Champs personnalisés" de type clé=lettre -- valeur=A
- dans ton thème tu fais un template pour les pages de type liste_membre (copier sur celui de page)
- dans le template tu ajoutes après l'affichage du contenu de la page le code qui va appeler l'appel à la base SQL
- Tu cherche si il y a un champ personnalisé de clé "lettre" associé à cette page.
http://codex.wordpress.org/fr:Utiliser_ … sonnalisés
- Si il y en a un (une lettre) tu complète ta requête SQL : (WHERE display_name>='a' AND display_name<'b')
http://sql.developpez.com/sqlaz/select/
- Sinon tu fais une recherche de ce qui t'arrange.
je retrouve plus l'article que j'avais en exemple pour cette technique de modèle de page et de blogoliste
[NDRL : ça y est je viens de comprendre ton histoire de lien... A href...
Le problème quand tu fais cela c'est que le # ne fait que appeler une ancre dans la page (<a name="mon_ancre">) alors qu'il faudrait que tu rappelle la page avec un autre paramètre.
Si tu es certain que tu sera sur la page 20 alors tu peux effectivement appeller la page :
http://127.0.0.1/wordpress/?page_id=20&lettre=A
Il y a des variable PHP qui te permette de savoir dans quelle page a été demandé par l'utilisateur...
Ma solution reste valable et si il y a une étape que tu ne comprends pas, tu peux demander.
Hors ligne
#5 18-05-2008 13:06:27
- nightbox
- Connaisseur WP
- Date d'inscription: 13-12-2006
- Messages: 28
Re: Liste membres à trier alphabetiquement
Merci pour ta réponse très complette .
Finalement voila le code :
Code:
- <center>
- <a href="<?php echo get_option('home'); ?>/?page_id=20&lettre=a">A</a>-
- <a href="<?php echo get_option('home'); ?>/?page_id=20&lettre=b">B</a>-
- <a href="<?php echo get_option('home'); ?>/?page_id=20&lettre=c">C</a>-
- <a href="<?php echo get_option('home'); ?>/?page_id=20&lettre=d">D</a>-
- <a href="<?php echo get_option('home'); ?>/?page_id=20&lettre=e">E</a>-
- <a href="<?php echo get_option('home'); ?>/?page_id=20&lettre=f">F</a>-
- <a href="<?php echo get_option('home'); ?>/?page_id=20&lettre=g">G</a>-
- <a href="<?php echo get_option('home'); ?>/?page_id=20&lettre=h">H</a>-
- <a href="<?php echo get_option('home'); ?>/?page_id=20&lettre=i">I</a>-
- <a href="<?php echo get_option('home'); ?>/?page_id=20&lettre=j">J</a>-
- <a href="<?php echo get_option('home'); ?>/?page_id=20&lettre=k">K</a>-
- <a href="<?php echo get_option('home'); ?>/?page_id=20&lettre=l">L</a>-
- <a href="<?php echo get_option('home'); ?>/?page_id=20&lettre=m">M</a>-
- <a href="<?php echo get_option('home'); ?>/?page_id=20&lettre=n">N</a>-
- <a href="<?php echo get_option('home'); ?>/?page_id=20&lettre=o">O</a>-
- <a href="<?php echo get_option('home'); ?>/?page_id=20&lettre=p">P</a>-
- <a href="<?php echo get_option('home'); ?>/?page_id=20&lettre=q">Q</a>-
- <a href="<?php echo get_option('home'); ?>/?page_id=20&lettre=r">R</a>-
- <a href="<?php echo get_option('home'); ?>/?page_id=20&lettre=s">S</a>-
- <a href="<?php echo get_option('home'); ?>/?page_id=20&lettre=t">T</a>-
- <a href="<?php echo get_option('home'); ?>/?page_id=20&lettre=u">U</a>-
- <a href="<?php echo get_option('home'); ?>/?page_id=20&lettre=v">V</a>-
- <a href="<?php echo get_option('home'); ?>/?page_id=20&lettre=w">W</a>-
- <a href="<?php echo get_option('home'); ?>/?page_id=20&lettre=x">X</a>-
- <a href="<?php echo get_option('home'); ?>/?page_id=20&lettre=y">Y</a>-
- <a href="<?php echo get_option('home'); ?>/?page_id=20&lettre=z">Z</a>
- </center>
- <?php
- $values = get_cimyFieldValue(false, 'PHOTO');
- foreach ($values as $value) {
- ?>
- <?php
- if(isset($_GET['lettre']))
- {
- $n = $value['user_login']{0};
- if ($n==$_GET['lettre'])
- {
- ?>
- <div style="padding-bottom: 50px;" class="Post">
- <div class="PostHead">
- <h1><a href="#"/><a rel="bookmark" href="http://127.0.0.1/wordpress/?author=<?php $curauth = get_userdatabylogin($value['user_login']); echo $curauth->ID; ?>
- "title="membre"><?php echo $value['user_login']; ?></a>
- </h1>
- <p class="PostDate">
- <img src="<?php echo $value['VALUE']; ?>"width=30 height=30 />
- </p>
- <p class="PostInfo"><?php echo $curauth->first_name; ?> <?php echo $curauth->last_name; ?> <?php $value = get_cimyFieldValue($curauth->ID, 'ADRESSE');
- echo $value; ?></p>
- </div>
- <div class="PostContent">
- <p></p>
- </div>
- </div>
- <?php }}
- else { ?>
- <div style="padding-bottom: 50px;" class="Post">
- <div class="PostHead">
- <h1><a href="#"/><a rel="bookmark" href="http://127.0.0.1/wordpress/?author=<?php $curauth = get_userdatabylogin($value['user_login']); echo $curauth->ID; ?>
- "title="membre"><?php echo $value['user_login']; ?></a>
- </h1>
- <p class="PostDate">
- <img src="<?php echo $value['VALUE']; ?>"width=30 height=30 />
- </p>
- <p class="PostInfo"><?php echo $curauth->first_name; ?> <?php echo $curauth->last_name; ?> <?php $value = get_cimyFieldValue($curauth->ID, 'ADRESSE');
- echo $value; ?></p>
- </div>
- <div class="PostContent">
- <p></p>
- </div>
- </div>
- <?php }}?>
Dernière modification par nightbox (18-05-2008 13:07:53)
Hors ligne






