Joomla.it Forum

Joomla! 3 => Joomla! 3 => : anco1993 31 Dec 2014, 10:28:01

: Modificare il modulo Chi è Online per far vedere il Nome e non il Nome utente?
: anco1993 31 Dec 2014, 10:28:01
Buongiorno,
come da oggetto io ho la necessità di far comparire (nel modulo chi è online?) il NOME degli utenti registrati (cioè la prima colonna del tabs utenti) e non lo username che utilizzano per l'accesso.


Stavo notando per esempio che il messaggio di benvenuto (Ciao ....) utilizza il NOME e non lo username pertanto dovrei ottenere la stessa cosa. Ho provato a cercare ma non ho trovato nulla che faccia al caso mio.
So dove modificare il PHP nel file default.php.


:
<?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 == || $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
:
<?php echo $name->username?>
potete aiutarmi voi a sistemare il codice per la mia esigenza?


Grazie e colgo l'occasione per porgervi i miei più sinceri auguri :D
: Re:Modificare il modulo Chi è Online per far vedere il Nome e non il Nome utente?
: alessioa 31 Dec 2014, 10:43:59
ciao,

leggi qui https://docs.joomla.org/Accessing_the_current_user_object (https://docs.joomla.org/Accessing_the_current_user_object)
: Re:Modificare il modulo Chi è Online per far vedere il Nome e non il Nome utente?
: anco1993 31 Dec 2014, 10:46:39
Grazie per la risposta  :)  .


Mi potresti aiutare direttamente senza link ad altra documentazione ;) ? Ho già provato un po' di tutto. Sono arrivato a chiedere proprio perché non riesco ad ottenerlo.


Ho anche già provato a modificare username con name ma non funziona. Rimane bianco.
:
<?php echo $name->name?>
: Re:Modificare il modulo Chi è Online per far vedere il Nome e non il Nome utente?
: alessioa 31 Dec 2014, 11:16:02
Ciao,

purtroppo non posso aiutarti, con la documentazione e un pò di conoscenza di PHP dovresti riuscirci, se invece ti serve avere qualcosa di già pronto, dovresti chiedere una consulenza a pagamento nella sezione annunci qui http://forum.joomla.it/index.php/board,7.0.html
: Re:Modificare il modulo Chi è Online per far vedere il Nome e non il Nome utente?
: anco1993 31 Dec 2014, 11:28:13
Ok. Spero nell'aiuto di qualcun altro del forum. Grazie lo stesso. Buon Anno.
: Re:Modificare il modulo Chi è Online per far vedere il Nome e non il Nome utente?
: X-mac 31 Dec 2014, 19:52:58
Se name rimane bianco vuol dire che la variabile non è valorizzata. Controlla  bene il valore anche provando a creare un nuovo utente con tutti i campi corretti
: Re:Modificare il modulo Chi è Online per far vedere il Nome e non il Nome utente?
: anco1993 01 Jan 2015, 08:25:30
Inanzitutto BUON 2015 a tutti.

Grazie per la risposta. Per quanto riguarda il campo name tutti gli utenti ce l'hanno perfettamente compilato. Pero se io provo a fare così:
:
<?php echo $name->name?> non funziona.

Cosa mi perdo?
: Re:Modificare il modulo Chi è Online per far vedere il Nome e non il Nome utente?
: X-mac 01 Jan 2015, 14:42:45
Non ti perdi niente, se è bianco vuol dire che non esiste. Controlla anche sul db
: Re:Modificare il modulo Chi è Online per far vedere il Nome e non il Nome utente?
: anco1993 01 Jan 2015, 14:49:11
O non mi son fatto capire o meglio non mi ha capito! Ma scusi se nell' ACP in utenti ogni utente ha il campo nome perfettamente compilato, dato che è anche un campo obligatorio.
Infatti quando loggano nel sito joomla da il benvenuto con "ciao ......" come fa ad insistere che sia un campo vuoto? Se quella funziona trova il nome vuoldire che esiste! Io devo appunto usare quel percorso in modo che anziché darmi lo username tipo online c'è anco1993 mi dia online c'è Andrea.
Evidentemente allora lei si riferisce ad un altro campo ma non è quello che cerco. 😔
: Re:Modificare il modulo Chi è Online per far vedere il Nome e non il Nome utente?
: X-mac 01 Jan 2015, 14:51:56
Non confondere i campi del db con le variabiali
: Re:Modificare il modulo Chi è Online per far vedere il Nome e non il Nome utente?
: anco1993 01 Jan 2015, 14:53:37
Beh comunque sia la funziona del benvenuto lo trova come fa ad essere vuotoo?!?
Mi dice dove devo controllare di preciso così vedo e glielo riferisco
: Re:Modificare il modulo Chi è Online per far vedere il Nome e non il Nome utente?
: claudiocarrera 02 Jan 2015, 12:22:34
Ogni modulo/compontente/plugin ha le sue variabili, Se:
:
$name->username;
riporta il nomeutente del utente è perché chi ha sviluppato il modulo/compontente/plugin ha impostato il modo tale che quel codice restituisse il nome utente loggato.
Se:
:
$name->name;
Non restituisce nulla è perche questo parametro non esiste all'interno di quella estensione, chi fa un estensione richiama solo ciò di cui ha bisogno non richiama tutte le opzioni possibili al mondo (sarebbe una perdita di tempo).

