Egyedi események megadása rules modullal

gery77 képe

Sziasztok,
Vázolom gyorsan a problémát, aztán, hogy hogyan próbálkoztam eddig - sajnos sikertelenül - megoldani.
Egy egyszerű felépítésű oldalnál kell megoldanom, hogy egy oldalt láthatatlanná kell tennem az azonosítatlan látogatók elől. Vagyis így nem teljesen igaz a dolog, mert ebben az esetben egy leírást kell kitennem ugyanerre az oldalra, hogy mit kell tennie ahhoz, hogy ő is lássa a rejtett tartalmat.
A rules modul mellett döntöttem, elég sokat olvasgattam és ez lehet a megoldás.

Végig gondoltam, hogyan kellene létrehozni a feltételt, hogy minden felhasználónak kiírjon valamit, illetve akinek van jogosultsága az lássa az oldalt.

Triggered rulesen belül létrehoztam az új szabályt, de úgy gondolom a beállításokkal rontottam el valamit, mert nem működik.

Fő eseményként a User is going to view a page választottam, mert azt akarom, hogy ha egy nem jogosult megnézi az oldalt, akkor legyen átirányítva egy másik oldalra.

Röviden leírom a feltételt, de szerintem ezt építettem fel rosszul, illetve több módon is lehet, ha a negálásokkal is játszunk.

IF
AND GROUP

Path alias(es): itt megadtam az oldal linkjét, amit csak a regisztráltak láthatnak
AND
User has role(s): itt kiválasztottam a névtelen látogatót, hogy ha azon az oldalon van és nem regelt, akkor érvényesüljön a szabály

DO

Page redirect: itt pedig a linket adtam meg, amire át kell irányítani a névtelen látogatókat

Nem akarom nagyon hosszúra húzni, nem tudom, hogy ennyi beállítás elég-e, vagy esetleg alapbeállításokon is módosítani kell-e. Aki eddig megértette, az gondolom tud nekem segíteni. Végig gondolva nem tűnik bonyolultnak, csak le kell vezetni a szabály. Próbálkoztam úgyis, hogy csökkentettem a feltételeken, vagyis beállítottam, hogy minden felhasználót irányítson át, ha arra az oldalra téved, de az se működik.
Elképzelhető, hogy alapjaiban rossz az egész, ez esetben remélem kijavítotok... :o)

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

Elvileg jónak kellene lennie, de. Ha mégsem, kapcsold be a admin/rules/settings oldalon a debug rule evaulationt. Vigyázz, ez role-tól függetlenül erre az eseményre mindig kidobja a debug üzenetet, szóval ne éles oldalon legyen. Ez szépen meg fogja mutatni, hogy milyen feltételek hogyan alakulnak a rule futása közben.

De érzek némi zavart az erőben.. Ezzel a rules-szal irányításokkal már gondjaim, konkrétumokra nem nagyon emlékeszem, ha nincs ellenedre pár sort saját modulba vetni, akkor szerintem ennyivel egyszerűbben megúszod, és ráadásul nem a bizonytalan pathalias alapján mókuskázni:

function MODULNEVE_init() {
  global $user;
  if ($user->uid = 0 && arg(0) == 'node' && arg(1) == az oldal nidje) {
    //adunk neki üzenetet
    drupal_set_message('Ittenkérembejelenetkezéskő');
    //majd megmondjuk, hogy nincs rá jogosultsága
    drupal_access_denied();
  }
}
0
0

----
Rájöttem, miért kérdezek olyan ritkán a drupal.hu-n. Amíg szedem össze az infokat a kérdéshez, mindig rájövök a megoldásra.

gery77 képe

Sajnos elég sok mindent nem értettem, abból amit írtál, de ez a képzetlenségem miatt lehet... :o)
Valami nagyon nem jó ezzel a modullal, már arra is gondolok, hogy talán a tárhely nem engedélyez valamit és azért nem engedi végrehajtatni a szabályt.
Egy sima két értékű feltételt nem tud értelmezni és ezután átirányítani, az nekem nem keret.
Bekapcsoltam a debug rule evaulationt és ha jól látom, akkor a Path has alias(es) sor nem megy végig, pedig ott a linket csak egy módon lehet megadni, mivel a ?q= jelig nem is tudom módosítani, csak a node nevet tudom betenni. A név biztosan jó.

#

