Back to top

Autore Topic: Modificare il modulo Chi è Online per far vedere il Nome e non il Nome utente?  (Letto 3649 volte)

anco1993

  • Visitatore
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.


Codice: [Seleziona]
<?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
Codice: [Seleziona]
<?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

Offline alessioa

  • Abituale
  • ****
  • Post: 1136
  • Sesso: Maschio
    • Mostra profilo
Realizzazione siti Joomla! | I love Wing Chun :-) | Non promettere nulla a nessuno se non sei certo di poterlo mantenere .

anco1993

  • Visitatore
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.
Codice: [Seleziona]
<?php echo $name->name?>
« Ultima modifica: 31 Dic 2014, 10:48:19 da anco1993 »

Offline alessioa

  • Abituale
  • ****
  • Post: 1136
  • Sesso: Maschio
    • Mostra profilo
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
Realizzazione siti Joomla! | I love Wing Chun :-) | Non promettere nulla a nessuno se non sei certo di poterlo mantenere .

anco1993

  • Visitatore
Ok. Spero nell'aiuto di qualcun altro del forum. Grazie lo stesso. Buon Anno.
« Ultima modifica: 31 Dic 2014, 17:06:35 da anco1993 »

Offline X-mac

  • Appassionato
  • ***
  • Post: 468
  • Sesso: Maschio
    • Mostra profilo
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

anco1993

  • Visitatore
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ì:
Codice: [Seleziona]
<?php echo $name->name?> non funziona.

Cosa mi perdo?

Offline X-mac

  • Appassionato
  • ***
  • Post: 468
  • Sesso: Maschio
    • Mostra profilo
Non ti perdi niente, se è bianco vuol dire che non esiste. Controlla anche sul db

anco1993

  • Visitatore
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. 😔
« Ultima modifica: 01 Gen 2015, 14:51:22 da anco1993 »

Offline X-mac

  • Appassionato
  • ***
  • Post: 468
  • Sesso: Maschio
    • Mostra profilo
Non confondere i campi del db con le variabiali

anco1993

  • Visitatore
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

Offline claudiocarrera

  • Appassionato
  • ***
  • Post: 612
  • Sesso: Maschio
  • Sviluppo siti web Brescia
    • Mostra profilo
Ogni modulo/compontente/plugin ha le sue variabili, Se:
Codice: [Seleziona]
$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:
Codice: [Seleziona]
$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:

Codice: [Seleziona]
<?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. ;)
Claudio Carrera - claudio@3rd-graphic.it
partita iva: 03597950983
tel: 338 9433727

anco1993

  • Visitatore
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 :(

Offline X-mac

  • Appassionato
  • ***
  • Post: 468
  • Sesso: Maschio
    • Mostra profilo
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.

anco1993

  • Visitatore
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!

Offline tomtomeight

  • Global Moderator
  • Fuori controllo
  • ********
  • Post: 32046
  • Sesso: Maschio
  • Gli automatismi aiutano ma non insegnano nulla.
    • Mostra profilo
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.

Offline claudiocarrera

  • Appassionato
  • ***
  • Post: 612
  • Sesso: Maschio
  • Sviluppo siti web Brescia
    • Mostra profilo
Codice: [Seleziona]
echo $name->name;
Codice: [Seleziona]
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.
« Ultima modifica: 03 Gen 2015, 19:23:55 da claudiocarrera »
Claudio Carrera - claudio@3rd-graphic.it
partita iva: 03597950983
tel: 338 9433727

Offline claudiocarrera

  • Appassionato
  • ***
  • Post: 612
  • Sesso: Maschio
  • Sviluppo siti web Brescia
    • Mostra profilo
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:
Codice: [Seleziona]
    <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:
Codice: [Seleziona]
    <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:
Codice: [Seleziona]
        <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:
Codice: [Seleziona]
        <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:
Codice: [Seleziona]
require JModuleHelper::getLayoutPath('mod_whosonline', $params->get('layout', 'default'));
diventa
Codice: [Seleziona]
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":
Codice: [Seleziona]
$showmode = $params->get('showmode', 0);

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

if ($showmode > 0)
{
    $names    = ModWhosonlineHelper::getOnlineUserNames($params);
}
diventa:
Codice: [Seleziona]
$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:
Codice: [Seleziona]
class ModWhosonlineHelper
con:
Codice: [Seleziona]
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:

Codice: [Seleziona]
$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:
Codice: [Seleziona]
    $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:
Codice: [Seleziona]
            <?php echo $name->username?>
in:
Codice: [Seleziona]
            <?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. :)
« Ultima modifica: 04 Gen 2015, 02:29:41 da claudiocarrera »
Claudio Carrera - claudio@3rd-graphic.it
partita iva: 03597950983
tel: 338 9433727

anco1993

  • Visitatore
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:
Codice: [Seleziona]
$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: [Seleziona]
$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:

Codice: [Seleziona]
<?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.





 



Web Design Bolzano Kreatif