Autor | Zpráva | ||
---|---|---|---|
David1256 Profil |
#1 · Zasláno: 6. 4. 2012, 10:59:46
Dobrý den,
řeším jeden problém. Mám na stránkách umístěn youtube přehrávač. Přehrávač funguje a vše se zdá být OK. Problém je však v tom, že když návštěvník webu překlikne na jiný odkaz, tak se změní adresa a tím pádem se přehrávač znovu načítá a přeruší se dosavadní přehrávání, což každého tak akorát naštve. Přemýšlel jsem nad tím, jak tento problém vyřešit a napadl mě AjaxLoader, tedy změna obsahu jen určité části webu (určitého <div>u). Jenže tím zase vzniká problém, že se nemění url a když pak chce někdo poslat někomu odkaz na určitou část webu, třeba na konkrétní článek, tak mu odešle prostě adresu ve tvaru www.adresa.cz a ten se tak na tížený článek prostě nedostane. Neznáte někdo nějaké řešení, které by kombinovalo změnu adresy s nepřerušením přehrávání přehrávače nebo nějakou podobnou metodu jak tento problém vyřešit?
Děkuji. |
||
DJ Miky Profil |
#2 · Zasláno: 6. 4. 2012, 11:19:31
JavaScriptem můžeš měnit adresu za
# (hledej location.hash např. tady na diskusi). Dá se to i navázat tak, aby fungovalo tlačítko zpět v prohlížeči, a mnohé stránky to tak používají (např. vyhledávání Google při změně klíčových slov, Gmail, Twitter).
Nebo je řešení otevřít vyskakovací okno s přehrávačem. |
||
Str4wberry Profil |
#3 · Zasláno: 6. 4. 2012, 11:27:36
|
||
David1256 Profil |
#4 · Zasláno: 7. 4. 2012, 13:57:02
Tak jsem se to rozhodl udělat přes AjaxLoader v kombinaci s tím location.hash. Ovšem narazil jsem na jeden problém. Hash přidává další znaky za znak #. Ovšem proměnné se získávají ze znaků za znakem ?. Na googlu mají proměnné i za znakem # ale nějak nevím, jak toho docílili. Napadlo mě to obejít přes location.search, který přidává znaky za znak ?, ale přitom se reloaduje stránka, takže to je nepoužitelné a musím to nějak vyřešit přes ten hash. Otázka tedy zní: Jak zjistit proměnou stránka z index.php#stranka=nejakastranka. Z index.php?stranka=nejakastranka je to normálně přes GET, ale tady nějak nevím.
|
||
Str4wberry Profil |
#5 · Zasláno: 7. 4. 2012, 15:10:30
Funguje to jinak.
Kliknutí na odkaz – buď se nastaví všem odkazům, že mají při prokliknutí načíst danou stránku z href u a změnit location.hash , nebo se jen změní ten hash a načítání je navázané právě na tu jeho změnu (pomocí onhashchange nebo časovače).
Načtení stránky – po načtení stránky se podíváš do hash e, odstraníš z něj # a jeho obsah předáš té samé funkci, co načítá stránky. Ta funkce bude načítat běžná URL ve tvaru index.php?stranka=nejakastranka . Ještě je potřeba vyřešit, aby se načítal jen obsah, který je potřeba (mění se) – to lze zařídit zavedením parametru, který se bude používat u AJAXových volání a daná stránka potom vrátí jen svůj vnitřek; nebo si z celé stránky vyzobávat potřebný obsah.
|
||
David1256 Profil |
Str4wberry:
Onhashchange je, jak tak koukám na kompatabilitu s prohlížeči, nepoužitelné. To co mi radíš s načítáním stránky nějak nechápu. Jaké funkci mám předávat obsah hashe? Stránky načítám přes includy s tím, že podle proměnné z GET v url se načítá požadovaný obsah. Jenže to teď vlastně nefunguje, protože si to z této adresy #stranka=stranka logicky nic nebere a já se možná hloupě ale ještě jednou ptám jak z toho tu hodnotu vydolovat... Zkrátka se tu pokusím ten problém rozebrat trochu detailně, aby tomu bylo více rozumět. Mám tento php kód přes, který se načítá obsah stránek. <?php $stranka = $_GET['stranka']; $soubor = "includy/".$stranka.".php"; if (!file_exists($soubor)) { $soubor = "includy/prostredek.php"; } ?> <?php include ($soubor); ?> a další includy.... <a onclick="ajaxLoader('includy/kontakty.php','prostredek'); window.location.hash='stranka=kontakty'";>KONTAKTY</a> |
||
weroro Profil |
#7 · Zasláno: 7. 4. 2012, 18:00:52
Ešte je jedno riešenie. Youtube ponúka tvz. FlashAPI riešenie pomocou ktorého si vieme implementovať jadro YT playera do svojho vlastného flash video playera. A ak mám svoj video player, tak už nie je problém ukladať aktuálnu pozíciu videa do SharedObject a pri refreshe stránky sa video spustí od poslednej pozície.
|
||
David1256 Profil |
#8 · Zasláno: 7. 4. 2012, 19:15:07
weroro:
Díky za inspiraci. Ale má to zase "mouchu". Při každém reloadu se video ač na malou chvíli tak zastaví a ucho i oko návštěvníkovo to prostě spozoruje a i když to nebude tak hrozné jako přerušení videa a hození na začátek, tak to stále neřeší problém s plynulým přehráváním. |
||
David1256 Profil |
Bingo! Tak už jsem pokročil o další kus. Z hashe jsem si vytáhl hodnotu proměnné, kterou potřebuji a to pomocí JS scriptu. Hodnotu jsem pak předal php, které s ní dál pracuje. Ovšem narazil jsem na jeden úplně nečekaný problém, který nějak nedokážu pochopit. Není to už nic ve stylu jak by mělo fungovat nepřetržité přehrávání přehrávače, ale php mi vypíše správnou proměnnou, ale nechce mi ji includovat. Popíšu přesněji níže.
<?php $stranka = '<script>window.document.write(stranka);</script>'; //do stranky mi to uloží hodnotu JS proměnné stranka, která je braná z hashe a její hodnota je 'kontakty' $soubor = "includy/".$stranka.".php"; //do proměnné soubor mi to zapíše správně hodnotu 'includy/kontakty.php' echo $soubor; // vypisuji a vypisuje se správná hodnota 'includy/kontakty.php' include ($soubor); //chci includovat ale neudělá to nic..přitom když udělám zápis normálně include('includy/kontakty.php'), tak to fachcčí ?> EDIT: Když jsem přidal do kódu toto $zkusebni = "includy/kontakty.php"; include ($zkusebni); |
||
Alphard Profil |
#10 · Zasláno: 7. 4. 2012, 22:42:39
Jste další, kdo patlá js a php dohromady :-) To nejde, každou část vyhodnocuje jiný stroj, prvně PHP server, pak JS klient.
|
||
David1256 Profil |
Ale když už mám v PHP nějakou JS hodnotu a normálně jí to vypisuje a pracuje s ní, tak jaktože to ten include "neskousne"?
|
||
Alphard Profil |
#12 · Zasláno: 7. 4. 2012, 22:48:27
Ale vy nemůžete mít v php žádnou hodnotu pocházející z js.
$soubor může obsahovat asi tak "includy/<script>window.document.write(stranka);</script>.php" . Nevěřím, že je tam něco jiného, podívejte se do html zdrojáku..
|
||
David1256 Profil |
No jo. Teď mi to docvaklo. Hm tak moje teorie pohořela. Stále tedy nevím, jak to udělat, aby ten se ten přehrávač nezastavoval při klikání na různé odkazy a zároveň, aby se měnilo url.... :-(
A co říkáte na Sajax http://www.modernmethod.com/sajax/. To by mohlo pomoci vyřešit můj problém ne? Jo i když teď přemejšlim, kdybych použil Sajax, tak bych stejně musel měnit url přes odkaz a přitom by se stránka refreshla. Pff fakt už nevim tyjo. Možná přes cookies? :-D Už asi končim, alespoň pro dnešek... |
||
Medvídek Profil |
#14 · Zasláno: 7. 4. 2012, 23:36:50
David1256:
Mužeš zkusit mrknout sem, kde se stránky mění location.hashem a stránky se načítají, aniž by přerušily přehrávač. Pro inspiraci snad poslouží. |
||
Chamurappi Profil |
#15 · Zasláno: 8. 4. 2012, 00:47:18
Reaguji na Davida1256:
Já mám jako uživatel nejraději, když je přehrávač v samostatném okně. I kdyby to měl web kdovíjak chytře vyřešené, budu na něm brouzdat s nejistotou — to se týká i třeba toho YouTubu, kde se musím postupnými pokusy a omyly učit, co mi způsobí odchod z právě prohlíženého videa a co ne. Řekl bych, že tu chybí nějaká konvence říkající, jak označovat/rozpoznávat odkazy, které ve skutečnosti neodkazují… nebo aspoň o žádné nevím. „Bingo! Tak už jsem pokročil o další kus.“ Pokud plaveš v otázce, kde se zpracovává JavaScript a kde PHP, musel bys pokročit o hodně velký kus, abys dokázal rozběhat AJAX i s funkční historií. |
||
David1256 Profil |
#16 · Zasláno: 8. 4. 2012, 13:16:52
Už se nám to tu zvrtlo v jiné téma, takže založím nové, ať tu není zbytečný flame. V novém tématu se budu ptát na to "Jak dostat JS proměnnou do PHP pomocí Ajaxu nebo cookies".
|
||
Lukáš R. Profil |
#17 · Zasláno: 9. 4. 2012, 08:37:43
Chápu, že jste už pokročili jiným směrem, ale nešly by použít rámy?
|
||
Časová prodleva: 12 let
|
0