Olyan tartalom típust szeretnék, amit a regisztráltak tudnak olvasni, a be nem lépett látogatók (anonymous-ok) pedig csak korlátozottan, pl. csak egy-két bekezdést láthassanak, alatta pedig egy tájékoztatás, hogy ha tovább szeretné olvasni, regisztráljon, vagy lépjen be.
A Content Access modul alkalmas hozzáférhetőségek szabályozására - ezt tudom - de ott egy tartalmat vagy látok, vagy nem. Ilyet, mint amit feljebb leírtam, a Content Accessel csak nagyon kacifántosan lehet megoldani, pl. minden ilyen node-ot duplán veszek fel úgy, hogy egyiket (a rövidítettet) csak anonymous-ok, a másikat pedig az összes többi tudja olvasni.
Van erre valami jó megoldás?
Melyik modulhoz, modulokhoz kapcsolódik a téma?:
Drupal verzió:
Fórum:
Premium content
Premium content
http://drupal.org/project/premium_content
Kapcsolódó témakör:
http://drupal.stackexchange.com/questions/30630/show-teasers-to-anonymou...
A premium content erre nem
A premium content erre nem alkalmas. Annyit tud, hogy beállíthatok időzítést, hogy egy adott időpontig, vagy egy adott időponton túl elérhetővé lehet tenni a tartalmat. Továbbá megadható egy konstans "access denied" szöveg, hogy mit írjon ki, ha nem elérhető.
Ez nem tudja azt, amit én szeretnék.
Elvileg a teasert lehet elérhetővé tenni...
... legalábbis a leírása szerint...
Na ma kipróbálom.
Köszi, én is nézegetem még,
Köszi, én is nézegetem még, lehet, hogy elkerülte a figyelmemet.
Ha nem tetszik, akkor a Panels-es megoldás
Egyelőre annyit derítettem ki, hogy a full contentnél megmutatja az üzenetet, ami mondja, hogy csak "előfizetőknek" (aztán ezt a szöveget arra változtatod, amire akarod) megtekinthető csak a teljes tartalom. De teaser módot láthatják, pl. ha Views-zal azt jeleníted meg. Mondjuk amennyire eddig néztem, nem túl szofisztikáltak a beállítási lehetőségei az admin-felületen, de némi kódolásra elvileg kényelmesebb lehetőséget ad. Meg külön permissionöket definiál a premium tartalomra.
Az sem igaz, amit írtál, hogy csak időközökre adható meg ez a korlátozás, mert pont az a default, hogy permanens korlátozás van, aztán annyifélét hozzáadhatsz, amennyit akarsz, és az adott content type-nál azt az adott típust állíthatod be (sima select lista van hozzá, elég egyértelmű...).
Szerintem ezen az úton el lehet indulni.
De ha nem tetszik, akkor válaszd a Panels-es megoldást:
http://drupal.stackexchange.com/a/30631/2368
Olvastam én is, hogy ez a
Olvastam én is, hogy ez a Panels modullal együtt valósítható meg, bár ezt szeretném elkerülni. Úgy érzem, ez olyan "ágyúval verébre" megoldás lenne.
Arra gondoltam, talán az Access denied message szövegmezőbe php szűrővel valahogyan meghívom az adott node teaser-ét, de ez nem biztos, hogy járható út.
Másik lehetőség még, hogy egy modulocskát írni rá a hook_node_view_alter() használatával. Talán ez lenne a "legelegánsabb" megoldás, ehhez azonban jobban el kellene mélyülnöm a modulírás rejtelmeibe.
Lehet hogy
elég neked az is, ha egy node template fájlt hozol létre.
Ha a sminkedbe beraksz egy ilyen
template-t (node--tartalomtipusazonositod.tpl.php)
Ezzel ^^^ meg tudod oldani, hogy a milyen mezőket ne lássanak az anonymous user-ek, valamint a mezők tartalmát is felül tudod írni a template-ben.
Ha találsz szebb megoldást, akkor ne ezt válaszd.
Pont ezért jó, hogy bevezették a d7-ben a render() függvényt, így bármit meg lehet változtatni a kimeneten a smink rétegben tömbként is.
Köszönöm, lehet, hogy ez
Köszönöm, lehet, hogy ez nekem jó lesz, megpróbálok ezen az úton elindulni.
Az ötlet tök jó, de ez ebben a formában nem valami atombiztos :)
Maga az ötlet jó, de a kódban ez elég feltűnő hiba:
Mi van, ha egy darab
<p>
nincs benne, csak pl.<div>
-ek?$content['field_xyz_body']['#items']['0']['value'] = $first_paragraph;
úgy tudom, a
#markup
ot kell felülbírálni, hogy jó legyen, pl.:$content['field_xyz_body']['0']['#markup'] = $first_paragraph;
==========
Az alábbit teszteltem, és ez teljesen az elvártak szerint működik, ha van rendes teaser, tehát van a szövegben
<!--break-->
, akkor odáig látják a be nem jelentkezett felhasználók, ha nincs, akkor automatikusan levágódik a szöveg 50 karakter környékén; a text_summary() függvényt használtam fel erre.Az Article content type-nál teszteltem mindezt:
node--article.tpl.php
legelejére, a nyitó PHP-tag után:Példa az eredményre:
anonimként:
bejelentkezve:
http://drupal.org/project
http://drupal.org/project/field_permissions
Csinálsz egy public meg egy protected fieldet, a publicot csak anonim látja, a protectedet meg csak a jogosultak.
Az a baj ezekkel a paneles meg sminkes turkálásokkal, hogy nem valós hozzáférés szabályozás, hanem csak amolyan maszatolás, megjelenítési logikába van építve, nem adatbázisba. Ergo mindenhol felül kell írni, ahol használva van, és nem biztos, hogy észreveszed, hogy hol van még megjelenítve a rendszeren belül. Pl simán becsúszhat egy view resultba, vagy term pagere szűretlenü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.
Ez teljesen így van.
Ez teljesen így van.
A Field Permissions modult még nem használtam, de azt írod, "Csinálsz egy public meg egy protected fieldet, a publicot csak anonim látja, a protectedet meg csak a jogosultak.", de akkor lényegében duplikálni kell a fieldeket? Tehát a body-ból mindig ki kell vágni azt a részt, amit az anonim felhasználó is láthat, bemásolni oda, aztán úgy mehet? Az is elég macerának tűnik. :( De javíts ki, ha valamit félreértek.
Lehet hogy kicsit
Lehet hogy kicsit túlvariáltam, nem láttam a fától az erdőt, így eszembe sem jutott, hogy mező szinten is létezhet hozzáférés szabályozás.
Utánanézek ennek field permission-nek, ez máshol is hasznos lehet...