Belépés utáni átirányítás

Jenő képe

Bejelentkezéskor szeretném a felhasználót átirányítani egy bizonyos oldalra. Létrehoztam egy akciót, mely egy URL-re irányít át, majd a triggerrel felhasználói belépéshez kötöttem, de nem történik meg az átirányítás. Próbáltam a Login destination modult is, de azzal sem sikerült átirányítani a látogatót.
A triggert teszteltem más akciókkal is (üzenet tartalom bevitele után, átirányítás felhasználó létrehozásakor), melyek végre is hajtódtak, de a login utáni átirányítás az nem.
Két napja keresgélek az ügyben, ami leírást találtam és amennyire megértettem azt kipróbáltam, de biztos, hogy valami felett elsiklottam.
Mi miatt nem hajtódhat végre a bejelentkezés utáni átirányítás? Más eseményeket befolyásoló modul nincs használva.
Előre is köszönöm segítségeteket.

Melyik modulhoz, modulokhoz kapcsolódik a téma?: 
Drupal verzió: 
dj képe

egy minimodulban. Ez az xy számú node-ra irányítja:

<?php
 
function modulneve_user($op, &$edit, &$account, $category ) {
   if ($op == 'login')
      drupal_set_header("Location:/node/xy");
}
 
?>
0
0

Üdv!
Dudás József

Jenő képe

Kipróbáltam, a login-ra nem hajtódott végre, de pl. regisztrációra (register), adatlap megtekintésére (view) működött. ???

0
0
dj képe

már el van állítva nálad. Az akciókat és triggereket el kellene távolítani amit erre kreáltál. Ez működik, nem is ilyen formában, hanem regisztráció után az első belépést figyeli és akkor irányít egy bizonyos oldalra, de arra itt nem volt szükség.

http://api.drupal.org/api/function/hook_user/6

$op:
"login": The user just logged in.

0
0

Üdv!
Dudás József

Jenő képe

Több rendszeren is kipróbáltam - olyanon is, amelyik csak a csupasz alaprendszert tartalmazza - mindegyiken egyformán viselkedett.
Teszteltem localhoston és éles oldalon is, a helyzet ugyan az.
A modulba beleraktam két üzenetet is, hogy nézzem az if kiértékelését. Belépéskor az $op==login true lesz, de az átirányítást mégsem végzi el.
Itt már a pp által javasolt drupal_goto-t használva:

<?php
function loginrd_user($op, &$edit, &$account, $category) {
   drupal_set_message('LoginRd Modulban. ', $type, $repeat);
   if ($op == 'login') {
       drupal_set_message('Feltetel utan, goto elott. ', $type, $repeat);
	   drupal_goto('/node/2', $query, $fragment, $http_response_code);
	}
}
?>
0
0
pp képe

miért nem a drupal_goto függvényt használod erre? Mondjuk a modult nem árt a végére tenni, mert különben nem fut le a többi user_login hook.

De ha már ez akkor pedig:

function modulneve_user($op, &$edit, &$account, $category ) {
   if ($op == 'login')
      drupal_set_header('Location: '. url('/node/xy'));
}

de még inkább érdemes lenne belekukkantani a fenti függvénybe, az ugyanis ad még egy pár ötletet amit nem árt megvizsgálni.
0
0
dj képe

szálban amikor megoldást keresgéltem. Nálam működik. Majd kipróbálom a drupal_goto()-t is. Köszi!

0
0

Üdv!
Dudás József

Jenő képe

A weight érték állítására gondolsz?

Igazából azt nem értem, hogy a triggerel mindez miért nem működik, erre találták ki (többek között).

0
0
gazsesz képe

A Rules modul elvileg tudja ezt, de én is kipróbáltam és nálam sem működött, pedig kerek perec le van írva, hogy azt kell csinálnia...

0
0

Gazsesz

Jenő képe

Gondoltam a Rules modulra, de még várok a telepítésével. Elvileg az alaprendszerrel ennek mennie kellene.

0
0
Bálint képe

Egyszer találkoztam hasonló problémával, és úgy emlékszem, hogy akkor a $GLOBALS-ben volt valami destination, vagy ilyesmi, és ezért nem foglalkozott a drupal_goto()-val.

Csak egy tipp, de egy próbát megérhet. Nézd meg, mi van a $GLOBALS-ben print_r()-rel, vagy ha van fenn devel modul, akkor kpr() vagy dpr() a kényelmesebb.

0
0
Jenő képe

Megnéztem, nincs benne semmiféle destination. Köszi a javaslatot.

0
0
chx képe

jol mondja a kollega, csak a REQUEST tombbol kell torolni a destination-t.

  if (isset($_REQUEST['destination'])) {
    $destination = $_REQUEST['destination'];
  }

in drupal_goto.
0
0
Sweetchuck képe

A login blokk kényelmi okokból úgy van megcsinálva hogy bejelentkezés után az aktuális oldal jelenjen meg újra. (pl.: access denied oldalaknál nagyon jó)

