Figyelmeztető popup: Felnőtt tartalom!

L.Tiny képe

Sziasztok!

Egy szerintem teljesen hétköznapi problémával állok szemben: felugró ablakban/layer-ben meg kellene jelenítenem egy figyelmeztetést, hogy pl. "Ez egy felnőtteknek szóló tartalom! Elmúltam 18 éves (klikk és belép az oldalra) Nem vagyok még 18 éves (klikk és a főoldalra jut).

Ez egy hírportál jellegű honlap lesz, és csak bizonyos oldalaknál kellene ez a figyelmeztetés (nevezzük popup-nak) és természetesen elég lenne egyszer session-önként. Úgy szeretném megoldani, hogy az adminisztráció során (a tartalom létrehozásakor) egy radio button-nal lehetne bekapcsolni. A választógomb mezőt létrehoztam, de rájöttem, hogy nem ez volt a neheze és gyorsan el is akadtam. Elsősorban szeretném drupal modullal megoldani, de pont ilyet nem találok, ami ezt tudná, pedig szerintem elég sok helyen használnak ilyen popup-féleséget.

Néztem a Disclaimer-t - ez nem igazán erre való, a Popup-ot - itt nem automatikusan nyílik meg a kis ablak, hanem hover, vagy klkk után, legalábbis ha jól értelmezem. A Colorbox Node megjelenése tetszene a legjobban, talán valami módon ebben az irányban lesz a megoldás, de nem jövök rá, hogy kellene összehoznom, hogy csak ott és akkor és automatikusan és csak munkamenetenként egyszer nyíljon meg...

Kérek egy kis segítséget, ha van tapasztalatotok ez ügyben!

Köszönöm előre is!

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

Vagy csinálsz egy "Felnőtt tartalom" típust és a pathautoban beállítod, hogy felnottartalom/node-title legyen az útvonala ennek a típusnak. Vagy leprogramozod az útvonal ilyen beállítását, ha pipált a tartalom. Talán ez nem biztos rules is tud ilyesmit lekezelni. Aztán beállítod, hogy csak a felnottartalom url-en és aloldalain popupoljon.

1
0

Üdv!
Dudás József

L.Tiny képe

Nagyon köszönöm az ötleteket!
A pathauto-s módszer több okból sem lenne jó - az én esetemben legalább is. A rules lesz a jó megoldás! Odáig eljutottam, hogy új tartalom létrehozásakor (ill. meglévő frissítésekor), ha be van pucukázva az adott mező, akkor kiírja az üzenetet. Most azt kellene elérnem, hogy ez az üzenet, ne a standard drupalos pasztell sárga ablakocskában jelenjen meg a lap tetején (hiszen akkor már látható a "rettenetes tartalom is"), hanem Colorbox ugrana fel, ami kitakarná az oldalt.
Remélem össze tudom valahogy kapcsolni a Disclaimer-rel...

Köszi a segítséget!

0
0
makgab képe

Sikerült megoldani?
Egy egyszerű megoldást keresek, hogy a főoldalon megjelenjen egy popup ablak.
A rules-t néztem, addig oké is hogy:

Esemény:  Drupal initilaizing
Feltétel: -
Akció:    <ide kellene valami popup funkció>
0
0
makikaki képe

Esetleg ezt probáltad?
https://drupal.org/project/splashify

0
0
makgab képe

Igen, bár csak meg kellene ismernem még.
Eddig jutottam vele:
* libraries, splashify modul telepítve.
* jstorage a sites/all/libraries alatt -> a splashify modul látja is, nem ír hibát.
* Beállítom a szöveget paraméterekkel teszt jelleggel:
Mikor: "Mindig",
Hol: "All pages",
Mi: "beírt szöveg az oldal sablonjában"
Hogyan: "átirányítás"

Jelenleg a főoldalnál meg is jelenik a splashify-splash.
Hogy lehet azt megadni, hogy kérdezze meg a felhasználót, hogy valóban be akar-e lépni a site-ra? Ha igen-t nyom, akkor tovább, ha nem-et nyom, akkor átdobja egy másik linkre.

Tegyek be két submit button-t a full HTML oldalba?

0
0
L.Tiny képe

