Rules: átirányítás bejelentkezés után, hacsak nem egyszeri linkről érkezünk
A Drupal alaprendszer a /user oldalon való bejelentkezés után a saját profil oldalunkra irányít. A login blokk használatakor pedig arra az oldalra kerülünk vissza, ahol bejelentkezés előtt voltunk.
Időnként azonban szükség lehet arra, hogy a felhasználót egy általunk meghatározható útvonalra tereljük bejelentkezés után. Mi sem egyszerűbb: bevethetjük pl. a Login Destination vagy a LoginToboggan modulokat. Ha azonban egyébként is használjuk a Rules modult, nincs szükség az előbbiekre. Pillanatok alatt összekattinthatunk egy átirányítást. Azonban az egyszeri bejelentkezés működésben tartsa már kicsit izgalmasabb. Haladjunk sorjában!
A Rules rule létrehozása
Egy rule három fő összetevőből áll(hat). Esemény(ek)ből (Events), feltétel(ek)ből (Conditions) és művelet(ek)ből (Actions). A példánkban: Events = User has logged in
– vagyis amikor a felhasználó bejelentkezett… –, Actions = Page redirect, Parameter: URL ahova/atiranyitom
– …irányítsuk át az ahova/atiranyitom oldalra!
Az átirányítást ezzel le is tudtuk, már csak az egyszeri bejelentkezés működést kell megoldanunk.
Feltétel hozzáadása
Itt lehet eltévedni! Első lépésben a egy legördülő mezőből (Select condition to add) kell kiválasztanunk a feltételt. „Józan paraszti ésszel” azt gondolhatjuk, hogy a Path csoport két lehetséges értéke közül közül kell valamelyiket választanunk. A második lehetőség (URL alias exists
) elég „gyanús”, legyen az!
Nézzük a lehetséges behelyettesítési mintákat (Replacement patterns): hohó, hát itt is van nekünk az [account:one-time-login-url]
token! Sínen vagyunk. Kiválasztjuk, hozzáadjuk, mentjük és kész, működik, hátradőlhetünk! Hát, sajnos nem.
Hogy miért nem, nem tudom, nem jártam utána. Azonban némi keresgélés után a drupal.org Rules issue-i közül előkerült a működő megoldás. Íme.
Condition: Text comparison
Data selector: site:current-page:path
Matching text value: user/reset
Comparison operation value: contains
Negate: checked (kipipálva)
Magyarul: nézzük meg az aktuális oldal útvonalának szövegét, hogy ne(!) tartalmazza a user/reset
értéket. Ha ez teljesül, akkor lehet végrehajtani az átirányítást. Ez működik.
Most lehet hátradőlni! :o)
PS: Az exportált rule így néz ki:
<br></br>{ "rules_login" : {<br></br> "LABEL" : "Login",<br></br> "PLUGIN" : "reaction rule",<br></br> "TAGS" : [ "User" ],<br></br> "REQUIRES" : [ "rules", "path" ],<br></br> "ON" : [ "user_login" ],<br></br> "IF" : [<br></br> { "NOT text_matches" : { "text" : [ "site:current-page:path" ], "match" : "user\/reset" } }<br></br> ],<br></br> "DO" : [ { "redirect" : { "url" : "frontpage" } } ]<br></br> }<br></br>}<br></br>