A következőt szerettem volna megoldani:
Adott, cck-val készített node számát jogosultság-szerüen hozzárendelni egy egy adott felhasználóhoz. Ehhez létrehoztam egy sql táblát,
CREATE TABLE `storerole` ( `uid` int(11) NOT NULL, `nid` int(11) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
$user->srole = array(); $result = db_query('SELECT b.nid, b.field_inf_value FROM {storerole} s INNER JOIN {content_type_bolt} b ON s.nid = b.nid WHERE s.uid = %d', $user->uid); while ($s=db_fetch_object($result)) { $user->srole[$s->nid] = $s->field_inf_value; }
A lekérdezés és a kód jó, ha a devel modul, devel load funkció segítségével megnézem a saját felhasználói adataimat, akkor megjelenik:
newsletters
Array
(
[1697] => 1697
[176] => 176
[1696] => 1696
)
roles
Array
(
[2] => authenticated user
[3] => webadmins
[4] => workmates
[5] => partners
[6] => newsadmins
)
srole
Array
(
[1453] => jog 1
[1456] => jog 2
[1649] => jog 3
[1650] => jog 4
)
Ha ugyanezt egy oldalról hívom meg, $user->srole segítségével, nem ad vissza semmit, és a devel load nézet sem mutatja az értékeket... Hol rontotam el? Tipp?
Előre is köszi, ha tudsz segíteni!
Fórum:
A ?global $user?-t nem
A ?global $user?-t nem felejtetted el?
Aries
http://aries.mindworks.hu
nem felejtettem el a globalt :-)
Nem, igy szoktam ellenőrizni:
A teljes, módositott user_load függvény igy néz ki, a kiemelt sorok az ujak, ezeket több lehetséges helyre beszurva :-) is kipróbáltam, az eredmény mindig a fent leírt....
Még annyit, hogy a függvénynek ez a pontja nem mindig fut le, ezt tudom én is, de ha echot szúrok be, akkor látszik, hogy mikor hívódik meg, de az új role értékek akkor sem látszanak...:-(
Utóirat, másnap :-)
Egy megoldást találtam rá, bár nekem nem ez kellene, de hátha mást is érdekel:
Ezzel a megoldással az $user[data] értékéhez lehet az új értékeket adni...
Igazából az a kérdés, hogy a global $user objecthez melyik belépési ponton, melyik funkciónál kell hozzáadni a módosítást, mert az user_load nem vált be. (vagy valamit rosszul csináltam) Tipp?
www.tundus.hu
Saját modult kéne írni.
Miért nem írsz egy modult?
Kell egy .info fájl, meg egy .module fájl, aztán a .module fájlba meg a megfelelő hook.
pl.
http://api.drupal.org/api/5/function/hook_user
Én a helyedben nem a userhez, hanem a node-hoz adnék hozzá 1 mezőt. Amit kitaláltál rövid távon lehet jó, de belegondoltál abba, hogy mi lesz akkor amikor 1 userhez 1000 node tartozik? Erre az adatra mindig szükség van amikor egy user bejelentkezik? Nyílván nincs csak akkor amikor valamit csinálnak a node-al. -> form_alter és nodeapi hook kell neked szerintem.
pp
Palócz István
https://palocz.hu | https://tanarurkerem.hu
hook_user lesz a jó
Köszi a segítséget, a hook_user lesz a jó megoldás. Saját modult azért nem irok, mert ez a jog, role, nem a lekérdezésben szereplő node-hoz kötödik, az csak egy adathordozó. Másképp, a node-ok egy egy bolt nevei, ami mint adat és mint jogosultság is egyformán lényeges. Mivel bolt 20-30 van, felhasználó jóval több, ezért nekem célszerűbbnek látszott az uid, nid párosítás. Tovább bonyolítja a helyzetet, hogy a bolt hozzáférését akár az user is szabályozhatja... Mindegy, ezt már megoldom, most megnézem az user_hook-kal mire megyek.
Köszönöm a segítséget!
DTB
www.tundus.hu
Ne félj modult írni
Legalább próbáld meg!
Nem olyan nehéz!
"enmodulom" könyvtárba létrehozol egy enmodulom.info fájlt (nézz utána mit kell bele írni) valamint egy enmodulom.module fájlt, amibe beleteszel egy enmodulom_user függvényt. Ez lesz a hook_user megvalósítása. Máshogyan nem tudod használni a hook_user-t.
pp
Palócz István
https://palocz.hu | https://tanarurkerem.hu
Nem felek:-),
Nem, nem félek, már irtam modulokat, csak itt nem erről van szó.
Van egyetlen egy statikus oldal, ahova a bolti alkalmazottak egy sima form-on beküldenek adatokat, amiket csak a saját boltjában kell látni, illetve boltonként egy ember ezeket a beírásokat felülbírálhatja. Tehát ez a tartalom nem kötődik a drupalhoz, ezt csak muszály megcsinálni, mert a korábbi honlapon volt hasonló. A tartalom sem node-okba tárolódik, mert boltonként naponta 20-30 adatbeküldést csinálnak, ami alatt előbb utóbb összecsinálná magát az apache meg az sql.(normál, közös pc-n fut mindkettő) Tehát igazából nem tudom hirtelenjében, mihez kötném a modult.... mindenesetre átgondolom a jogosultság kezelést, és annak a megvalósítását még egyszer. Az alap-probléma, az "új role" látszik/nem látszik mindenesetre nem oldódott meg, nem tudtam rájönni, hogy mi a hiba.
Köszönöm a segítséget,
DTB
www.tundus.hu