Joomla.it Forum
Non solo Joomla... => Sviluppo => : playpaf 11 Apr 2012, 00:02:47
-
Ciao,
ho creato un plugin che al login mi crea uan cartella con l'ID. Questa è la funzione che ho creato:
function onLoginUser() {
$app = &JFactory::getApplication();
$user = JFactory::getUser();
if ($user->id!=null) {
mkdir('./images/contents/'.$user, 0744);
return true;
} else {
return false;
}
}
solo che quando faccio il login, non succede nulla. Qualcuno sa darmi qualche suggerimento?
La mia idea è di creare un plugin che al primo accesso mi crea la cartella con nome ID dell'utente (in modo da essere sicuro che sia univoco).
Grazie 1000 per l'aiuto!!!
Salvo
-
non capisco il senso di quello che vuoi fare puoi spiegarmi meglio?
è chiaro che l'ID utente è univoco :o
-
in pratica devo creare una cartella per ogni utente registrato. la mia idea è: quando l'utente accede, viene creata la cartella in "path/ID" (con ID che è un numero univoco). Utilizzo l'id proprio per la sua univocità.
Ho creato il plugin e installato senza problemi, ma quando faccio il login non succede nulla, la cartella non viene create e non trovo nessun codice di errore.
Grazie per la'iuto.
Salvo
-
...quindi io accedo mille volte e tu ti trovi 1000 cartelle... buona idea!
M
-
ovviamente non è un'idea giusta... ;)
però se funziona devo solo associarlo all'evento di registrazione di un'utente. Hai qualche suggerimento da darmi? :)
Grazie
Salvo
-
http://docs.joomla.org/How_to_use_the_filesystem_package#Create_folder (http://docs.joomla.org/How_to_use_the_filesystem_package#Create_folder)
-
quindi basta eliminare la riga "mkdir('./images/contents/'.$user, 0744)" e inserire "JFolder::create(./images/contents/'.$user->id, 0744)", giusto???
grazie
Salvo
-
assolutamente no
...quindi io accedo mille volte e tu ti trovi 1000 cartelle... buona idea!
prima devi almeno controllare che la cartella non esista già
-
bene, vedo che ho capito tutto... ;D
allora come dovrei fare? poi a quale evento dovrei associare il plugin?
grazie
salvo
-
/'.$user, 0744)"
-------------------------
anche qs lo vedo male.. se l'user è: ?*pippo?* ... come la crei una cartella così?
dovresti codificare tutto, magari md5 o creando un algoritmo.
poi è possibile fare un gioco che su alcuni sistemi crea problemi nominando la cartella .php, basta che io sia l'user pippo.php
comunque è tutto nel link sopra ciò che vuoi sapere,... per l'evento... la registrazione o la conferma se esiste, non so se esiste il trigger, però lo puoi creare.
...poi ... mi divertirei a provare che succede se l'user fosse pippo,0777)/* ...... sai che mi stimolano i tuoi script? :):)
M.
-
$user è un oggetto, basta fare "$user->id" per avere l'id univoco associato all'utente.
Infatti pensavo di fare: If(user!=null) then {"crea cartella"} con JFolder.
Stasera dò un'occhiata al link che mi hai passato e ti faccio sapere.
Ciao e grazie
Salvo
-
Ho provato con questa funzione:
function onUserLogin() {
$app = &JFactory::getApplication();
$user = JFactory::getUser();
$mode = 0744;
if ($user->id!=null) {
$path = JPATH_SITE . "/images/content/" . $user->id;
JFolder::create($path);
return true;
} else {
$path = JPATH_SITE . "/salvo";
JFolder::create($path);
return false;
}
}
ma non succede nulla. Qualche idea???
Grazie
Salvo
-
$mode = 0744;
------------------------
cosa ti serve?
M.
-
un plugin che quando un utente si registra al sito, crea una cartella in un determinato path e che ha come nome l'ID dell'utente. Questo perché l'utente carica dei file (immagini, etc...) in uno spazio dedicato!
Grazie per l'aiuto
Salvo
-
no, cosa ti serve $mode se poi non lo usi
e app ? perchè la istanzi? se nn ci fai nulla non fa nulla da sola
M.
-
qpp non mi serve, è un copia e incolla di troppo, mentre mode lo uso l'ho tolto solo per capire se il problema era quella variabile, ma mi sbagliavo!
-
nel file xml di installazione lo hai definito come plugin di tipo 'user' ?
-
Si. E' corretto l'evento "onUserLogin" ???
-
nessun suggerimento?
-
Prova così:
sostituisci
onUserLogin()
con
onUserLogin($user, $options = array())
e recuperi l'ID dell'utente così:
if ($uid = intval(JUserHelper::getUserId($user['username'])))
-
ok, grazie! Stasera lo provo.
Volevo anche chiederti quale è l'evento di registrazione di un nuovo utente?
Nella funzione ho messo "onLoginUser" per fare una prova, ma se volessi cambiare e associarlo all'evento di iscrizione di un nuovo utente che nome devo dare? è sempre di tipo user?
Grazie
Salvo
-
Purtroppo non funziona...
Altri suggerimenti? Aiutoooooo!!!
-
..secondo me stai andando a caso... ma hai fatto il pacchetto... installato il plugin... attivato... usato lo standard joomla per i nomi etc?
M.
-
Premesso che è il mio primo plugin, credo che sto facendo tutto quello che mi hai detto. Ti incollo il file xml:
<?xml version="1.0" encoding="iso-8859-1"?>
<install version="2.5" type="plugin" group="user">
<name>Creare cartelle al 1° login utente</name>
<author>Salvo</author>
<creationDate>April 2012</creationDate>
<copyright>(C) 2005 Open Source Matters. All rights reserved.</copyright>
<license></license>
<authorEmail>XXXXXXX</authorEmail>
<authorUrl>XXXXXXX</authorUrl>
<version>1.0</version>
<description>Allows searching of Categories information</description>
<files>
<filename plugin="contentCreateFolder">contentCreateFolder.php</filename>
</files>
<params>
</params>
</install>
viene installato senza problemi e dal pannello di amministrazione riesco ad accederci senza erroro. Però, quando faccio il login, non crea nessuna cartella!!!
-
Mentre il PHP completo è questo:
<?php
// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );
// Import library dependencies
jimport('joomla.plugin.plugin');
class plgUserCreateFolder extends JPlugin {
//function plgContentCreateFolder( &$subject, $config ) {
function plgUserCreateFolder( &$subject, $config ) {
parent::__construct( $subject, $config );
}
//function onBeforeDisplayContent() {
//function onLoginUser() {
function onUserLogin($user, $options = array()) {
//$user = JFactory::getUser();
$mode = 0744;
$user_id = (int)$user['id'];
//if ($user->id!=null) {
if ($uid = intval(JUserHelper::getUserId($user['username']))) {
$path = JPATH_SITE . '/images/content/' . $user_id;
JFolder::create($path);
return true;
} else {
$path = JPATH_SITE . '/salvo';
JFolder::create($path);
return false;
}
}
}
?>
Grazie per l'aiuto!!!
-
Ho fatto una prova inserendo questa parte di codice:
$user = JFactory::getUser();
$user_id = $user->id;
if ($user_id!=null) {
$path = JPATH_SITE . '/images/content/' . $user_id;
JFolder::create($path);
return true;
} else {
$path = JPATH_SITE . '/salvo';
JFolder::create($path);
return false;
}
durante l'inserimento di un annuncio e funziona regolarmente, quindi il problema è che non viene richiamato il plugin nel modo corretto. Sai indicarmi se ho fatto qualche errore nella configurazione?
Grazie 1000!
-
che cos'è e cosa fa?
function plgUserCreateFolder( &$subject, $config ) {
parent::__construct( $subject, $config );
}
-
Onestamente non lo so, ho copiato da un altro plugin trovato in rete, cosa ho sbaglioto?
grazie
Salvo
-
Idee?
Grazie
Salvo
-
Idee?
--------
beh si, ... studia. Aiutarti a farlo o darti dritte è un conto, farlo un'altro.
M.
-
Non mi sembra di aver mai scritto, puoi farmi il plugin? Ho sempre chiesto dei suggerimenti che ho riprodotto, ma purtroppo non hanno funzionato.
Continuerò a cercare come risolvere il problema...
Ciao e grazie
Salvo
-
Controlla che i nomi della classe, dei file e della definizione del nome del plugin nel file xml siano tutti uguali.
qui
if ($uid = intval(JUserHelper::getUserId($user['username']))) {
$path = JPATH_SITE . '/images/content/' . $user_id;
ovviamente dovrebbe essere così se non era un refuso del tuo copia e incolla
if ($uid = intval(JUserHelper::getUserId($user['username']))) {
$path = JPATH_SITE . '/images/content/' . $uid;
questo cos'è? questo ti produce un errore,
$user_id = (int)$user['id'];
e cava anche sta roba come ti ho già detto
$user = JFactory::getUser();
$user_id = $user->id;
se avessimo già l'id in $user non servirebbe questo no?
JUserHelper::getUserId($user['username'])
controlla di aver scritto tutto bene, di aver fatto tutte le modifiche che ti abbiamo detto e vedrai che ti funziona
-
Volevo anche chiederti quale è l'evento di registrazione di un nuovo utente?
Nella funzione ho messo "onLoginUser" per fare una prova, ma se volessi cambiare e associarlo all'evento di iscrizione di un nuovo utente che nome devo dare? è sempre di tipo user?
puoi fare riferimento a questa pagina:
http://docs.joomla.org/Plugin/Events (http://docs.joomla.org/Plugin/Events)
tenendo conto che alcuni eventi sono stati rinominati, qui puoi vedere quali:
http://docs.joomla.org/Adapting_a_Joomla_1.5_extension_to_Joomla_1.6#Renamed_Events (http://docs.joomla.org/Adapting_a_Joomla_1.5_extension_to_Joomla_1.6#Renamed_Events)
ciao
-
Sono riuscito a creare il plugin e a far creare la cartella sul mio PC in locale. Se metto il plugin sul sito online e provo ad accedere, la pagina del browser rimane bianca (al momento non ho verificato se crea la cartella, ora non posso controllare), dovrò fare delle verifiche.
Credo di aver dimenticato di dire che la versione di Joomla utilizzata è la 2.5!
Ciao e grazie.
Salvo