Se vuoi che richiami un dato diverso da quelli disponibili, devi crearlo tramite api  come ti hanno segnalato in precedenza, esempio veloce:

:
<?php 
$utente 
=  JFactory::getUser(); // prende utente attivo
$nomeuser $utente->username// piglia username
echo $nomeuser// scrive nome utente
?>


Comunque uso del nome e non del nomeutente è voluto per un discorso di sicurezza, ma vado offtopic quindi mi fermo qui. ;)
: Re:Modificare il modulo Chi è Online per far vedere il Nome e non il Nome utente?
: anco1993 02 Jan 2015, 18:45:10
Allora io non posso far altro che ringraziarvi di cuore per la vostra disponibilità.


Ma se sono arrivato a chiedere qui dopo varie ricerche vuol dire che non so andare avanti. Per voi ci vorrebbero due secondi a restituirmi il codice sistemato per RISOLVERE il mio problema.


Con questi indizi a "mozzichi e bocconi" che sicuramente saranno utili per qualcuno io non riesco a far funzionare un bel nulla. Pertanto se potete aiutarmi più concretamente vi ringrazio nuovamente e sono qui altrimenti non vado avanti :(
: Re:Modificare il modulo Chi è Online per far vedere il Nome e non il Nome utente?
: X-mac 02 Jan 2015, 19:14:47
Per gestire la cosa come la vuoi te bisogna mettere le mani al tuo codice e vedere esattamente le chiamate. Cosa che và fuori dallo spirito del forum.
: Re:Modificare il modulo Chi è Online per far vedere il Nome e non il Nome utente?
: anco1993 03 Jan 2015, 09:21:36
Trattandosi di un forum ufficiale e di un prodotto adatto a tutti, esperti e meno, pensavo si trattasse di un forum per "risolvere" i problemi.
Io ringrazio nuovamente chi ci ha provato ma NON HO risolto.
Andró verso altre strade o forum che abbiano come dici tu un "altro spirito" ;)... Da notare che c'é stato anche chi si è proposto in cambio di soldi! Beh quello non mi sembra proprio spirito di un forum!
Ciao e grazie a tutti!
: Re:Modificare il modulo Chi è Online per far vedere il Nome e non il Nome utente?
: tomtomeight 03 Jan 2015, 09:38:33
Confermo che lo spirito del forum è anche aiutare e cercare di far risolvere una richiesta come la tua. Capirai però che non è possibile ridurre la cosa alla sola soluzione chiavi in mano piuttosto che indicarti la via per poi finalizzare la soluzione e condividerla. Una via potrebbe essere quella di verificare come è impostato il codice ove richiama, come hai detto nel messaggio di benvenuto, il nome. Per quanto riguarda invece il tuo disappunto circa le proposte fattoti per risolvere a pagamento senza che tu abbia postato nella sezione annunci, ti invito a fare i nomi.
: Re:Modificare il modulo Chi è Online per far vedere il Nome e non il Nome utente?
: claudiocarrera 03 Jan 2015, 19:11:13
:
echo $name->name;
:
echo $nomeuser;
Mi autocorreggo, non avevo visto il ciclo foreach, codice è un pò più complesso allora, appena ho tempo gli dò un occhiata un pò più approfondita.
: Re:Modificare il modulo Chi è Online per far vedere il Nome e non il Nome utente?
: claudiocarrera 04 Jan 2015, 02:27:43
Allora procedimento è lungo da spiegare ma semplice:

Crei una copia del modulo, perche altrimenti al primo aggiornamento perdi le modiche, vai nella cartella module e copia cartella "mod_whosonline" nella catella tmp.
Prima cosa da fare pè cambiare tutti i riferimenti del modulo per evitare una "sovrapposizione": rinomina i file "mod_whosonline.php" e "mod_whosonline.xml" in "mod_whosonlineb.php" e "mod_whosonlineb.xml".
Apri il file xml e cambi i parametri:
:
    <filename module="mod_whosonline">mod_whosonline.php</filename>
        <folder>tmpl</folder>
        <filename>helper.php</filename>
        <filename>index.html</filename>
        <filename>mod_whosonline.xml</filename>

