Üdv!
Egy visszaszámláló blokkot próbáltam betenni egy D6 oldalon.
Működik is:
<script type="text/javascript">// <![CDATA[ var interval; var minutes = 0; var seconds = 40; function countdown(element) { interval = setInterval(function() { var el = document.getElementById(element); if(seconds == 0) { if(minutes == 0) { el.innerHTML = '0'; clearInterval(interval); return; } else { minutes--; seconds = 60; } } if(minutes > 0) { var minute_text = minutes + (minutes > 1 ? ' perc' : ' perc'); } else { var minute_text = ''; } var second_text = seconds > 1 ? 'mp' : 'mp'; el.innerHTML = minute_text + ' ' + seconds + ' ' + second_text + ' van még.'; seconds--; }, 1000); } // ]]> </script> <p> <input onclick="minutes=0;seconds=40;countdown('countdown');" value="Visszaszámlál" type="button"> </p>
Csak a többi felhasználó nem látja ahogy a JS visszaszámol.
Hogy kellene ezt a számlálót létrehozni, hogy minden user lássa a visszaszámlálást?
Drupal verzió:
Fórum:
Nem értem a kérdést
teljesen.
1. Ha azt szeretnéd, hogy a bárki, aki betölti az oldaladat (bárhonnét), ugyanazt a számláló állást lássa. Pl. Még X nap Y per Z másodperc van vissza a világvégéig. Akkor valahogy a szerveroldalról le kell kérdezni az aktuális állást, amihez képest elkezded visszaszámlálni a másodperceket. Így mindenki ugyanazt az időt fogja látni.
2. Vagy csak annyi a gond, hogy nem minden user látja a gombot és/vagy töltődik be neki a fenti javascript. Pl. ha drupal_add_js()-el adtad hozzá saját modulból a javascriptedet. Akkor elég lehet a cache ürítése is szerver/kliens oldalon. Esetleg a blokk láthatósága mindenkinek engedélyezett-e.
Jogosultság
Jogosultságok jól vannak beállítva?
Drupal 5.x, 7.x
jQuery Countdown
Ennél a megoldásnál sokkal szebbet hoz össze a jQuery Countdown, javaslom, hogy használd azt, én már próbáltam, nagyon egyszerű kezelni, több blokkot is létrehozhatsz az oldalon a visszaszámlálásra, könnyen konfigurálható, jobban jársz vele, mintha felfedezed a spanyolviaszt. :)
jQuery Countdown
http://drupal.org/project/jquery_countdown
Ennek a pluginnek a Drupalba való integrációjáról van szó:
http://keith-wood.name/countdown.html
jquery
Jónak tűnik a modul, ki is próbáltam a kódot:
Két dolog kellene.
1./ Gombnyomásra hogyan lehet elindítani a számlálást?
2./ Minden user ugyanazt a számlálót lássa.
Vagy ne a fenti php kód irányba próbálkozzak? Ez a modul tudja ezt?
valami ilyesmit kellene
valami ilyesmit kellene beépítened Drupalba, készítettem neked egy demót:
http://jsbin.com/icisuy/1/edit
Majd szólj, sikerült-e!
A jobb oldalon nyomd meg a Start gombot, hogy elinduljon a visszaszámlálás.
Ezt Drupalba úgy lehetne beágyazni, hogy drupal_add_js() használatával hozzáadod settingként, hogy milyen időpontig számoljon vissza. Alapból ugyanis a jQuery Countdown modulba nincs beépítve olyan lehetőség, hogy gombnyomásra indítsd el a visszaszámlálást.
5. The Drupal JavaScript API
http://drupal.org/node/304258
output
nekem a megadott linken az Output részben nem csinál semmit a script.
Tényleg, Firefoxban nem megy,
Tényleg, Firefoxban nem megy, mégpedig azért, mert a Date()-nél ezek szerint ez nem elfogadott FF-ban, Chrome-ban sajnos elfogadja:
var myDate = new Date("2013-12-31 23:59:59")
ez FF-ban invalid date. Jogosan: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Obj...
Az a helyes, amit eredetileg írtam, még látszik is, hogy kikommenteztem.
var myDate = new Date(2013, 11, 31, 23, 59, 59);
fontos, hogy a 11-es szám (nem a 12-es!!) a december:
Itt a jól működő változat:
http://jsbin.com/icisuy/2
(jobb fölső sarokban tudsz rámenni a szerkesztésre ("Edit in JS Bin"))
Ezt kellene átültetned Drupalba. :)
session
Egy baj van vele, ami nekem a kérdésem is volt, hogy ezt csak az adott user látja.
Tehát az adott session-ban megy a visszaszámlálás. A többi user megnyitva ezt az oldalt egy álló számlálót lát. Nem látja az éppen futó visszaszámlálást!
Én ilyen megoldást keresek, hogy minden user, aki meglátogatja az oldalt, az ugyanazt a visszaszámlálást lássa (amit gombnyomásra elindotott valaki).
Akkor konkretizáljuk, ki
Akkor konkretizáljuk, ki nyomkodná az elindító gombot? Az admin? Vagy akárki? Mi a feladat? Meddig kellene visszaszámolni, azt hogy állítanád?
Egyébként a jQuery Countdown modul a létrehozott blokkok beállításait, így a visszaszámlálási időpontot is variable-ben tárolja (6-os Drupalban), így az könnyedén felülbírálható kódból (modulból) is sima variable_set()-tel.
countdown
Tehát bárki indíthatja gombra a visszaszámlálást.
A visszaszámlálás fix pl. 40másodperctől menne.
Mindenkinek ugyanazt a visszaszámlálást lássa(!). Ezt szeretném megoldani.
Akkor AJAX-szal tudod
Akkor AJAX-szal tudod megoldani. Pl. hook_menu() implementálásával létrehozol egy útvonalat, pl.
$items['countdown/start']
(vagy hasonló), aztán addig a 40 másodpercig hiába küld valaki AJAX-kérést, nem foglalkozol vele (nem fogadod el). A gomb click eseményére kell kötni egy event handlert JavaScriptben (jQuery-ben), aztán onnantól kezdve a buttont disabled-re rakni:http://www.w3schools.com/tags/att_button_disabled.asp
így nem lehet ráklikkelni.
Nem kétperces meló, de nem is vészes.
http://api.jquery.com/jQuery.ajax/
http://api.jquery.com/jQuery.post/
6. Ajax in Drupal using jQuery
http://drupal.org/node/305747