$user objektum saját adatokkal

Patuzzi képe

Biztos láma kérdés nektek, de hogy tudok a $user objektumhoz saját adatokat tenni bejelentkezés után?
Mint pl. a csoporttagságok (stb.) is benne vannak...
Vagy feltenni session-be?

Ne kelljen mindig lekérdezgetni innen-onnan, amik elég statikus értékek.

Drupal verzió: 
eMeLA képe

Elvben a $user-ben minden olyan benne van, ami a felhasználóra vonatkozik. Mit is szeretnél még bele tenni ?

Egyébként ha jól sejtem, neked a hook_user() kell:
http://api.drupal.org/api/function/hook_user/6

0
0

...mit tudok: http://web.termuves.hu

aries képe

Ha csak belépéskor akarod frissíteni, akkor a $_SESSION-be tedd bele. A $GLOBALS['user'] globális változó, az oldal előállítása után elvesznek az értékei.

0
0
Patuzzi képe

Mind a két válasz bagyon sokat segített.
Eszembe sem jutott a hook_user, pedig...
A $user tényleg nem jó, mert elvesznek az értékei lefutás után.

Amit szeretnék: belépés után megjegyezni adatokat, amiket lehet használni a kilépésig, és elég statikusak (tehát nem változnak, amíg a user bent van)
A megoldás a kettő ötvözete:
hook_user($op,...)-nál $op=="login" esetén feltöltöm session-be az adatokat a session_write()-tal és olvasgatom menet közben session_read()-del.

Ide lehet tenni tömböket is?

0
0
tolmi képe

Előszöris a felvetésed Drupal része rendben van, így kell ezt megoldani. Ám a PHPs részével súlyos hiányosságok vannak azt hiszem.

Előszöris olyan hogy session_write() nincs sem a PHP-ben sem pedig a Drupalban. (mellesleg session_read() sincs). A session-t egy globális változó reprezentálja a PHP-ben, amelynek neve $_SESSION. Minden amit ebbe teszel (persze csak ha el van indítva a sessionkezelés, de ezt a Drupal megteszi helyetted automatikusan) az a futás végeztével megmarad és újra elérhető lesz a megadott session-ben egészen addig amíg a session le nem jár. (Olvass utána, hidd el megéri)

Mivel a $_SESSION egy PHP változó, ezért azt teszel bele amit akarsz. Így akár tömböt is. Arról azonban ne feledkezz meg hogy nem csak te használod a $_SESSION változót és ha felülírod más modulok adatait, meglepő dolgok fognak történni (főként rossz dolgok). Éppen ezért a $_SESSION egy tömbváltozó és a modul nevével prefixelni kell mindent amit beleteszel (namespacing egy barbár ám de hatékony módja).

Pl.:

$_SESSION['modulomneve'] = array(
  'egy' =>1,
  'kettő' => 2,
);
0
0

--
Tolmács Márk
Drupal bandita

Patuzzi képe

>olyan hogy session_write() nincs sem a PHP-ben sem pedig a Drupalban. (mellesleg session_read() sincs).
Én ezt találtam az api.drupal.org-on: http://api.drupal.org/api/function/sess_write/6, ami a SESSION táblába ír. Akkor most van vagy nincs? Legfeljebb elírtam a nevét.
És a Drupal tud tárolni adatokat ezekkel a függvényekkel a SESSION táblában.

Természetesen ismerem a $_SESSION tömböt, de nem akartam direkbe beleírni.

>(Olvass utána, hidd el megéri)
Természetes tisztába vagyok a session kezeléssel, nem kell egyből nekem esni, mert azt hittem találtam egy megfelelő fv-t az adatok tárolására (ami lehet, hogy igaz is)

De azért a választ!

0
0
tolmi képe

Én ezt találtam az api.drupal.org-on: http://api.drupal.org/api/function/sess_write/6, ami a SESSION táblába ír

Egyrészt igen, elírtad a nevét. Másrészt eszembe sem jutott hogy a sess_write-ra gondolsz, mert az egy internal Drupal függvény és SOHA ne használd, mert az az EGÉSZ session data tömbre vonatkozik (Erre akár magad is rájöhettél volna ha megnézed az általad linkelt oldalon a forráskódját). Ez nem az amit te akarsz. A Drupalnak nincs a $_SESSION felett absztrakciója, használd a $_SESSION tömböt az általam leírt szabályok szerint és nem lesz gond vele.

nem kell egyből nekem esni

Ki esett neked? Mivel pontatlanságokat írtál ezért feltételeztem hogy kezdő vagy és igyekeztem olyan módon leírni a választ hogy azt egy kezdő is megértse. Ha ez neked degeneráló, az ellen én nem tudok sokat tenni. Nem szégyen kezdőnek lenni.

De azért a választ!

?! Mi van a válasszal? :)

0
0

--
Tolmács Márk
Drupal bandita

aboros képe

de az nem derogáló a degeneráló helyett? 1-1 kiegyezhetnétek itt egy döntetlenbe ;)

0
0

-
clear: both;

tolmi képe

Jogos, de mostmár álljon itt hogy nem beszél magjar rendsen. Sorry, tényleg derogáló, lealacsonyító kifejezést akartam használni.

Amúgy meg nem vita ez, nincs miben kiegyezni, csupán leírtam hogy félreértés volt. Off.

0
0

--
Tolmács Márk
Drupal bandita

Patuzzi képe

Igen, inkább kezdőnek érzem magam, mint haladónak.

>De azért a választ!
Kimaradt a "köszönöm", helyesen:
De azért köszönöm a választ!

Tanácsot megfogadom, a $_SESSION tömböt fogom használni a leírt szabályok szerint (pl. modulnév prefix-szel)

De tényleg nagyon jó ez a Drupal közösség, mindenre kapok választ néhány órán belül.

0
0
Paal képe

De tényleg nagyon jó ez a Drupal közösség, mindenre kapok választ néhány órán belül.

Hehe, ezt nem mindenki gondolja így! :)

0
0

--
Palócz Paal Pál, a drupal.hu admin csoportjának tagja
Ajánlott olvasmány: Eric Steven Raymond - Hogyan kérdezzünk okosan

Patuzzi képe

Sajnos mindenhol vannak nem oda- (ide-) való személyek.
Ha belegondolunk itt minden ingyenes és mindenki tényleg szabadidejéből vesz el, ha segít másokon...

De ez már OFF volt a modulfejlesztés témában, hacsak nem írunk rá egy moderáló modult... :-)

0
0