Nekem ez a Splashify sem jó, pedig nagyon ígéretesnek tűnt. Csak sajna nem tudtam beállítani, hogy csak a felnott/* oldalakon nyíljon meg, mert nem fogadja el az url alias-okat. Konkrét node-okat pedig nem tudok beírni előre, mert ez folyton változik.

Ha minden igaz, akkor kerülő úton, nem Drupal modullal össze fog jönni, és akkor azt itt megosztom majd.

0
0
L.Tiny képe

Sajnos nem jött össze. Szerintem a Disclaimer modul a hunyó, mert 7-eshez még csak ez dev verzió létezik, és talán azért nem akar működni. Legalább is amit én szerettem volna, azt nem csinálta. Konkrétan az oldalspecifikus megjelenést nem tudtam beállítani. Az kellett volna, hogy csak a felnott/* útvonalakon nyíljon meg, de valami miatt nem csinálta. Próbáltam a <front>, vagy konkrét node beírásával, még azzal is, hogy mindenhol jelenjen meg, de semmi. Valami végérvényesen szétesett benne :(
Szóval ebben sajnos nem tudok tippet adni...

0
0
eager képe

Jön egy olyan megoldási javaslat, amit mások esetleg kritikára érdemesnek fognak tartani, és valszeg jogosan, mivel nem vagyok a drupal backend (sem) szakértője.

Kéne egy új régió ['ujtitkosregio'] a sminkbe, amit a page.tpl.php vége-felére raknék.

Bele menne egy blokk a következő tartalommal:

  1. <div class="overlay"></div>
  2. <div class="popup-body">
  3. <div class="message">Elmúltál már?</div>
  4. <div id="popup-close" class="popup-button">Igen.</div>
  5. <a href="/front" class="popup-button">Nem.</a>
  6. </div>

A css hozzá a következő lenne:

  1. /**********************/
  2. /* Popup-pá formázás. */
  3.  
  4. .ujtitkosregio .block .overlay {
  5. /* Ha a régión kívüli wrapperek egyikén sincsen
  6.   elállítva a css position a default 'static'-ról,
  7.   akkor az overlay így befedi a teljes oldalt. */
  8. background: black;
  9. height: 100%
  10. left: 0;
  11. position: absolute;
  12. top: 0;
  13. width: 100%;
  14. z-index: 9000;
  15. }
  16. .ujtitkosregio .block .popup-body {
  17. position: absolute;
  18. z-index: 9100;
  19.  
  20. /* Ide jön a popup további pozícionálása meg formázása. */
  21. }
  22. .popup-button {
  23. /* Ide jön a div és az < a > egységesre formázása. */
  24. }
  25.  
  26. /*******************/
  27. /* Mikor mutassuk. */
  28.  
  29. /* Alapból ne. */
  30. .ujtitkosregio .block {
  31. display: none;
  32. }
  33. /* Felnőtt tartalomkor de. */
  34. .felnott-tartalom .ujtitkosregio .block {
  35. display: block;
  36. }
  37. /* Megerősítést követően megint ne. */
  38. .felnott-tartalom.azt-mondta-felnott .ujtitkosregio .block {
  39. display: none;
  40. }

Ezt a blokkot amúgy értelemszerűen full html-ellel kéne menteni, vagy a legelegánsabb lehetne, ha egy saját mini-modulból lenne definiálva (akkor pl. a link href-et sem kéne hardkódolni) (meg ennyre szerteágazó funkcionalitást gondolom amúgyis átláthatóbb lenne egy kis modullá összecsomagolni).

Ezután kéne egy js, ami a #popup-close-ra kattintáskor felteszi a body-ra (vagy valami primary wrapper divre) az .azt-mondta-felnott classt, (mint ahogy a css-ben is látszik, hogy elrejti a popupot megint). Ha nem Drupal lenne, akkor mondanám, hogy ehhez a klikk-hez kell kötni a session-variable módosítását is, ami megjegyzi, hogy felnőtt (de nem ismerem, hogy a Drupalban hogy szokás bánni a sessionökkel).

Már csak két dolog kell:

  • feltenni a body-ra (vagy egy primary wrapper divre) a .felnott-tartalom classt, ha a kérdéses node-nál be volt klikkelve a mező (ez ugye ahhoz kell, hogy alapból előkerüljön) (ha sminkből, akkor a template_preprocess_html(), vagy template_preprocess_page());
  • megcsinálni a sessiont, illetve hogy ha a session szerint felnőtt az ember, akkor onnantól már a backenden föl legyen téve a .azt-mondta-felnott class is a .felnott-tartalom mellé (ha sminkből, akkor szintén a template_preprocess_html(), vagy template_preprocess_page() ).

Ha vágod hogy drupalban hogy kell a sessionökkel bánni, az szuper, ha nem, akkor az a következő kérdés :)

Egyébként, ha könnyebb a backenden a felnőtt-mező kipipáltságát és a session-var-t a template_preprocess_page()-ből látni, akkor az említett classokat a page.tpl.php-n belüli valamelyik fő wrapper div-re is lehet teszegetni.

Továbbá: ha ki akarod hagyni a js-t is belőle, akkor meg a #popup-close is lehetne sima link, ami meg ugyanerre a node-ra mutatna, csak már a session variable átállításával, így a backenden a node újranyitásakor már felkerülhetne a megerősítő class. Ehhez gondolom már mindenképpen saját modulból kéne definiálni a blokkot. [EDIT]: nem, ez sántít, mert közben megtudtam, hogy block-ba még modulból sem tudsz tenni linket a 'node being viewed'-ra, mivel a blokk annál statikusabb (főleg hogy lehet cache-elve is).

Lehetne ezen sokat csiszolni, de a kiinduló-ötletem ez lenne. Nem próbáltam ki, szóval lehet, hogy vannak benne még leküzdendő logikai kihívások, de én ebbe az irányba küzdenék.

[Újabb EDIT]:

Kihagynám a régiót, és a blokkot is és esetleg a modult is (bár az attól függ, hogy a session kezeléséhez nem kell-e). Próbálkoznék azzal, hogy beletenném a fenti szerkezetet simán a page.tpl.php aljára.

Ez azt jelenti, hogy a body classok helyett az emlegetett helyzetjelző classokat is a page.tpl.php-ban definiált valamelyik divre tudnánk tenni. template_preprocess_html() ebben az esetben már semmire nem kell.

Úgy tűnik, hogy elérhető a felnőtt-tartalom-jelző field értéke a template_preprocess_page()-ben, ha a template_preprocess_node()-ból áttornázzuk ide.

A template_preprocess_page()-ben, ha nagyon szükséges, elérhető az éppen nézett oldal path-ja is, a request_path() vagy rokonai használatával (hogy a #modal-close-zal az aktuális 'node being viewed'-ra tudj linkelni, ha a js-t hanyagolnád).

Most már csak az a kérdés, hogy a session vart hogyan állítod, és hogy hogyan fogod látni a template_preprocess_page()-ben.

1
-1
makgab képe