Joomla.it Forum

Non solo Joomla... => Sviluppo => : lucsound 25 Feb 2014, 00:22:46

: JFactory::getUser() all'interno di un file componente di amministrazione
: lucsound 25 Feb 2014, 00:22:46
Ciao.
Ho bisogno di determinare l'id di un utente online nel sito in un file php di un componente.
Questo file si trova nella cartella administrator e gestisce i salvataggi dei file.

Ho provato con:

$utente = JFactory::getUser(); // in base utente collegato
$utenteusername = $utente->get('username');
$utenteid = $utente->get('id');

inserendo questo codice all'interno del file php che salva i file ma purtroppo non funziona.
in altri file php del mio template funziona benissimo ma in questo file lato amministrativo no.
Come posso fare??  :o :(




: Re:JFactory::getUser() all'interno di un file componente di amministrazione
: sudoku 25 Feb 2014, 00:43:39
domanda ignorante: a che ti serve?
: Re:JFactory::getUser() all'interno di un file componente di amministrazione
: lucsound 25 Feb 2014, 10:32:30
Perché voglio impostare il salvataggio di un file in una cartella che Contiene l id dell utente collegato.
Senza quella variabile non funzionano bene le modifiche che ho fatto al componente.
Qualche soluzione??
: Re:JFactory::getUser() all'interno di un file componente di amministrazione
: lucsound 25 Feb 2014, 18:47:28
nessuno può aiutarmi?

 :( :( :(
: Re:JFactory::getUser() all'interno di un file componente di amministrazione
: simone83 26 Feb 2014, 09:34:30
Non è che sia molto chiaro quello che hai fatto.

Hai sviluppato un componente?
Questo file php che ti dovrebbe salvare dove si trova di preciso? Come lo richiami?

Perche parli di componente e poi di template?

Le tre righe che hai scritto sono giuste, ma dipendono dal contesto in cui si trovano
: Re:JFactory::getUser() all'interno di un file componente di amministrazione
: lucsound 26 Feb 2014, 09:57:22
Il componente non é stato creato da me. Si tratta di un componente per annunci.
Il file.in questione si trova nella cartella administrator e viene richiamato per il salvataggio delle info.
Li io voglio inserire quella variabile in base all utente collegato ma non funziona.

Con template volevo indicare che quell codice funziona su tutti i file dove l ho provato ma non su quel file importante.
Devo inserire altro codice per farlo funzionare??
: Re:JFactory::getUser() all'interno di un file componente di amministrazione
: simone83 26 Feb 2014, 10:05:57
Si ok, come viene richiamato?

ha provato a mettere un echo sui dati e poi un die per vedere se viene realmente eseguito.

Puo anche essere che sei uscito da joomla e sia un php  a se.

Come ti ho gia detto in un contesto adeguato quelle 3 righe sono giuste, ma non è che solo quelle ti fanno tutto. Dopo c'e da salvare i dati e quelli non si sa come li salva

E' come cercare un ago in un pagliaio per un'altro utente. Ma parti dal presupposto che il problema non sta in quelle 3 righe
: Re:JFactory::getUser() all'interno di un file componente di amministrazione
: lucsound 26 Feb 2014, 10:28:47
Cerco di spiegare meglio.

Il componente è ads manager. L'utente entra nel sito, inserisce i dati e conferma.
Viene attivato il file contents.php che si trova dentro la cartella administrator. Questo file gestisce i salvataggi in base alla tipologia di input. Per le immagini il percorso dovrebbe essere legato in base all'utente online nel portale che ha inserito l'annuncio.
Attualmente la variabil per il salvataggio è l'user id salvato dal componente nel database; questo funziona bene ma solo se l'utente va a modificare l'annuncio, perchè se lo crea da zero naturalmente l'id utente salvato nel database non esiste.
Io vorrei invece sostituire quella variabile con l'utente collegato, così da farlo funzionare praticamente sempre.

C'è qualche soluzione?  :(

: Re:JFactory::getUser() all'interno di un file componente di amministrazione
: simone83 26 Feb 2014, 12:04:35
non ho mai usato questo componente, ma l'ho scricato ed usa il mvc bene, prova a guardarti il file content.php nella cartella tables nell'admin, sicuramente troverai li dove andare amodificare
: Re:JFactory::getUser() all'interno di un file componente di amministrazione
: lucsound 26 Feb 2014, 12:09:04
Si il file l ho modificato ma non riconosce quelle 3 righe di codice importanti per l id user collegato.
Non so proprio cone risolvere.
: Re:JFactory::getUser() all'interno di un file componente di amministrazione
: simone83 26 Feb 2014, 12:12:31
Che funzione hai modificato e come
: Re:JFactory::getUser() all'interno di un file componente di amministrazione
: giovi 26 Feb 2014, 12:13:43
$utente = JFactory::getUser(); // in base utente collegato
$utenteusername = $utente->get('username');
$utenteid = $utente->get('id');

[...]in altri file php del mio template funziona benissimo ma in questo file lato amministrativo no.
Funziona davvero?


Io di solito uso:
:
$utente = JFactory::getUser();
   echo 'ID  : ' . $utente->id . '<br />';
  echo 'User name: ' . $utente->username . '<br />';
  echo 'Nome: ' . $utente->name . '<br />';
: Re:JFactory::getUser() all'interno di un file componente di amministrazione
: simone83 26 Feb 2014, 12:40:53
Certo che funziona, ed è anche l'approccio migliore, evita che si generino errori nell'accedere a proprieta che non esistono.

Deriva da JObject

:
public function get($property, $default = null)
    {
        if (isset($this->$property))
        {
            return $this->$property;
        }
        return $default;
}

Ed è la stessa cosa di fare $utente->username ecc
: Re:JFactory::getUser() all'interno di un file componente di amministrazione
: lucsound 26 Feb 2014, 19:57:12
Ho provato ad inserire anche la seconda variante, $utente->id,  ma purtroppo non funziona.
Aiuto..  :(
: Re:JFactory::getUser() all'interno di un file componente di amministrazione
: mmleoni 26 Feb 2014, 21:37:04
come ti ha suggerito simone83:

$utente = JFactory::getUser();
print_r($utente);
die();

e vedi che cosa succede, se non succede niente è facile che il codice non sia eseguito.

ciao

: Re:JFactory::getUser() all'interno di un file componente di amministrazione
: lucsound 26 Feb 2014, 22:57:31
Putroppo non va.
Ho definito $utente = JFactory::getUser();

e nel percorso per il salvataggio del file print_r($utente);

Ma no va..
: Re:JFactory::getUser() all'interno di un file componente di amministrazione
: mmleoni 27 Feb 2014, 07:58:08
se il die() non blocca l'esecuzione del programma vuol dire che il flusso non passa da lì....
non è che per caso sai usare un debugger?
ciao

: Re:JFactory::getUser() all'interno di un file componente di amministrazione
: lucsound 27 Feb 2014, 09:43:40
Se inserisco il die mi genera un errore nella fase di salvataggio.
Per questo l ho tolto ma.non va purtroppo...
: Re:JFactory::getUser() all'interno di un file componente di amministrazione
: simone83 27 Feb 2014, 09:58:26
il die non ti genera di certo errore ti blocca solo l'esecuzione. Se te la blocca e vedi che c'e un errore nel salvataggio all'ora hai gia ottenuto qualcosa vuol dire che hai sbagliato ma purtroppo noi ti possiamo aiutare fino ad un certo punto
: Re:JFactory::getUser() all'interno di un file componente di amministrazione
: lucsound 27 Feb 2014, 10:52:56
Mi blocca l esecuzione. Credo che non risolverò mai
: Re:JFactory::getUser() all'interno di un file componente di amministrazione
: simone83 27 Feb 2014, 10:54:16
bene vuole dire che passa di li, in quale file e funzione lo hai inserito?
: Re:JFactory::getUser() all'interno di un file componente di amministrazione
: lucsound 27 Feb 2014, 14:42:13
il file è sempre quello, contents.php.

All'interno di:
class AdsmanagerTableContents extends JTable{

la funzione è:
function bindContent($post,$files,$conf,$model,$plugins)    {ecc

all'interno del ciclo for dove vengono definiti i vari campi e la loro tipologia
foreach($fields as $field)        { ecc

: Re:JFactory::getUser() all'interno di un file componente di amministrazione
: simone83 27 Feb 2014, 15:25:55
ok, dove hai provato a mettere quelle 3 righe che avevi scritto ll'inizio? e come le stavi provando ad utilizzare
: Re:JFactory::getUser() all'interno di un file componente di amministrazione
: lucsound 27 Feb 2014, 15:51:53
le mie tre righe cioè:
$utente = JFactory::getUser(); // in base utente collegato
$utenteusername = $utente->get('username');
$utenteid = $utente->id;
le ho inserite all'inzio del file.

Poi all'interno di
else if ($field->type == "file")    {

ho aggiunto un altro if per selezionare un determinato campo
if ($field->name == "nomemiocampofile") {

e all'interno del percorso del file di salvataggio ho richiamato la variabile $utenteid

: Re:JFactory::getUser() all'interno di un file componente di amministrazione
: mmleoni 27 Feb 2014, 16:18:15
non è  che quelle righe si trovano al di fuori del metodo che le usa?
se hai definito la variabile al di fuori del metodo devi definirla come proprietà della classe ($this->utente) per potervi accedere al di fuori dell'ambito in cui è definita, se la hai definita al di fuori della classe non puoi accedervi...

ciao,
marco

: Re:JFactory::getUser() all'interno di un file componente di amministrazione
: lucsound 27 Feb 2014, 17:30:34
Ho fatto le modifiche con $this->utente e non funziona.

Ho inserito le tre righe dentro if ($field->name == "nomemiocampofile") {
e non funziona nemmeno
: Re:JFactory::getUser() all'interno di un file componente di amministrazione
: mmleoni 01 Mar 2014, 08:31:10
ovviamente $this->utente era solo l'indicazione del formato di una proprietà, non una formula magica, quindi andava dichiarato ed inizializzato prima di poter essere usato.


mi sembra strano che il codice di recupero utente non funzioni all'interno di una classe nel framework di joomla.


scusa la domanda molto diretta, ma hai una minima idea di che cosa stai facendo o stai andando assolutamente a caso?
ovvero hai qualche conoscenza di programmazione?


ciao
: Re:JFactory::getUser() all'interno di un file componente di amministrazione
: lucsound 01 Mar 2014, 09:30:40
Ragazzi ho risolto. Dopo posterò la soluzione
: Re:JFactory::getUser() all'interno di un file componente di amministrazione
: lucsound 01 Mar 2014, 12:32:37
Ho risolto con...

$utente = JFactory::getUser(); // in base utente collegato
$utenteusername = $utente->get('username');
$utenteid    = (int) $utente->get('id');

Navigando tra i vari file php dell'amministrazione ho visto come l'id user veniva richiamato in questo modo e con una piccola modifica ho risolto!
: Re:JFactory::getUser() all'interno di un file componente di amministrazione
: mmleoni 01 Mar 2014, 13:41:49
non c'è alcuna differenza tra questo codice e quello postato all'inizio a parte il fatto che $utenteid ora è un intero invece che, probabilmente, una stringa, e se l'id ti serve per il nome della directory devi effettuare nuovamente il cast a stringa.
l'errore era, a mio avviso, da un'altra parte.


ciao