Szeretnék az oldalra webkonferencia menüpontot létrehozni,de csak regisztrált felhasználók férhetnének hozza a tartalomhoz,de ettől függetlenül szeretném ha megjelenne a többi menüpont között,de ha vendégként rákattintok akkor azt írja ki középen az oldal "Az oldal megtekintéséhez regisztráció szükséges"
Lehet érthetetlen lett amit akarok,de remélem értitek mire gondolok.
Tehát menüpont mindig látszik minden felhasználónál csak a tartalom regisztrációval legyen elérhető. Valahogy szeretnem megoldani,hogy középen az oldalon legyen az a szöveg,hogy reg szükseges a tartalom megtekintéséhez.
Drupal verzió:
Fórum:
Szerintem ehhez modult kell
Szerintem ehhez modult kell írni, kiindulópontnak ajánlom: http://drupal.org/node/109157
Két blokk ugyanazokkal a menükkel
Létrehozol két blokkot, ugyanazokkal a menükkel.
1. Az egyikben a "webkonferencia" menü egy oldalra mutat, amelyen kiírod "Az oldal megtekintéséhez regisztráció szükséges". Megjelenítés bizonyos csoportok számára: anonymus user.
2. A másikban a "webkonferencia" menü a tartalomra mutat. Megjelenítés bizonyos csoportok számára: authenticated user, és minden más csoport.
A blokkot oda teszed ahova akarod, css-el beállítod.
SimonT
én tartalomtípus jogosultságaival babrálnék
Szerintem az lenne a legjobb és legegyszerűbb, ha ez a webkonferencia oldal egy külön tartalomtípus lenne (ami egyébként is szükséges lehet, ha máshogy épül fel, mint az oldal többi része), így a jogosultsági beállításoknál egyszerűen beállíthatod, hogy a vendégek ne láthassák, csak a regisztráltaknak legyen joguk megtekinteni, így ha valaki közvetlen linkről megy fel, akkor sem lesz hozzáférése. A drupal beállításaiban azt is meg lehet adni milyen oldalt lássanak akiknek nem megfelelő a jogosultságuk (akár az /user oldalra is jó ötlet lehet állítani, így a vendég egyből bejelentkezhet vagy regisztrálhat).
Content Access, Redirect 403 to User Login/CustomError, Views
Ötletelés: ha egy tartalomtípusról van szó, Content Access segítségével testreszabod a tartalom-láthatóságot, így 403-at kap a megtekintésre nem jogosult felhasználó; ahhoz, hogy egyből egy üzenet kíséretében (bejelentkezés vagy regisztráció szükséges) a bejelentkező oldalra is átirányítson, felhasználhatod a Redirect 403 to User Login modult; esetleg még a CustomError is szóba jöhet az előbbi helyett.
Ha Views-zal kell listázni (pl. page display), akkor beállíthatod a jogosultságot (Access) ennél az oldalnál az authenticated user role-ra, és akkor az előbb említett r4032login modul átirányít a bejelentkező oldalra. Van viszont ezzel a módszerrel egy nagy gond: ha eleve a bejelentkezett felhasználókra vonatkozó role-tól teszed függővé ennek a page-nek a megtekintését, akkor a menüben nem is fog listázódni ez az oldal az anonim júzernek, mivel azt mondtad az előbbivel, hogy anonim júzer ezt úgysem láthatja, a Drupal pedig ezért ezt jól elrejti.
Szóval itt trükközni kell. Ha beállítod inkább az adott view-nál, az Access-nél a "access content" (7-esben "View published content") engedélyt, akkor a menü látszani fog, el lehet ide navigálni, viszont a címen kívül a júzer mást nem fog látni a Views-zal listázásnál, tehát a tartalmak helyett üres oldalt fog látni. Most egy olyan trükk jut csak eszembe hirtelen, ami csak akkor működik jól, amikor már BIZTOSAN van egyébként feltöltve tartalom az adott típusba. Mivel jelen esetben az anonim júzernek 0 eredmény fog megjelenni a Content Access-szel történő korábbi leszabályozás miatt (mivel a bejelentkezetteknek engedted csak meg a tartalom megtekintését a tartalomtípusnál), ezért a Views-ban felhasználhatod az "Empty text"/"Üres szöveg" megjelenítését, ami akkor jelenik meg, amikor 0 eredményt kapsz, és ide beírhatod a megfelelő szöveget, ami épp a kérdésed címe ("Az oldal megtekintéséhez regisztráció szükséges").
Ha így kicsit zavaros, kérdezz vissza nyugodtan.
Field permissions
Nekem volt korábban egy hasonló problémám, azt a field permissions modullal tudtam megoldani.
http://drupal.org/project/field_permissions
Mezőnként tudod vele szabályozni, mit kik láthatnak.
és az üzenet hogy lesz kiírva?
És ha ezt használja, hogy lesz kiírva, hogy "Az oldal megtekintéséhez regisztráció szükséges"? Mert igazából ez a kérdés.
Persze lehet, hogy csak nekem nem jut eszembe, hogy mire is gondolhattál, ezért is kérdezem. :)
A node-hez felveszel egy
A node-hez felveszel egy mezőt, ami csak az anonymousok számára látható, ide kerül ez a szöveg, hogy az oldal megtekintéséhez bejelentkezés szükséges, vagy ha még nem regisztrált, itt teheti meg... (Akár ezt beállíthatod alapértelmezett szövegnek, hogy ne kelljen ezt minden új node létrehozásnál beírni.)
És a "konkrét" szövegmezőt, ahol az érdemi tartalom van, azt pedig az anonymousok számára rejtetté teszed.
Én így oldottam meg.
szerintem erősen overkill
Ez eszembe jutott, hogy esetleg erre gondoltál, de szerintem ez erősen overkill, kényszermegoldás, hiszen így minden mezőt csak az authenticated user számára elérhetővé kell tenni, kivéve ezt az egyet, ami csak anonymous-nak elérhető, és a mező alapvetően nem erre való, meg a Field permission sem.
Gondolj bele, mi van, ha változtatni szeretnél azon a szövegen, hogy
"Az oldal megtekintéséhez regisztráció szükséges"
mert mittudomén, rájössz, hogy az a szöveg jobb lenne, hogy
"Az oldal megtekintéséhez jelentkezzen be vagy regisztráljon!"
de mondjuk 100 node-ot már az előző szöveggel vittél fel.
Akkor minden egyes node-ban meg fogod változtatni ezt a szöveget?
Hát próbákloztam ezzel a megoldással de
Próbálkoztam ezzel a megoldással de mindenki látja a hozzáférés szabályozást ez pedig nem jó.
Azért köszönöm a segítségeket.Megpróbálok minden megoldást és majd írom hogy sikerült.
„de mindenki látja a
Ezt hogy érted?
VBO
„Akkor minden egyes node-ban meg fogod változtatni ezt a szöveget?”
Természetesen nem, erre is van jó megoldás:
http://drupal.org/project/views_bulk_operations
Az interneten sok screencast található, ami ennek működését mutatja be, pl. http://nodeone.se/sv/node/773
Egyébként a nodeone.se oldalon rengeteg más drupalos oktatóvideó is található, csak ajánlani tudom mindenkinek. :)
Tudtam, hogy ezt fogod írni,
Tudtam, hogy ezt fogod írni, kár, hogy nem előztelek meg. :D Ez nem változtat azon, hogy overkill. A VBO csak annyit csinál, hogy az eredményhalmazon végigszaladgálva helyetted elvégzi mindegyiken a piszkos melót, vagy laza query-vel felülcsapja az értékeket, de attól még ez nem lesz "jó megoldás", mert minden egyes node minden egyes érintett fieldjén meg kell csinálni, hogy VBO-val vagy másképp, az a lényegen nem változtat. :)
Szóval overkill, értem. De ha
Szóval overkill, értem. De ha van jobb megoldás, én is szívesen várom, mert nekem is volt ilyen problémám, amit ide a fórumra is elővezettem:
http://drupal.hu/forum/tartalom-hozz%C3%A1f%C3%A9r%C3%A9s-finomabb-m%C3%...
Végül nekem a field permissions modult ajánlották, de volt ott több más ötlet is, szóval érdemes végigolvasni a hozzászólásokat ott is.
update: most beleolvasva abba is, lehet, hogy ide a premium content modul megfelelne, nem?
ki kell próbálni a Premium content modult ||| szerk.: NEM JÓ!!
Ja, ott pont én ajánlottam neked a Premium content modult. :)
Akkor azt írtad, az a teljes node-ot korlátozza, és az ott neked nem felelt meg, mert ott NEKED valóban mezőszintű állítgatásra volt szükséged. Nem próbáltam, de majd holnap szerintem adok neki egy próbát, ha eszembe jut. Vagy ha Te kipróbálod, én részedről is szívesen veszem az élménybeszámolót. :)
===================================
Szerk.:
na, végül előbb kipróbáltam, és a Premium content NEM alkalmas a feladatra.
idézem a readme-t:
A lényeg, hogy igazából csak a body-t korlátozza full view mode-ban.
A teasert ÉS még minden egyéb fieldet is minden esetben megmutatja, anonim júzernek is, DE a teljes tartalomnál a body helyett azt írja ki, ami a megadott üzenet, hogy csak prémium felhasználók számára elérhető.
Igazából ebben a formában még elég szegényes a modul, nem igazán konfigurálható.
Tovább kell gondolkozni a megfelelő módszeren.
Mondjuk én még mindig a Content Access modullal és némi esetleges pluszkóddal hoznám össze (nem gányolnék Field Permissionnel, mivel teljes node korlátozásáról van szó)...
Nem lesz az overkill, és
Nem lesz az overkill, és nemigen van más. A mező szintű jogosultságkezelés fölött a tartalomszintű áll, ami egyben a menü szintű jogosultságra is hat. A kettő között nincs semmi (hacsak valami contrib modul nem csinált ilyet, amit nem találtam). Ahhoz, hogy egy access denied menü megjelenjen egy rendes menu_treeben, elég csuda hackek kellenek. Van ugyen alter a menu_get_itemhez, de nem vagyok benne biztos, hogy az access részét babrálni benne a hosszú élet titka.
Ellenben lehet csinálni viewszal olyan listát, amiben az advanced settingsben van olyasmi disable sql rewrite, és akkor meg tud jelenni a link akkor is, ha nincs hozzáférés. Ez még viszont nem menü, de ha csak egy lista az említett nodeokról, akkor ok.
Ha viszont a mező szintű szabályozás marad, akkor szintén a hook_field_extra_fields megvalósításával ki lehet írni egy default szöveget, és akár egy kis admin felületet is csinálni, hogy onnan lehessen állítgatni variable_ből.
----
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.
Attól még overkill és csúnya
Attól még overkill és csúnya megoldás, hogy nem érkezett még rá igazi jó ötlet, hogy hogyan lehetne igazán szépen megoldani. Minden ilyen jellegű megoldás overkill, amit csak ilyen kényszereszközökkel lehet megcsinálni.
De szerintem annál jobb bizonyíték erre nem nagyon kell, mint hogy 100 node esetén a tök statikus, elvileg minden node-ban egyező, mezőszintű (!) szövegen való változtatási igény felmerülésekor 100 helyen meg kell változtatni a szöveget. De sztem amúgy sem ilyen célokra való a field, hogy tök statikus szövegeket felvigyél, úgy, hogy a mindenhol megjeleníteni kívánt tartalmat defaultba rakod, aztán minden új node-nál elküldöd a szervernek újból és újból ugyanazt a szöveget, mert "jó lesz az vidékre".
Majd ha lesz egy kis energiám, én is kotorászok, mi lehetne jó megoldás, nincs-e rá kész modul, például hogy a premium_content nem tudja-e épp ezt, már itt korábban ajánlottam, és a leírása alapján úgy tűnt, épp azt tudja, ami itt kell.
Én legalábbis sokkal szívesebben választanék egy foolproof és hosszú távon megbízható, nem tákolt megoldást, még ha macerás is megoldani (már ha épp nem szorul a nyakamon a kötél a határidő miatt).
Az utolsó bekezdésedben szereplő hook_field_extra_fields()-es javaslatod viszont szerintem kifejezetten ötletes!
========================
Szerk.: mint a másik postban írtam a szerkesztés után, kipróbáltam, és a Premium Content modul nem megfelelő a célra.
Úgyhogy én a Content Access-szel játszanék továbbra is.
igazad van
és hogy lesz belőle menü?
----
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.
Always visible modul
Kapcsolódó issue-k, topicok:
http://drupal.org/node/724978
http://drupal.org/node/300607
Lehetséges megoldás:
>> D6-hoz sandbox project:
http://drupal.org/sandbox/mthomas/1119418
Always Visible
>> ehhez kapcsolódóan kérdés-válasz:
http://drupal.stackexchange.com/questions/51704/show-menu-items-with-lim...
>> D7-hez igazított változata az előbbi modulnak:
Always visible modul:
https://github.com/systemseed/always_visible
hook_form_alter()-rel a menüszerkesztéshez berak egy "Always show this menu item" checkboxot, hook_translated_menu_link_alter()-rel csekkolja ennek meglétét, ha ez megvan, akkor az $item['access']-t TRUE-ra állítja.
Működő megoldás, lehet véleményezni.
Redirect 403 to User Login vagy LoginToboggan modullal pedig át lehet irányítani a felhasználót a bejelentkező űrlapra.
CSS-el nem lehetne?
Két menüpontot hozok létre:
1. "menü_1" (nem regisztrált) ez egy tartalomra mutat: "Az oldal megtekintéséhez regisztráció szükséges"
2. "menü_1" (regisztráltaknak) webkonferencia oldalra mutat. (ezt a tartalmat csak regisztrált felhasználók láthatják, ez a menü_1 a vendégeknek nem jelenik meg)
CSS:
body.logged-in #menu_1 (nem regisztrált) {
display: none;
}
vagyis a menü_1(nem regisztrált) eltűnik, helyette megjelenik menü_1(regisztráltaknak). Kijelentkezés után újra a menü_1(nem regisztrált) jelenik meg.
SimonT
mindenképp kell hozzáférés szabályozó modul
akárhogy is trükközünk a menüpontokkal, a végén ígyis-úgyis meg kell védeni valahogy azt a nodeot, amit csak regisztráltaknak akarunk mutatni. erre kézenfekvő lesz content access modult használni. akkor meg már nem kell trükközni a menüpontokkal, meg semmi vudura nincs szükség, végzi a dolgát a content access és vége a történetnek.
-
clear: both;