Soumis par virtua-artiste le
Bonjour,
je souhaite utiliser ce code pour établir une liste alphabetique des membres de mon site.
exemple: afficher les utilisateurs dont les noms commencent par 'a' mais je ne vois pas ou je pourrais mettre cet argument.
<?php
// Compile a list of fields to show.
$fields = array();
$result = db_query('SELECT name , title, type, weight FROM {profile_fields} WHERE visibility = %d ORDER BY category , weight', PROFILE_PUBLIC_LISTINGS);
while (
$record = db_fetch_object($result)) {
$fields[] = $record;
}
// v.fid = 1 is the include in member gallery checkbox
// If the field contains integer values use ORDER BY ABS(v.value) to force numeric sorting
//Change the 50 to display more or less users per page
$result = pager_query("SELECT u.uid , u.access FROM {users} u INNER JOIN {profile_values} v ON u.uid = v.uid WHERE v.fid = 1 ORDER BY u.name , v.value ASC ", 20, 0, NULL);
$output = '<div id="profile">';
while ($account = db_fetch_object($result)) {
$account = user_load(array('uid' => $account->uid));
$profile = _profile_update_user_fields($fields, $account);
$output .= theme('profile_listing', $account, $profile);
}
$output .= '</div>';
$output .= theme('pager', NULL, 20);
return
$output;
?>merci de votre aide
Version de Drupal :
Forum :
et une view avec l'argument
Permalien Soumis par selinav le 30 Septembre, 2009 - 15:28
et une view avec l'argument dans l'url?
je ne sais pas si c'est ta
Permalien Soumis par khtuluu le 30 Septembre, 2009 - 15:30
je ne sais pas si c'est ta demande mais voici le moyen de restreindre a "a" dans ton listing
$result = db_query('SELECT name , title, type, weight FROM {profile_fields} WHERE visibility = %d AND name LIKE "a%" ORDER BY category , weight', PROFILE_PUBLIC_LISTINGS);
AND name LIKE 'a%' <-- tu peux le faire pour toutes les lettres et même le faire en fonction d'un argument dans ton url (c'est ce que tu cherche je suppose)
genre avec une url de ce type : http://monserveur/monSite/?q=maListe/a
tu pourrais récupérer l'argument 2 de ton url avec arg(1) dans ton code et donc faire
$result = db_query('SELECT name , title, type, weight FROM {profile_fields} WHERE visibility = %d AND name LIKE "'.arg(1).'%" ORDER BY category , weight', PROFILE_PUBLIC_LISTINGS);
Richard lascols
www.ideia.fr
Bonjour, Apparement la
Permalien Soumis par virtua-artiste le 30 Septembre, 2009 - 17:22
Bonjour,
Apparement la modification avec ton code ne change pas la liste. J'ai toujours tous les membres de mon site qui apparaissent dans l'ordre chronologique mais il n'y a pas de entre les noms (commencant par a, b ,. . . )
tu ferais bien d'utilisé le
Permalien Soumis par khtuluu le 30 Septembre, 2009 - 18:29
tu ferais bien d'utilisé le module views, il te permettras de faire remonter tous les utilisateurs et très probablement de les limité avec la première lettre de leur nom
Richard lascols
www.ideia.fr
J'ai suivi tes conseils ->
Permalien Soumis par virtua-artiste le 30 Septembre, 2009 - 19:34
J'ai suivi tes conseils -> Utilisation des views et toujours le meme probleme - en fait ici la vue affiche bien les utilisateurs mais proportionnellement au contenu créé.
C a dire : exemple un utilisateur(dans l exemple: admin) a créé 5pages de contenu , ma view va afficher 5fois le noeud author name.
J'ai essayé de jouer avec la fonction Distinct mais cela ne fonctionne pas.
voici le code généré par la view:
$view = new stdClass(); $view->name = 'tri_artistes'; $view->description = ''; $view->access = array ( ); $view->view_args_php = ''; $view->page = TRUE; $view->page_title = ''; $view->page_header = ''; $view->page_header_format = '1'; $view->page_footer = ''; $view->page_footer_format = '1'; $view->page_empty = ''; $view->page_empty_format = '1'; $view->page_type = 'table'; $view->url = 'view/profile'; $view->use_pager = TRUE; $view->nodes_per_page = '30'; $view->sort = array ( ); $view->argument = array ( ); $view->field = array ( array ( 'tablename' => 'users', 'field' => 'uid', 'label' => '', ), array ( 'tablename' => 'users', 'field' => 'name', 'label' => '', 'sortable' => '1', 'defaultsort' => 'ASC', ), array ( 'tablename' => 'profile_biographie', 'field' => 'value', 'label' => '', 'sortable' => '1', ), array ( 'tablename' => 'profile_statut', 'field' => 'value', 'label' => '', 'sortable' => '1', ), array ( 'tablename' => 'profile_hypertext', 'field' => 'value', 'label' => '', 'sortable' => '1', ), ); $view->filter = array ( ); $view->exposed_filter = array ( ); $view->requires = array(users, profile_biographie, profile_statut, profile_hypertext); $views[$view->name] = $view;
cf : pieces jointes
je ne sais pas si c'est
Permalien Soumis par selinav le 1 Octobre, 2009 - 11:21
je ne sais pas si c'est vraiment exactement ce que tu recherches mais cet article pourra peut être t'aider http://drupal.org/node/74715
Je ne vois pas bien pourquoi
Permalien Soumis par emerya le 1 Octobre, 2009 - 12:46
Je ne vois pas bien pourquoi tu ne souhaites pas passer par Views. L'opérateur "starts with" (ou "commence par") est disponible, et peut être exposé.
Quant à ton problème de doublon dans views, j'y ai répondu ici : http://drupalfr.org/node/8491.
Blog DRUPALONS.FR : testez le générateur de code, et suivez-nous sur twitter
en fait j'etais sous drupal
Permalien Soumis par virtua-artiste le 1 Octobre, 2009 - 13:22
en fait j'etais sous drupal 5 donc j'etais obligé de migrer vers la version 6 qui propose ces améliorations. Concernant l'opérateur "starts with" seul il ne fonctionnait pas donc j'ai résolu le problème en ajoutant un champ de texte(qui correspond aux lettres de l'alphabet) dans la conception du profil utilisateur. Avec cette option je peux aisément faire mon tri.
probleme resolu
merci