Autor | Zpráva | ||
---|---|---|---|
Háva Profil |
#1 · Zasláno: 17. 3. 2012, 12:18:12
Ahoj,
Mám katalog kde mám zobrazeny výrobky, u každého mám odkaz na přidání do košíku. Rád bych aby po kliknutí na přidání vyjel informativní DIV o tom že zboží bylo přidáno. Zkouším to přes <script> function zobrazSkryj(idecko){ el=document.getElementById(idecko).style; el.display=(el.display == 'block')?'none':'block'; } </script> Tady mám ten odkaz: <a href='' title='Vložení výrobku do košíku'><img src='images/hlavni/kosik.png' alt='Nákupní košík' class='kosik'] onclick=";?>"zobrazSkryj('oddil1')"<?php echo "></a> |
||
Str4wberry Profil |
#2 · Zasláno: 17. 3. 2012, 14:11:44
Na to nejspíš přepínání ani nepotřebuješ.
|
||
Háva Profil |
Ale takto mi to problikne také, asi to blbě vkládám. Abych to upřesnil: Mám kosik.php kde kliknu na odkaz kterým si předávám ID a akce=pridej, na základě toho s mi spustí script který je v inkludovaným souboru zpracuj_kosik.php pro zápsání do DB
Odkaz: <a href='$kosik' title='Vložení výrobku do košíku'><img src='images/hlavni/kosik.png' alt='Nákupní košík' class='kosik'] onclick=";?>\"javascript:nastavit('show');\"<?php echo "></a> $kosik="katalog.php?akce=pridej"; $kosik.="&id=".$zaznam["id"]; $kosik.="&k=$k"; No a ty dva sripty mi nejdou propojit s tím javasriptem Když dám odkaz jenom takto: <a href=\"javascript:nastavit('show');\">Přidat do košíku</a> tak to jde ale zas se mi neinkluduje soubor s těma parametrama co potřebuji.
|
||
Str4wberry Profil |
#4 · Zasláno: 18. 3. 2012, 22:19:51
Jestli to dobře chápu, tak musíš to přidání obsloužit AJAXem, aby ses vyhnul onomu probliknutí.
|
||
Háva Profil |
#5 · Zasláno: 19. 3. 2012, 09:34:38
Aha, ale AJAX ja vůbec neovládám mohl by jsi mi to nějak ukázat?
|
||
Str4wberry Profil |
Můžeš použít tuto funkci
nacti od Chamurappiho a použít ji lehce upraveným způsobem:
function pridej(id) { nacti("katalog.php?akce=pridej&id=" + id, function (odpoved) { alert(odpoved); }); } <a href="javascript:pridej(<?=$zaznam["id"]?>);">Přidat do košíku</a> alert u zobrazit <div> a dát do něho obsah proměnné odpoved .
|
||
Háva Profil |
Nevim ale tohle mi nedela nic neni v tom nejaka chybka?
Když to mám vše v jednom souboru tak to jde ale jakmile dám ten DIV pro zobrazení do toho inkludovaného tak to nic neudělá. Přijde mi že nebere v potaz ten odkaz v této funkci function pridej(id) { nacti("katalog.php?akce=pridej?id=" + id, function (odpoved) { alert(odpoved); }); } |
||
Háva Profil |
#8 · Zasláno: 19. 3. 2012, 23:47:57
Tak nakonec pomoho místo:
nacti("katalog.php?akce=pridej?id=" toto: nacti("katalog.php?akce=pridej&id=" .
Akorát bych ještě potřeboval aby se mi po provedení všech těchto příkazů stránka znovu načetla aby se mi ty změny v DB hned zorazili. Sice to vše funguje ale změnu vdím až po stisku F5. Lze to nějak nastavit? |
||
_es Profil |
Háva:
„aby se mi po provedení všech těchto příkazů stránka znovu načetla“ Tak potom nepotrebuješ AJAX ([#4] Str4wberry), ale normálne znovunačítanie stránky cez normálny odkaz alebo cez formulár a všetky potrebné zmeny na stránke sprav na serveri - v PHP. „aby se mi po provedení všech těchto příkazů stránka znovu načetla aby se mi ty změny v DB hned zorazili.“ Na zapísanie do databázy ani na nejakú zmenu stránky sa predsa nemusí znovu načítať celá stránka, ak si tú vetu myslel tak. Prečítaj si niekde, na akom princípe funguje AJAX. |
||
Háva Profil |
#10 · Zasláno: 20. 3. 2012, 16:46:57
Tak sem si trošku přečetl o AJAXU a už je mi jasný alespoň ten princip, že slouží vlastě k tomu abych nemusel vše znovu načítat. Mě ani nejde o načtení celé té stránky ale pouze o kus kódu u košíku aby uživatel viděl jak se mu změnil. To mám ten kód taky spojit s AJAXEM?
|
||
_es Profil |
Háva:
„To mám ten kód taky spojit s AJAXEM?“ Ako spojiť? AJAX je len názov toho princípu, v tvojom prípade: JS odošle nejaké dáta PHP skriptu, ten tie dáta, za určitý čas, nejako spracuje, trebárs môže aj niečo zapísať do databázy, JS prijme nejaké dáta z odpovedi PHP skriptu a nejako ich spracuje, trebárs tak, že zobrazí zmeny v „košíku“. |
||
Háva Profil |
#12 · Zasláno: 20. 3. 2012, 18:05:44
_es:
A jak by měl teda vypadat ten JS pro zobrazení změny v košíku? Teď to mám že JS odešle data z katalog.php do kosik_zpracuj.php ten zpracuje uložení do DB a následě vypíše DIV o přidání a tím mi to končí na katalog.php bez načítání. Informace o košíku inkluduju do katalog.php |
||
_es Profil |
Háva:
„Informace o košíku inkluduju do katalog.php“ Ako „inkluduješ“? Veď si sprav PHP skript len čisto na komunikáciu ohľadom stavu košíka medzi serverom a prehliadačom (JS). „a následě vypíše DIV o přidání“ Tak môže predsa následne aj aktualizovať stav košíka v prehliadači - rovnako ako „vypísal DIV“. |
||
Háva Profil |
_es:
Mám to takhle toto je soubor katalog.php <style> .hide {display: none} .show {display: block} </style> <script> function nastavit(viditelnost, obsah) { var tvujDiv = document.getElementById('status'); tvujDiv.className = viditelnost; tvujDiv.getElementsByTagName("div")[0].innerHTML = obsah; } function nacti(url, callback) { var xhr = window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest(); xhr.open("GET", url, true); xhr.onreadystatechange = function() { if(xhr.readyState == 4) callback(xhr.responseText); }; xhr.send(""); } function pridej(id) { nacti("kosik_zpracovani.php?akce=pridej&id=" + id, function (odpoved) { // alert(odpoved); nastavit('show', odpoved); }); } </script> <div id="main"> <div id="levastrana"> <?php include "leve-menu.php";?> </div> <div id="prostredek"> <?php .... echo "<a href="javascript:pridej(<?php echo "".$zaznam['id']."";?>);"<?php echo "><img src='images/hlavni/kosik.png' alt='Nákupní košík' class='kosik']></a>"; .... ?> <div id="status" class="hide"> Zboží přidáno<br> <a href="javascript:nastavit('hide', '')">zavřít</a> </div> </div> <div id="pravastrana"> <?php include "prava.php";?> </div> </div> Zatím mi jde toto: Kliknu na ikonu košíku, JS mi spustí script kosik_zpracovani.php a po jeho dokončení se mi zobrazí DIV z katalog.php : Zboží přidáno. Informace o tom kolik je ale cena a kusů v košíku mám inkludované v leve-menu.php. Jak mám tedy udělat aby se mi to zaktualizovalo? Snad sem to popsal good už sem vtom úplně stracenej. |
||
_es Profil |
#15 · Zasláno: 20. 3. 2012, 20:18:20
Háva:
„JS mi spustí script kosik_zpracovani.php“ Tak si uprav PHP skript kosik_zpracovani.php , tak, aby vrátil také dáta, ktoré využiješ vo funkcii predanej ako druhý argument do funkcie nacti ([#6] Str4wberry), tak, aby sa košík aktualizoval. Samozrejme si na to musíš tú funkciu vhodne upraviť.
„po jeho dokončení se mi zobrazí DIV z katalog.php“ Ako „sa zobrazí DIV z katalog.php “? Veď voláš skript kosik_zpracovani.php . Najprv by si si mal ujasniť, kedy voláš aký PHP skript, čo ti vracia, a kedy aký JS kód beží, aby si sa v tom vyznal.
|
||
Háva Profil |
_es:
„Tak si uprav PHP skript kosik_zpracovani.php“ To je právě to v čem sem úplně stracenej, vůbec netuším co bych tam měl dát. „po jeho dokončení se mi zobrazí DIV z katalog.php“ No sice volam kosik_zpracovani.php ale když ten DIV umístím tam tak se nezobrazí a zobrazí se akorat když ho mám v katalog.php
|
||
_es Profil |
Háva:
Znovu, trochu inak: To, čo odošleš v GET parametroch (za otáznikom) PHP skriptu kosik_zpracovani.php , záleží len od teba. Rovnako záleží od teba, ako tie odoslané dáta ten PHP skript spracuje, čo spraví a čo vráti - to spracuje funkcia predaná ako druhý argument do funkcie nacti - napríklad v [#6] vypíše hlášku s vráteným textom - no ty namiesto toho spravíš aktualizáciu košíka.
„To je právě to v čem sem úplně stracenej, vůbec netuším co bych tam měl dát.“ No však nejaký zápis do nejakej databázy, prípadne načítanie dát z databázy, vrátenie nejakých dát v nejakom rozumnom tvare, aby ich JS ľahko spracoval... Ak sa v tom cítiš stratený, tak by možno stálo za to pouvažovať, či nie je tvorba e-shopu nad tvoje sily, lebo si na to ešte nenaštudoval dosť materiálov, prípadne ho spraviť bez JS - ak je len ten kritické miesto. |
||
Háva Profil |
#18 · Zasláno: 22. 3. 2012, 10:20:50
_es:
Tak jsem si předělal ten JS aby mi načítal script s košíkem do DIVU. Funguje mi to a ten sript se mi tam načítá, nicméně se mi načetl jenom jednou a teď když v tom scriptu něco změním tak se mi ta změna neprojeví a je to pořád stejné jako to první načtení. nacti('kosik.php','kosik'); Čili soubor kosik.php se mi zobrazí v Divu kosik ale jakmile něco změním ve srciptu kosik.php tak se mi ta změna neprojeví, nenačte. Co s tím? |
||
_es Profil |
#19 · Zasláno: 22. 3. 2012, 10:24:35
Háva:
„nacti('kosik.php','kosik');“ Funkcia nacti , na ktorú ťa v [#6] Str4wberry odkázal, má druhý argument funkciu.
|
||
Háva Profil |
To vím já jsem si ji upravil aby to přímo směřovalo do toho divu kosik
function nacti(stranka, kam) { var httpRequest; if(typeof window.ActiveXObject != 'undefined') { httpRequest = new ActiveXObject("Microsoft.XMLHTTP"); } else { httpRequest = new XMLHttpRequest(); } httpRequest.open("GET", stranka, true); httpRequest.onreadystatechange= function () { processRequest(httpRequest, kam) }; httpRequest.send(null); }} |
||
_es Profil |
#21 · Zasláno: 22. 3. 2012, 13:56:12
Háva:
„processRequest(httpRequest, kam)“ No a funkcia processRequest je definovaná kde a robí čo?
„ale jakmile něco změním ve srciptu kosik.php“ Ako, čo, kde zmeníš? |
||
Háva Profil |
Takto je celý javasript:
function nacti(stranka, kam) { var httpRequest; if(typeof window.ActiveXObject != 'undefined') { httpRequest = new ActiveXObject("Microsoft.XMLHTTP"); } else { httpRequest = new XMLHttpRequest(); } httpRequest.open("GET", stranka, true); httpRequest.onreadystatechange= function () { processRequest(httpRequest, kam) }; httpRequest.send(null); } function processRequest(httpRequest, kam) { if (httpRequest.readyState == 4) { if (( httpRequest.status >= 200 && httpRequest.status < 300 ) || httpRequest.status == 304) { if (typeof kam == 'string') { document.getElementById(kam).innerHTML = httpRequest.responseText; } if (typeof kam == 'function') { kam(httpRequest.responseText); } } else { alert("Chyba pri nacitani stanky " + httpRequest.status +" : "+ httpRequest.statusText); } } else { if (typeof kam == 'string' && kam != '') { document.getElementById(kam).innerHTML = 'čekejte...'; } } } A ještě jedna věc místo českých znaků tam mám černé otazníky, musím někde změnit kódování? |
||
_es Profil |
#23 · Zasláno: 23. 3. 2012, 07:50:50
Háva:
„když třeba v kosik.php přidám nějaký text nebo zapíšu do DB tak se mi ta změna neprojevuje.“ Ako „neprejavuje“? Tak predsa, ak niečo zmeníš v PHP skripte, tak sa musí najprv do prehliadača po jeho zmene znovu načítať, aby bola jeho zmena nejako zobrazená. Alebo to je len v niektorých prehliadačoch? Potom by možno pomohlo: Je problém v cachování? Nejaký je v tom chaos. Ktorý PHP skript vlastne vracia aktuálny stav košíka? Najprv AJAXom načítavaš katalog.php , potom kosik_zpracovani.php , potom kosik.php - aby sa v tom niekto vyznal. Mal by si najprv ujasniť, čo sa deje v prehliadači a čo na serveri.
Obávam sa, že sú tvoje vedomosti na vytvorenie e-shopu nedostatočné a mal by si si toho najprv trochu viac naštudovať, než začneš robiť takú náročnejšiu vec. |
||
Časová prodleva: 12 let
|
0