* 0 ms "User is going to view a page" has been invoked.
* 2.142 ms Executing the rule "proba 1" on rule set "User is going to view a page"
* 2.563 ms Condition "Path has alias(es)" evaluated to FALSE.
* 2.642 ms Evaluation of "User is going to view a page" has been finished.

A kódodat nézegettem egy darabig, aztán nem jöttem rá, hogy hol kellene használnom... :o(
A MODULNEVE az gondolom rules_init, a 'node' a tartalomé, az oldal nid-je, az micsoda?
Az egészet a rules modulba kellene betenni?

0
0
szantog képe

Háát a modullal szinte kizárt, hogy gond legyen, amikor én szívtam vele, a gáz akkoris a szék meg a moitor között volt.

Nem a rules modult kell babrálni, sajátot írni. York nagyon szépen összefoglalta, hogy kell: http://openproject.hu/blog/york/drupal-modul-keszitese-egyszeru

A modul neve akár tistutyafile is lehet, ez estben tistutyafile_init lesz a függvény neve. Az arg függvény a paraméterében megadott számú argumentumot szedi ki az urlből (és ez != alias !!). Ahogy ezt írom, a http://drupal.hu/comment/reply/12735/52846 oldalon arg(0) = comment, arg(1) = reply, és így tovább. Esetedben a node/"nid" oldalon kell egy átirányítás, ahol a nid a tartalom nidje. (naeztjólmegmondtam) szóval ha szerkesztesz egy tartalmat, akkor a node/"nid"/edit oldalon vagy, tehát a tartalom nidjét úgy is megtudhatod, ha egyszerűen rámész és szerkeszted.

0
0

----
Rájöttem, miért kérdezek olyan ritkán a drupal.hu-n. Amíg szedem össze az infokat a kérdéshez, mindig rájövök a megoldásra.

gery77 képe

Hát szerintem én ehhez a megoldáshoz még kezdő vagyok.
Létre tudtam hozni az új modul 2 fájlját, az .infóval nincs is gond, mert a modulok alatt tudom engedélyezni, a .module már annál macerásabb, szerintem rossz adatokat adtam meg benne.

function mysite_init() {
  global $user;
  if ($user->uid = 0 && arg(0) == 'reggeli-gondolatok' && arg(1) == 6) {
    //adunk neki üzenetet
    drupal_set_message('A tartalom megtekintéséhéz előbb regisztrálnia kell az oldalra!');
    //majd megmondjuk, hogy nincs rá jogosultsága
    drupal_access_denied();
  }
}

Az uid = 0 az gondolom marad, az arg részeket nem értem. Leírtad a sort, de nem látom a logikáját.
A 'node' az oldal álneve, vagy a node/ -es neve? Vagy azt nem is kell módosítani?
Az oldal nidje a szerkesztés alapján 6, mert node/6/edit
Jó helyre írtam be ott a végén?

Igazából semmit nem csinál most az oldal, de legalább nem is száll el, mint a rules modul logikusnak tűnő beállításaival.
Lehet, hagyom a franca az egészet, valami egyszerűbb megoldás csak van a problémámra. Végülis csak 1 db oldalnál kellene ezt lekorlátozni. Ez az új modul jónak tűnik, biztos én bénáztam el valamit.

0
0
szantog képe

Két gond van:
arg(0) == 'node'
$user->uid == 0

A reggeli-gondolatok az útvonal álnév. Az arg() pedig a drupal belső útvonalát vizsgálja. Próbáld ki, beírod url-be, hogy node/6, és ott lesz a tartalmad. (hacsak más modullal el nem irányítottad, de valszeg nem)

Amúgy már majdnem jó. Még annyi szabály van - de ez magába a működésbe nem szól bele, csak nem szép - hogy magyar szöveget nem írunk kódba, hanem használjuk a t() függvényt, majd szépen a drupalon keresztül lefordítjuk: drupal_set_message(t('This is the text.'));

0
0

----
Rájöttem, miért kérdezek olyan ritkán a drupal.hu-n. Amíg szedem össze az infokat a kérdéshez, mindig rájövök a megoldásra.

gery77 képe

Nna, csak sikerült összehozni a segítségeddel, de legalább ezt is megtanultam... :o))
Már csak ezzel a t() függvénnyel van bajom, a programozás nem az erősségem, inkább grafika, de az egyszerű drupal oldalakat én szoktam összerakni.
Keresgélek a függvényről valamit, ha nem megy, akkor addig max leveszem a magyar szöveget, de a működés már rendben van.
Köszi a segítséget!

0
0