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.