Fork me on GitHub

Rapport de message :*
 

Re: Module Profile et Multimenu: comment afficher toutes les fiches

Titre du sujet : Re: Module Profile et Multimenu: comment afficher toutes les fiches
par blueteen sur 07/02/2007 17:01:59

j'ai récupéré extended profile + smartobject pour tester.
premier blocage de mon côté, il fallait du php5.
mais il existe une version de ce module, modifiée pour fonctionner avec php4.
je me suis donc basé sur le fichier search.php (un peu comme je te le disais pour xoopsmembers).
j'ai contrôlé, le fichier search est le même dans les 2 cas.
j'ai donc copié ce fichier, et renommé en liste.php

j'ai commencé par changer cette ligne :
$op = isset($_REQUEST['op']) ? $_REQUEST['op'] : "search";

en :
$op = isset($_REQUEST['op']) ? $_REQUEST['op'] : "results";


de cette façon, c'est la page de résultats qui s'affichait au lieu de la page de recherche.
juste avec cette modif, on n'obtient bien entendu, aucun résultat, vu qu'aucune variable de recherche n'est transmise.

pour tester si ce système va fonctionner chez toi, j'ai allégé un peu le fichier (100 lignes de code au lieu de 400).
je te laisser créer un fichier liste.php qui contiendra le code suivant :
<?php
// $Id: search.php,v 1.2 2006/12/07 20:42:29 mithyt2 Exp $
//  ------------------------------------------------------------------------ //
//                XOOPS - PHP Content Management System                      //
//                    Copyright (c) 2000 XOOPS.org                           //
//                       <http://www.xoops.org/>   ... nbsp;   //
//  ------------------------------------------------------------------------ //
//  This program is free software; you can redistribute it and/or modify     //
//  it under the terms of the GNU General Public License as published by     //
//  the Free Software Foundation; either version 2 of the License, or        //
//  (at your option) any later version.                                      //
//                                                                           //
//  You may not change or alter any portion of this comment or credits       //
//  of supporting developers from this source code or any supporting         //
//  source code which is considered copyrighted (c) material of the          //
//  original comment or credit authors.                                      //
//                                                                           //
//  This program is distributed in the hope that it will be useful,          //
//  but WITHOUT ANY WARRANTY; without even the implied warranty of           //
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the            //
//  GNU General Public License for more details.                             //
//                                                                           //
//  You should have received a copy of the GNU General Public License        //
//  along with this program; if not, write to the Free Software              //
//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA //
//  ------------------------------------------------------------------------ //

include '../../mainfile.php';
$myts =& MyTextSanitizer::getInstance();
$groups $xoopsUser $xoopsUser->getGroups() : array(XOOPS_GROUP_ANONYMOUS);

        
$xoopsOption['template_main'] = "smartprofile_results.html";
        include_once 
XOOPS_ROOT_PATH."/header.php";

        
$member_handler =& xoops_gethandler('member');
        
// Dynamic fields
        
$profile_handler =& xoops_getmodulehandler('profile');
        
// Get fields
        
$fields =& $profile_handler->loadFields();
        
// Get ids of fields that can be searched
        
$gperm_handler =& xoops_gethandler('groupperm');
        
$searchable_fields =& $gperm_handler->getItemIds('smartprofile_search'$groups$xoopsModule->getVar('mid'));
        
$searchvars = array();

        
$criteria = new CriteriaCompo(new Criteria('level'0">"));
        
$criteria->add(new Criteria('uname'"%""LIKE"));
        
$searchvars[] = "uname";

        
$criteria->setSort("uname");

        
$order "ASC"//DESC pour trier dans l'ordre décroissant
        
$criteria->setOrder($order);

        
$limit 20//indiquer ici le nombre de membres à afficher par page
        
$criteria->setLimit($limit);

        
$start 0;
        
$criteria->setStart($start);

        
//Get users based on criteria
        
$profile_handler xoops_getmodulehandler('profile');
        list(
$users$profiles$total_users) = $profile_handler->search($criteria$searchvars);

        
//Sort information
        
foreach (array_keys($users) as $k) {
            
$userarray["output"][] = "<a href='userinfo.php?uid=".$users[$k]->getVar('uid')."'>".$users[$k]->getVar('uname')."</a>";
            
$userarray["output"][] = $users[$k]->getVar('user_viewemail') == || $xoopsUser->isAdmin() ? $users[$k]->getVar('email') : "";

            foreach (
array_keys($fields) as $i) {
                if (
in_array($fields[$i]->getVar('fieldid'), $searchable_fields) && in_array($fields[$i]->getVar('field_type'), $searchable_types) && in_array($fields[$i]->getVar('field_name'), $searchvars)) {
                    
$userarray["output"][] = $fields[$i]->getOutputValue($users[$k], $profiles[$k]);
                }
            }
            
$xoopsTpl->append('users'$userarray);
            unset(
$userarray);
        }

        
//Get captions
        
$captions[] = _PROFILE_MA_DISPLAYNAME;
        
$captions[] = _PROFILE_MA_EMAIL;
        foreach (
array_keys($fields) as $i) {
            if (
in_array($fields[$i]->getVar('fieldid'), $searchable_fields) && in_array($fields[$i]->getVar('field_type'), $searchable_types) && in_array($fields[$i]->getVar('field_name'), $searchvars)) {
                
$captions[] = $fields[$i]->getVar('field_title');
            }
        }
        
$xoopsTpl->assign('captions'$captions);

        if (
$total_users $limit) {
            
$search_url[] = "op=results";
            
$search_url[] = "order=".$order;
            
$search_url[] = "sortby=".$_REQUEST['sortby'];
            
$search_url[] = "limit=".$limit;
            if (isset(
$search_url)) {
                
$args implode("&amp;"$search_url);
            }
            include_once 
XOOPS_ROOT_PATH."/class/pagenav.php";
            
$nav = new XoopsPageNav($total_users$limit$start"start"$args);
            
$xoopsTpl->assign('nav'$nav->renderNav(5));
        }

include 
XOOPS_ROOT_PATH."/footer.php";
?>


c'est une version très édulcorée de search.php :
j'ai viré le switch qui chargeait soit la recherche soit le résultat.
j'ai viré aussi tous les champs de recherche, sauf celui sur le pseudo (tout aussi valable que le mail, puisqu'on a forcément un pseudo pour s'inscrire).
au final, à l'affichage, on a juste le pseudo (avec un lien vers le profil), et le mail du membre.

c'est juste un test, pour voir si l'approche est bonne pour toi.

si c'est ok, on pourra repartir du fichier search.php pour faire la recherche sur le champs que tu veux, et n'afficher que ce que tu veux (attention par exemple à l'affichage des mails des membres qui ne veulent pas que ce soit public, etc...).

dans ce fichier, j'ai mis 2 commentaires, tu peux indiquer le nombre de membres que tu veux afficher par page (20 par défaut).
tu peux aussi choisir l'ordre de tri d'affichage (par défaut, croissant sur le pseudo).
Propulsé avec XOOPS | Graphisme adapté par Tatane, Grosdunord, Montuy337513

11 Personne(s) en ligne (7 Personne(s) connectée(s) sur Forum) | Utilisateur(s): 0 | Invité(s): 11 | Plus ...