Ha ezt szeretnéd kivenni belőle akkor a hook_form_alter() vagy a hook_form_FORM_ID_alter()-t kell használni, és a $form['#action']-t macerálni.
Ez után már talán működni fognak az rule|trigger modulok.
Ha nem, akkor próbálkozz egy saját $form['#submit][] = 'valami'; függénnyel.
De submit függvényben _nem_ használunk drupal_goto()-t. Fentebb már lett írva miért nem. (A többi modul submit kezelője nem fut le, és a core sem fejezi be rendesen az űrlap kezelést).
Helyette:
$form_state['redirect'] = 'node/1';

0
0
Jenő képe

Egyenlőre csak az első két mondatot értem :( A hiba az én "készülékemben" van. Ha otthonosabban mozgok majd a modulírás terén biztos megvilágosodik a dolog, de most még nem tudom, hogy ezeket hol és miként kellene "macerálni".
Modulokat próbálgatok, találtam is néhányat, melyek a bejelentkezéshez biztosítanak redirektet (Front Page, Splash+Condition). Végre is hajtják az átirányítást bizonyos esetekben. Ezeket a bizonyos eseteket itt most nem részletezem, inkább az utókornak jegyeztem meg, mint egy lehetséges alternatíva, ha ebben a témában keresnek.
Az teljesen világos, hogy a trigger+akciók páros _nem_hajtja_végre_ a bejelentkezéshez hozzárendelt átirányítást. Hiába ajánlja fel a rendszer, mint választható akciót, figyelmen kívül hagyja. Kb. 6 rendszeren (localhost, éles oldal, több gépen, alap Drupal, Acquia Drupal) próbáltam ki, egyiknél sem működött.

0
0
gazsesz képe

Ilyet találtam ni - de még nem próbáltam:
http://drupal.org/project/login_destination

This module controls where users go after logging in:

- "return them to last page they were on" - a special checkbox
or
- a static URL you provide
- internal drupal path
- external URL
- aliases work, query strings too. For anchors - submit an issue.
or
- your a PHP snippet that

0
0

Gazsesz

leonidasz képe

Csak az utókornak, igaz más fórumtémában benne van, de jó ha itt is meg van:

1.lépés: letöltöd: http://drupal.org/project/login_destination
2.lépés: felmásol, engedélyez
3.lépés: Felhasználó kezelés -> Login destination -> Redirection conditions (PHP snippet)
4.lépés: ezt beírod:

 global $user;
if ($user->uid) {
    return 'node/2 (vagy amit szeretnél)';
}

5.lépés: Destination URL settings (PHP snippet)
újra beírod a kódot
6.lépés: ez ne legyen bepipálva: Return user to where he/she came from. (Preserve destination)
7.lépés: Beállítások mentése

Persze a kódot már úgy egészíted ki hogy akarod :)

0
0
hosszu.kalman képe

Az alaprendszer tudja ezt, felesleges hozzá külső modul szerintem.

Bekapcsolod a trigger modult, a beállítási oldalán létrehozol egy redirect to URL action-t. Aztán elmész a triggerekhez, ott a user-nél kiválasztod login eseménynél a létrehozott redirect action-t és kész van.

0
0
leonidasz képe

Mindenre van több megoldás, hát erre pont nem gondoltam :(
Hamarabb megoldottam volna akkor...

0
0
Jenő képe

De nem hajtja végre az átirányítást. Innen indítottam a témát. Én is úgy gondolom, hogy alapból működnie kellene ennek a funkciónak, de valami miatt nekem egy rendszeren sem sikerült ezekkel az alapmodulokkal megoldani. Neked(nektek) működik csupán a triggerrel?

0
0
hosszu.kalman képe

Direkt kipróbáltam mielőtt beírtam és működött.

0
0
Bálint képe

A /user oldalon való belépésnél nincs gond, működik az actions+trigger, de a login blokkra nem fog a fent leírtak miatt.

0
0
hosszu.kalman képe

Nem is írtam hogy blokkból működik, hisz leírták hogy miért nem...

0
0
Bálint képe

Okés, nem is neked szólt leginkább, csak egyfajta pont akart lenni az egész végére.
Minden le van írva többször, aki ilyet akar csinálni, hajrá! ;)

0
0
leonidasz képe

Ezek után ne írjon senki fórumtémát ha belépés után át akarja irányítani a felhasználót egy node-re :)

Nem gondoltam volna, hogy még ennyien hozzászóltok a témához.

0
0
Jenő képe

Most már értem, eddig a login blokkon próbálkoztam.

0
0
gergely képe

A Rules modulhoz itt egy leírás (biztos működik pénteken csináltam egyet).
A Trigger core-hoz meg itt van egy leírás.
Esetleg még használható a LoginToboggan modul.

0
0

---
Tévedni mindenkinek szabad, csak a mérnöknek észre kell vennie.