in:
:
    <filename module="mod_whosonlineb">mod_whosonlineb.php</filename>
        <folder>tmpl</folder>
        <filename>helper.php</filename>
        <filename>index.html</filename>
        <filename>mod_whosonlineb.xml</filename>

Un problemino che ho quando dupkico un modulo e non ancora capito come mai mi dà errore è override lingua del backend del, ma poco male perché si risolve velocemente cosi:
:
        <field
                    name="showmode"
                    type="list"
                    default="0"
                    label="MOD_WHOSONLINE_SHOWMODE_LABEL"
                    description="MOD_WHOSONLINE_SHOWMODE_DESC">
                    <option
                        value="0">MOD_WHOSONLINE_FIELD_VALUE_NUMBER</option>
                    <option
                        value="1">MOD_WHOSONLINE_FIELD_VALUE_NAMES</option>
                    <option
                        value="2">MOD_WHOSONLINE_FIELD_VALUE_BOTH</option>
                </field>
diventa:
:
        <field
                    name="showmode"
                    type="list"
                    default="0"
                    label="modo vista"
                    description="scegli modo vista">
                    <option
                        value="0">numero</option>
                    <option
                        value="1">nome</option>
                    <option
                        value="2">entrambi</option>
                </field>
L'ovverride che ti danno problemi sono solo quelli con "MOD_WHOSONLINE" li altri lasciali cosi come sono


Mentre il file mod_whosonlineb.php:
:
require JModuleHelper::getLayoutPath('mod_whosonline', $params->get('layout', 'default'));
diventa
:
require JModuleHelper::getLayoutPath('mod_whosonlineb', $params->get('layout', 'default'));
Ok questo era per i file, ora bisogna duplicare anche gli oggetti:
Sempre nel file "mod_whosonlineb.php":
:
$showmode = $params->get('showmode', 0);

if ($showmode == 0 || $showmode == 2)
{
    $count    = ModWhosonlineHelper::getOnlineCount();
}

if ($showmode > 0)
{
    $names    = ModWhosonlineHelper::getOnlineUserNames($params);
}
diventa:
:
$showmode = $params->get('showmode', 0);

if ($showmode == 0 || $showmode == 2)
{
    $count    = ModWhosonlineHelperB::getOnlineCount();
}

if ($showmode > 0)
{
    $names    = ModWhosonlineHelperB::getOnlineUserNames($params);
}
In pratica la oggetto "ModWhosonlineHelper" è già usato dal modulo originale quindi dobbiamo cambiarlo, ma non basta:
Apri il file helper e sostituisci:
:
class ModWhosonlineHelper
con:
:
class ModWhosonlineHelperB

Ora hai una copia perfetta del modulo puoi fare tutte le modiche che vuoi su questo modulo e non influenzerai minimamente il secondo.

Ora arriva la modifica che ti serve, sempre nel file helper.php:

:
$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();
Tabella che viene selezionata è "__session" che non contiene il nome dell'utente ma solo username (e anche time, userid e client:id che a te non servono).
Il parametro di cui hai bisogno è nella tabella "users" che hanno i comune  username, quindi dei fare un Join delle due tabelle e il codice diventa:
:
    $query    = $db->getQuery(true)
            ->select($db->quoteName(array('a.username', 'a.time', 'a.userid', 'a.client_id','c.name')))
            ->from('#__session AS a')
            ->join('LEFT','#__users AS c ON c.username = a.username')
            ->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','c.name')));
           

Bene , modifica al codice è stata fatta, ora il modulo oltre hai parametri vecchi ne ha uno nuovo " name".
vai nel file tmpl/default.php e ora puoi far diventare:
:
            <?php echo $name->username?>
in:
:
            <?php echo $name->name?>

Ora che è tutto pronto non ti rimane altro che installare il modulo e usarlo al posto del modulo nativo. già testato e funziona non dovresti avere problemi. :)
: Re:Modificare il modulo Chi è Online per far vedere il Nome e non il Nome utente?
: anco1993 04 Jan 2015, 09:25:38
In realtà mi ero cancellato dal forum. Sono tornato proprio per ringraziarla in quanto ci ha lavorato. Il mio problema è risolto. Ma avevo già risolto ieri mediante un altro forum dove ha semplicemente fatto solo la sua ultima operazione cioè modificare nell'helper:


questo:
:
$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:
:
$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'))); 


e poi ovviamente fare la modifica:

:
<?php echo $name->name?> . A questo punto pacchettizzarlo con un altro nome, dato che essendo nativo ad ogni aggiornamento si toglierebbe la modifica e installarlo. Già così funziona perfettamente.

LA RINGRAZIO COMUNQUE. SALUTI.