Számláló blokkban

makgab képe

Ü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ó: 
aruna képe

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.

1
-1
black71 képe

Jogosultságok jól vannak beállítva?

0
0

Drupal 5.x, 7.x

Sk8erPeter képe

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

0
0
makgab képe

Jónak tűnik a modul, ki is próbáltam a kódot:

<?php
  echo '<div class="countdown">10 seconds!</div>';
  jquery_countdown_add(".countdown", array("until" => 10, "onExpiry" => "finished"));
  drupal_add_js("function finished() {}", 'inline');
?>

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?

0
0
Sk8erPeter képe

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

0
0
makgab képe

nekem a megadott linken az Output részben nem csinál semmit a script.

0
0
Sk8erPeter képe

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:

"month
Integer value representing the month, beginning with 0 for January to 11 for 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. :)

0
0
makgab képe

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).

0
0
Sk8erPeter képe

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.

0
0
makgab képe

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.

0
0
Sk8erPeter képe

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

0
0