Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Modificare il modulo Chi è Online in PHP per far vedere il Nome e non lo username?

    Buongiorno,
    come da oggetto io ho la necessità di modificare un codice in PHP far comparire (nel modulo chi è online?) il NOME degli utenti registrati (cioè la prima colonna del tabs utenti in joomla) e non lo username che utilizzano per l'accesso.

    Il codice del modulo in questione è questo:
    codice:
    <?php
    /**
     * @package     Joomla.Site
     * @subpackage  mod_whosonline
     *
     * @copyright   Copyright (C) 2005 - 2014 Open Source Matters, Inc. All rights reserved.
     * @license     GNU General Public License version 2 or later; see LICENSE.txt
     */
    
    
    defined('_JEXEC') or die;
    ?>
    
    
    <?php if ($showmode == 0 || $showmode == 2) : ?>
    <?php $guest = JText::plural('MOD_WHOSONLINE_GUESTS', $count['guest']); ?>
    <?php $member = JText::plural('MOD_WHOSONLINE_MEMBERS', $count['user']); ?>
       <p><?php echo JText::sprintf('MOD_WHOSONLINE_WE_HAVE', $guest, $member); ?></p>
    <?php endif; ?>
    
    
    <?php if (($showmode > 0) && count($names)) : ?>
       <ul  class="whosonline<?php echo $moduleclass_sfx ?>" >
    <?php if ($params->get('filter_groups')):?>
          <p><?php echo JText::_('MOD_WHOSONLINE_SAME_GROUP_MESSAGE'); ?></p>
    <?php endif;?>
    <?php foreach ($names as $name) : ?>
          <li>
    <?php echo $name->username; ?>
          </li>
    <?php endforeach;  ?>
       </ul>
    <?php endif;


    e credo proprio che sia da variare lo username in questa stringa con il name da così
    codice:
    <?php echo $name->username; ?>

    a così
    codice:
    <?php echo $name->name; ?>


    ma compiendo questa semplice operazione il modulo non restituisce più nulla. Qualcuno mi ha detto perché nel codice che è stato impostato per dare lo username mancano i parametri per il name. P
    otete aiutarmi voi a sistemare il codice per la mia esigenza? Colgo l'occasione per ringraziarvi e porgervi i miei auguri.

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Non sapendo cosa contiene l'oggetto $name è impossibile risponderti.
    Stampa tutto il contenuto di $name con print_r($name) oppure trova il file in cui è definita la classe Name e vedi quali proprietà possiede.

  3. #3
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Non sapendo cosa contiene l'oggetto $name è impossibile risponderti.
    Stampa tutto il contenuto di $name con print_r($name) oppure trova il file in cui è definita la classe Name e vedi quali proprietà possiede.

    Cioè? Inanzitutto la ringrazio di cuore per la risposta. Però non me ne intendo molto e non saprei cosa fornirle.

    Comunque in sostanza quel modulo restituisce in tempo reale chi è loggato al sito. L'utente registrato ha un nome (name), lo userid (username), la password ecc..

    Il modulo così com'è si va ad agganciare alla username infatti dirà online c'è anco93 e non dice invece online c'è Andrea.

    Comunque il modulo è composto da anche questi altri due file PHP:
    Il primo è questo:

    codice:
    <?php/**
     * @package     Joomla.Site
     * @subpackage  mod_whosonline
     *
     * @copyright   Copyright (C) 2005 - 2014 Open Source Matters, Inc. All rights reserved.
     * @license     GNU General Public License version 2 or later; see LICENSE.txt
     */
    
    
    defined('_JEXEC') or die;
    
    
    /**
     * Helper for mod_whosonline
     *
     * @package     Joomla.Site
     * @subpackage  mod_whosonline
     * @since       1.5
     */
    class ModWhosonlineHelper
    {
        /**
         * Show online count
         *
         * @return  array  The number of Users and Guests online.
         *
         * @since   1.5.0
         **/
        public static function getOnlineCount()
        {
            $db        = JFactory::getDbo();
    
    
            // Calculate number of guests and users
            $result    = array();
            $user_array  = 0;
            $guest_array = 0;
            $query    = $db->getQuery(true)
                ->select('guest, client_id')
                ->from('#__session')
                ->where('client_id = 0');
            $db->setQuery($query);
            $sessions = (array) $db->loadObjectList();
    
    
            if (count($sessions))
            {
                foreach ($sessions as $session)
                {
                    // If guest increase guest count by 1
                    if ($session->guest == 1)
                    {
                        $guest_array ++;
                    }
    
    
                    // If member increase member count by 1
                    if ($session->guest == 0)
                    {
                        $user_array ++;
                    }
                }
            }
    
    
            $result['user']  = $user_array;
            $result['guest'] = $guest_array;
    
    
            return $result;
        }
    
    
        /**
         * Show online member names
         *
         * @param   mixed  $params  The parameters
         *
         * @return  array   (array) $db->loadObjectList()  The names of the online users.
         *
         * @since   1.5.0
         **/
        public static function getOnlineUserNames($params)
        {
            $db        = JFactory::getDbo();
            $query    = $db->getQuery(true)
                ->select($db->quoteName(array('a.username', 'a.time', 'a.userid', 'a.client_id')))
                ->from('#__session AS a')
                ->where($db->quoteName('a.userid') . ' != 0')
                ->where($db->quoteName('a.client_id') . ' = 0')
                ->group($db->quoteName(array('a.username', 'a.time', 'a.userid', 'a.client_id')));
            $user = JFactory::getUser();
    
    
            if (!$user->authorise('core.admin') && $params->get('filter_groups', 0) == 1)
            {
                $groups = $user->getAuthorisedGroups();
    
    
                if (empty($groups))
                {
                    return array();
                }
    
    
                $query->join('LEFT', '#__user_usergroup_map AS m ON m.user_id = a.userid')
                    ->join('LEFT', '#__usergroups AS ug ON ug.id = m.group_id')
                    ->where('ug.id in (' . implode(',', $groups) . ')')
                    ->where('ug.id <> 1');
            }
    
    
            $db->setQuery($query);
    
    
            return (array) $db->loadObjectList();
        }
    }

    il secondo è questo:

    codice:
    <?php
    /**
     * @package     Joomla.Site
     * @subpackage  mod_whosonline
     *
     * @copyright   Copyright (C) 2005 - 2014 Open Source Matters, Inc. All rights reserved.
     * @license     GNU General Public License version 2 or later; see LICENSE.txt
     */
    
    
    defined('_JEXEC') or die;
    
    
    // Include the whosonline functions only once
    require_once __DIR__ . '/helper.php';
    
    
    $showmode = $params->get('showmode', 0);
    
    
    if ($showmode == 0 || $showmode == 2)
    {
        $count    = ModWhosonlineHelper::getOnlineCount();
    }
    
    
    if ($showmode > 0)
    {
        $names    = ModWhosonlineHelper::getOnlineUserNames($params);
    }
    
    
    $linknames = $params->get('linknames', 0);
    $moduleclass_sfx = htmlspecialchars($params->get('moduleclass_sfx'));
    
    
    require JModuleHelper::getLayoutPath('mod_whosonline', $params->get('layout', 'default'));
    Ultima modifica di anco93; 03-01-2015 a 11:36

  4. #4
    Guarda basterebbero poche righe di codice, nel file /modules/mod_whosonline/helper.php
    cambia questa query nella funzione getOnlineUserNames
    Codice PHP:
    $query    $db->getQuery(true)
                ->
    select($db->quoteName(array('a.username''a.time''a.userid''a.client_id')))
                ->
    from('#__session AS a')
                ->
    where($db->quoteName('a.userid') . ' != 0')
                ->
    where($db->quoteName('a.client_id') . ' = 0')
                ->
    group($db->quoteName(array('a.username''a.time''a.userid''a.client_id'))); 
    con quest'altra (devi solo aggiungere un paio di cose, te le evidenzio in grassetto)
    Codice PHP:
    $query    $db->getQuery(true)
                ->
    select($db->quoteName(array('a.username''a.time''a.userid''a.client_id','b.name')))
                ->
    from('#__session AS a')
                ->
    join('INNER'$db->quoteName('#__users''b').' ON (b.id=a.userid)')
                ->
    where($db->quoteName('a.userid') . ' != 0')
                ->
    where($db->quoteName('a.client_id') . ' = 0')
                ->
    group($db->quoteName(array('a.username''a.time''a.userid''a.client_id'))); 
    A questo punto nel template default.php che hai postato prima, basta che usi
    Codice PHP:
    <?php echo $name->name?>
    In questo modo funziona, il problema è che questo modulo fa parte del core di joomla quindi non dovresti sovrascriverlo, perchè altrimenti ti verrebbe ri-sovrascritto quando fai gli aggiornamenti; dovresti perciò fare queste modifiche su un'altra cartella-copia del modulo (chiamala ad esempio mod_whosonlinemodificato).
    Fatta la copia e apportate le modifiche che ti ho scritto, devi sostituire nel file .xml le occorrenze di "mod_whosonline" con "mod_whosonlinemodificato" e, infine, rinominare lo stesso file xml in "mod_whosonlinemodificato.xml". Stesso discorso per mod_whosonline.php che ti diventa mod_whosonlinemodificato.php.
    Ultimo step: zippi il file e lo installi come modulo, dal pannello di amministrazione.
    Pensate i programmi a librerie, e innalzate il livello d'astrazione

  5. #5
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Prova cambiando questo
    Codice PHP:
    $query  $db->getQuery(true)
                ->
    select($db->quoteName(array('a.username''a.time''a.userid''a.client_id')))
                ->
    from('#__session AS a')
                ->
    where($db->quoteName('a.userid') . ' != 0')
                ->
    where($db->quoteName('a.client_id') . ' = 0')
                ->
    group($db->quoteName(array('a.username''a.time''a.userid''a.client_id'))); 
    con questo

    Codice PHP:
    $query  $db->getQuery(true)
                ->
    select($db->quoteName(array('a.name''a.username''a.time''a.userid''a.client_id')))
                ->
    from('#__session AS a')
                ->
    where($db->quoteName('a.userid') . ' != 0')
                ->
    where($db->quoteName('a.client_id') . ' = 0')
                ->
    group($db->quoteName(array('a.name''a.username''a.time''a.userid''a.client_id'))); 
    e ad usare
    <?php echo $name->name; ?>

    per stampare il nome.

  6. #6
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Prova cambiando questo
    Codice PHP:
    $query  $db->getQuery(true)
                ->
    select($db->quoteName(array('a.username''a.time''a.userid''a.client_id')))
                ->
    from('#__session AS a')
                ->
    where($db->quoteName('a.userid') . ' != 0')
                ->
    where($db->quoteName('a.client_id') . ' = 0')
                ->
    group($db->quoteName(array('a.username''a.time''a.userid''a.client_id'))); 
    con questo

    Codice PHP:
    $query  $db->getQuery(true)
                ->
    select($db->quoteName(array('a.name''a.username''a.time''a.userid''a.client_id')))
                ->
    from('#__session AS a')
                ->
    where($db->quoteName('a.userid') . ' != 0')
                ->
    where($db->quoteName('a.client_id') . ' = 0')
                ->
    group($db->quoteName(array('a.name''a.username''a.time''a.userid''a.client_id'))); 
    e ad usare
    <?php echo $name->name; ?>

    per stampare il nome.
    cosi non funziona perché il dato viene preso dalla tabella di sessione, non da quella degli user. Deve appunto aggiungere un join
    Pensate i programmi a librerie, e innalzate il livello d'astrazione

  7. #7
    Quote Originariamente inviata da Infocurci Visualizza il messaggio
    Guarda basterebbero poche righe di codice, nel file /modules/mod_whosonline/helper.php
    cambia questa query nella funzione getOnlineUserNames
    Codice PHP:
    $query    $db->getQuery(true)
                ->
    select($db->quoteName(array('a.username''a.time''a.userid''a.client_id')))
                ->
    from('#__session AS a')
                ->
    where($db->quoteName('a.userid') . ' != 0')
                ->
    where($db->quoteName('a.client_id') . ' = 0')
                ->
    group($db->quoteName(array('a.username''a.time''a.userid''a.client_id'))); 
    con quest'altra (devi solo aggiungere un paio di cose, te le evidenzio in grassetto)
    Codice PHP:
    $query    $db->getQuery(true)
                ->
    select($db->quoteName(array('a.username''a.time''a.userid''a.client_id','b.name')))
                ->
    from('#__session AS a')
                ->
    join('INNER'$db->quoteName('#__users''b').' ON (b.id=a.userid)')
                ->
    where($db->quoteName('a.userid') . ' != 0')
                ->
    where($db->quoteName('a.client_id') . ' = 0')
                ->
    group($db->quoteName(array('a.username''a.time''a.userid''a.client_id'))); 
    A questo punto nel template default.php che hai postato prima, basta che usi
    Codice PHP:
    <?php echo $name->name?>
    In questo modo funziona, il problema è che questo modulo fa parte del core di joomla quindi non dovresti sovrascriverlo, perchè altrimenti ti verrebbe ri-sovrascritto quando fai gli aggiornamenti; dovresti perciò fare queste modifiche su un'altra cartella-copia del modulo (chiamala ad esempio mod_whosonlinemodificato).
    Fatta la copia e apportate le modifiche che ti ho scritto, devi sostituire nel file .xml le occorrenze di "mod_whosonline" con "mod_whosonlinemodificato" e, infine, rinominare lo stesso file xml in "mod_whosonlinemodificato.xml". Stesso discorso per mod_whosonline.php che ti diventa mod_whosonlinemodificato.php.
    Ultimo step: zippi il file e lo installi come modulo, dal pannello di amministrazione.
    FUNZIONA!!! . Proprio quello che cercavo. Grazie davvero di cuore. La discussione può essere impostata come [RISOLTO]

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.