egyszerű php script futtatása drupal user azonosítással

batto képe

Előre is elnézést kérek a nagyon kezdő kérdéseimért, lehet anyázni, de jobban örülnék ha segíteni tudnátok. Sok témát átnéztem az oldalon és rákerestem de sajnos nem lelem a választ.

Szóval adott egy php script, amit menüvel érnek el bizonyos drupal userek eddig ez oké!
De azt szeretném, hogy a közvetlen link megadásával (pl: drupalportal.hu/phpscript.php) is csak azok a felhasználók tudják futtatni, akik be vannak bejelentkezve a portálra! Tehát egy egyszerű feltétel teljesüléséhez szeretném kötni, (pl.: ha a usernév <> "") hogy lefusson-e a script vagy se.
Látjátok, hogy nagyon kezdő vagyok, most ismerkedem a drupallal. de kérlek segítsetek, hogy hogy adjam meg ezt a feltételt!

Köszönettel: Dorottya

Fórum: 
aboros képe

ha a drupal beépített függvényeit szeretnéd használni, írd a következőt a phpscript elejére:

include_once './includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

ezután minden beépített függvényt használhatsz a szkriptben, ezért ha jól gondolom, azt is le tudod kérdezni, hogy van e belépett felhasználó és ha igen, ki az.
szóval, ha jól gondolom, a fenti sorok után működnie kell egy ilyen ellenőrzésnek:
if ($user){

(valaki szóljon közbe, ha rosszul gondolom légyszi, szeretnék tanulni ebből én is;)

0
0

-
clear: both;

batto képe

include_once './includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
 
if ($user){
print "be vagy jelentkezve!";}
else{
print "nem vagy bejelentkezve!";}
}

A fenti script mindkét esetben (ha be van jelentkezve ha nincs) a be vagy jelentkezve! üzenettel tér vissza!

Ez mitől van?

Különben köszönöm szépen!

0
0

Dorottya

crt képe

Szia.

Eggyel több kapcsos zárójeled van. A feltétel elé egy global $user; még kell, valamint ha nincs szükséged az összes drupal komponensre, akkor célszerű csak azokat betöltögetni a bootstrap-el, amik kellenek. A bootstrap.inc fájlban megtalálod ezeket.

Üdv: Zoli

0
0
batto képe

Igen, köszönöm a zárójelet én is észrevettem és javítootam!

Most akkor itt tartok:

include_once './includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
 
global $user;
 
if ($user){
print "Be vagy jelentkezve!";}
else{
print "Nem vagy bejelentkezve!";}

De ismét csak a Be vagy jelentkezve jön ki eredményül mindkét esetben!

:-(

0
0

Dorottya

batto képe

Közben kiirattam a $user értékét, ha be van jelentkezve akkor "Object id #1" ha nincs akkor "Object id #2".

Ezek után próbáltam ezt (és most kéretik nem röhögni!) :

include_once './includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
 
if ($user="Object id #1"){
print "Be vagy jelentkezve!";}
else{
print "Nem vagy bejelentkezve!";}

De itt is csak azt írja ki, hogy "be vagy jelentkezve!"

:(

0
0

Dorottya

pp képe

Engedd meg, hogy kijavítsam ezt az igen érdekes kódot ;)

if($user == "Object id #1")

Szóval két egyenlőségjel az az egyenlőség vizsgálat, az egy az értékadás ;)

Más:
- Érték kiíratása print_r, vagy var_dump, hogy lásd is mi van a tömbben és mi az object-ben.
- Drupalban meg mindig van $user objektum.
- Global csak akkor kell, ha függvényen belül vagy. (a te gányolós megoldásod az egyetlen olyan eset amikor nem kell ;))
- $user->uid ami megmutatja neked, hogy mi az azonosítója a júzernak.

pp

0
0
batto képe

Köszönöm szépen a segítséget!

Ígérem, hogy fél év múlva már megtanulom a php-t és a drupal-t is, de csak pár napja kezdtem el vele foglalkozni (mindkettővel) és amint azt te is jelezted még igen csak az elején tartok.

0
0

Dorottya

Anonymous képe

Én ezt használom:

global $user;
if($user['uid']>0){
...
}

lehet, hogy nem elég "drupálos", de működik.
Nézd meg a user tömböt:
print_r($user);

0
0
batto képe

Kipróbáltam, de ezt írja: Fatal error: Cannot use object of type stdClass as array in .....

Mit csináltam rosszul?

0
0

Dorottya

Anonymous képe

Bocsi, $user->uid akart lenni, mert egy osztály tulajdonságra vagyunk kiváncsiak.

0
0
batto képe

Nekem is leeshetett volna!

Köszönöm szépen tőkéletesen működik!

0
0

Dorottya

Fabio képe

Meghívtam AJAX-szal egy különálló oldalt egy alkönyvtárban és a user bejelentkezettségét akartam azonosítani ezen a módon. Sokat debuggoltam, amíg rájöttem, hogy a fenti módon az azonosítás csak akkor megy, ha a drupal root-jában van a meghívott oldal. Ennek az oka, hogy a session cookie azonosítóját a Drupal az URL-ből hozza létre és kódolja md5-tel. Igy egy node és az alkönyvtárból meghívott php oldal más sessionID-t és a meghívott oldal anonymous userként látszik.

Megoldás:
a root könyvtárba egy interface.php és abból include-dal lehet hívni az eredeti oldalt.
Kicsit gány, de így megy.

Drupal 5.8

0
0

Fábián Zoltán
www.fzolee.hu

mooray képe

Egy módja annak, hogy felhasználónként tudjunk elágaztatni egy scriptet:

include_once './includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
global $user;
 
if ($user -> name=="belabacsi")
{
echo "üdvözlöm Bélabá!";
}
else
{
echo "Helló!";
}
0
0
pp képe

És ha belabacsi átírja a nevét bélabácsira akkor borul a kódod. Én maradnék az uid-nál.

pp

0
0
mooray képe

Igazad van, de mikor ezt leírtam, akkor a fórum elején feltett kérdésre próbáltam válaszolni, és ott az volt a kívánalom, hogy a usernév legyen vizsgálva a feltételben.

0
0