Autor Zpráva
Ikki
Profil
Ahoj,
zprávu jsem již 3x upravil, protože se sem kód nevleze.

Přikládám ho teda jako odkaz na pastebin = pastebin.com/pYxSfYC8

Problém: Mám dvě groupy pro checkbox - 1. Volba odběru, 2. Volba platební metody.
No při zvolení odběru nevypočítá cenu, při zvolení platební metody a následně odběru cenu vypočítá ale v celkové ceně a ceně bez DPH zobrazí NaN.

Potřebuji aby se správně vypsalo ->

poštovné -> 399kč (hodnota zvoleného odběru) + 79kč (v případě dobírky, jinak nezobrazovat).
Cena bez DPH -> z celkové ceny / 1.2 (tady je problém v tom, že nejsem schopný vypočítat celkovou hodnotu)
Celkem za objednávku -> Nikdy nevypíše správnou cenu, pouze v případě jak jsem psal výše, ale to je nežádoucí, potřebuji aby se výpočet provedl automaticky při jakémkoli zvolení checkboxů a ne, že si vyberu odběr, metodu a musím ještě jednou zvolit odběr nebo celý proces udělat 2x abych dostal výsledek.


Kód je od klienta a je to poslední nefunkční věc na jeho starém systému, který se snažíme zrekonstruovat. Bohužel neovládám javascript a věnuji se převážně backendu (PHP) ve kterém se s tím moc nesetkávám a tahle patlanina mi ani pořádně nedává smysl - za mě je to hrozně napsané, ale nemohu posoudit.

Budu rád, když mi někdo pomůže, případně mě co nejvíce nakopne jak to napravit tak aby to fungovalo jako v eshopu při výběru odběrového místa a platební metody a zobrazilo cenu.

Díky moc!
Davex
Profil
Ikki:
Přikládám ho teda jako odkaz na pastebin
Stačilo by odkázat na stránku, kde se problém projevuje. Skript na pastebin vypadá nekompletní a při řešení problému s JavaScriptem je PHP irelevantní.
Ikki
Profil
Odkaz k náhledu ZDE - testovací verze, tedy tam bude asi více chyb než na ostré, ale kód je totožný pro tuto funkci.

Přihlašovací údaje: admin@admin
lionel messi
Profil
Ikki:
Odkaz k náhledu ZDE

Hádže chybu 404.
Ikki
Profil
lionel messi:
Přihlásil ses na prvním kroku? Je nutné provést veškerý postup. Od 1. po 3., kdy je v prvním nutno nahrát fotografii.
Nezasílal jsem ty údaje jen tak pro parádu, hele *úsměvný smajlík*
Tomášeek
Profil
Ikki:
Tipuji, ze na “prvním kroku” viděl 404.
Ikki
Profil
Tomášeek:
Na serveru není evidován žádný výpadek, ani chyba od doby co jsem příspěvek přidal až do teď, tedy úplně netuším, kde by se tam mohl zobrazovat error404. Některým uživatelům se ale stává, že se stránka nedokáže načíst a je potřeba jiné IP adresy (netušíme proč, ale stává se to 1/100), tedy by to mohl být ale neměl by být tento případ.

I tobě to hází 404? Pokud by se to ukázalo více lidem, tak to budu muset řešit.
Davex
Profil
Ikki:
Adresa https://www.build.shopinet.sk/objednat-fotky.html?krok=odber se přesměrovává na adresu, kde nic není https://www.build.shopinet.sk/nahrat.
Ikki
Profil
Davex:
V tom případě netuším kam Vás to směruje, nad tímhle už kontrolu nemám, takže se omlouvám.

Zkuste normálně přes index -
www.build.shopinet.sk to by mělo normálně fungovat.

Při druhém kroku je potřeba se přihlásit. Stránka běží, jen ty odkazy očividně nějak zlobí při redirectu. Každopádně při indexu, přihlášení až do třetího kroku by to už mělo být v pořádku. Vyzkoušejte prosím.
Tomášeek
Profil
Ikki:
Konzole ti hlásí milión chyb, u výběru platební metody ti chybí atribut data-price, který mají dopravní metody, atd. Hledal bych tímto směrem.

Pokud JS vrací NaN, snažíš se počítat s nečísly. Vypiš si průběžně proměnné, které ti do výpočtu vstupují (třeba do konzole, nebo alertem) a hledej, kde ti tam vstupuje nečíselný vstup.
Ikki
Profil
Tomášeek:
Ahoj, díky za radu.

Teď už řeším jen jeden problém.
A to ten, že -

Aby se mi zobrazil poplatek, musím odkliknout prvně platební metodu, potom až musím odkliknout způsob doručení, no a když chci změnit způsob platby, tak se sice číslo změní, ale v celkové ceně se nevypočte a musím znovu odkliknout způsob doručení.

Aktuálně už žádný error na ostré verzi není.
Nějaké rady, prosím?


window.addEvent("domready", function() {


                // hooknout radiobuttony pro postovne
                $("theform").getElements(".test").each(function(item){



                  // event
                  item.addEvent("click", function(){         


$("theform").getElements(".choice").each(function(item){
 item.addEvent("click", function(){  
   getChoice = parseFloat($(this).get("data-price"));

                    $("postovneTest").set("html", "<td style=\"padding: 10px;vertical-align: middle;text-transform: uppercase;border-right: 1px solid #e2e2e2;background: #f5f5f5;border-bottom: 1px solid #e2e2e2;color:#777;text-align:left;font-size:16px;font-weight:bold;padding-left:10px\"><strong><input type=\"hidden\" class=\"testing\" id=\"testing\" value=\"" + $(this).get("data-price") + "\" data-price=\"" + $(this).get("data-price") + "\"><span style=\"text-align: left;font-size: 25px;white-space: nowrap;font-size:14px\">Poplatek</span></strong></td><th style=\"text-align:left;font-size: 15px;padding: 10px;vertical-align: middle;border-right: 1px solid #e2e2e2;border-bottom: 1px solid #e2e2e2;color:#777;font-weight:400;text-align:right\">" + formatPrice($(this).get("data-price")) + "</td>");
                    $("postovneTest").setStyle("display", "table-row");
                  
                
});
});

                    // sestavit radek s cenou postovneho ----------------------

                    $("postovneInfo").set("html", "<td style=\"padding: 10px;vertical-align: middle;text-transform: uppercase;border-right: 1px solid #e2e2e2;background: #f5f5f5;border-bottom: 1px solid #e2e2e2;color:#777;text-align:left;font-size:16px;font-weight:bold;padding-left:10px\"><strong><span style=\"text-align: left;font-size: 25px;white-space: nowrap;font-size:14px\">Poštovné</span></strong></td><th style=\"text-align:left;font-size: 15px;padding: 10px;vertical-align: middle;border-right: 1px solid #e2e2e2;border-bottom: 1px solid #e2e2e2;color:#777;font-weight:400;text-align:right\">" + formatPrice($(this).get("data-price")) + "</td>");
                    $("postovneInfo").setStyle("display", "table-row");

                    
                    // sestavit radek se slevou -------------------------------
                    if (sleva != null) {
                      var titleText = "Sleva <strong>";
                      if (sleva.percent > 0) titleText += sleva.percent + "%";
                      else titleText+= formatPrice(sleva.fixed);
                      titleText += "</strong> z poštovného";
                      
                      var title = new Element("td", {html: titleText, "class":"l"});
                          
                      var price = 0;
                      if (sleva.percent > 0) price = -1 * (sleva.percent/100) * $(this).get("data-price");
                      else price = -sleva.fixed;
                      
                      if (-price > $(this).get("data-price"))
                        price = -1 * $(this).get("data-price");
                      
                      var prc = new Element("td", {html: formatPrice(price), "style":"text-align:right;font-size: 15px;padding: 10px;vertical-align: middle;border-right: 1px solid #e2e2e2;border-bottom: 1px solid #e2e2e2;color:#777"});                    
                      
                      $("postovneSleva").empty();       
                      $("postovneSleva").adopt(title, prc); 
                      $("postovneSleva").setStyle("display", "table-row");
                    } else price = 0;
                      

                    // sestavit radek s celkovou cenou ------------------------
                    var totalPrice = total + price + parseInt(document.getElementById("testing").value) + parseFloat($(this).get("data-price"));

                    $("postovneCelkem").set("html", "<th style=\"width:75%;max-width:75%;min-width:75%;padding: 10px;vertical-align: middle;text-transform: uppercase;border-right: 1px solid #e2e2e2;background: #f5f5f5;border-bottom: 1px solid #e2e2e2;color:#777\"><strong><span style=\"text-align: left;font-size: 25px;white-space: nowrap;font-size:14px\">CELKEM ZA OBJEDNÁVKU</span></strong></th><th style=\"width:25%;max-width:25%;min-width:25%;text-align:right;font-size: 25px;padding: 10px;vertical-align: middle;border-right: 1px solid #e2e2e2;border-bottom: 1px solid #e2e2e2;color:#777;background:#f5f5f5;letter-spacing:1.8px\">" + formatPrice(totalPrice) + "</th></tr>");
                    $("postovneCelkem").setStyle("display", "table-row");
Tomášeek
Profil
Ikki:
Aktuálně už žádný error na ostré verzi není.
Pokud tou verzí myslíš stále stejný odkaz (build.shopinet.sk), tak tam je stále konzole plná a nic se od minule nezměnilo.

Ale i kdyby, tak ten kód, co jsi sem dodal, je takový paskvil, že nemám moc chuť se jím probírat. Zahodit a napsat znovu. Vždyť přeci spočítat cenu je otázkou jednoho řádku (price + doprava.price + platba.price - sleva). Nepotřebuješ na to 60 řádků JS, kde půlka kódu vypisuje nějaké HTML (proč proboha?), vážně jsem to při prvním čtení přestal brát asi na řádku if (-price > ...), kde jsem si řekl „WTF, -price“?

Hint:
Dopravu a platbu vybíráš z radií, čili getElementsByName, toto projít cyklem, podívat se, která položka je checked a z té si vzít cenu dopravy a platby. Cenu položek v košíku znáš z předchozího kroku. A sleva se někde zadává, tu taky znáš. Pak ty cifry jen sečíst.
Ikki
Profil
Jak říkám, není to můj kód a i tohle je už ořezané. Nicméně jak jsem psal. Počítání funguje, v tom problém není. Problém je v tom klikání. Musím všechno odklikat 2x aby se zobrazila celková cena, pak při změně platební metody už se ale cena nemění a je potřeba prokliknkut způsob dopravy.
Kcko
Profil
Ikki:
> Jak říkám, není to můj kód a i tohle je už ořezané
Mno a? Zrefactoruj , napiš znovu.

Dřív nebo později Ti tam vznikne další problém, nebo bude potřeba to upravit jinak, přidat jinou funkcionalitu a budes to řešit znovu.
Je to odporná špageta a nemá smysl v tom dál pokračovat a hledat v tom chybu, protože jich tam bude víc a v tomhle svinstvu se nikdo hrabat nebude.
Ikki
Profil
Kcko:
Děkuji za informaci, kterou vím, ale nijak mě nebere.
Ten kód má v řádech tisíců řádků. Probírat se tím jen kvůli tomu, aby fungoval výpočet při kliknutí na jakýkoliv radio button mi za to nestojí a už i tohle je nad rámec placené práce.

Na tvou otázku "no a" ti odpovím pouze "no b". Nemáš-li k tomu co říct nebo nejsi alespoň schopný nasměrovat, nevyjadřuj se. Je tu psáno, že se jedná o poslední část celku - tedy nic dalšího nevznikne. Zároveň je to hnus, který nemá cenu opravovat a není to ani náplní mé práce. A nakonec dodám, že vše potřebné funguje a je potřeba jen zajistit ty radio buttony. Tedy jaký má tvůj komentář význam v takovémto případě?

Dík za vysvětlení zbytečného komentáře a snad ten další bude obsahovat radu, nebo bude mít alespoň nějakou přidanou hodnotu. Tenhle stál za prd . Měj pěkný den.
Davex
Profil
Ikki:
Mohlo by to být tím, že se elementům .choice přiřazuje akce k události click až po kliknutí na elementy .test. Je to tam nějak divně zanořené a pokud se má cena počítat nezávisle na jednom nebo druhém, tak musejí být nezávislé i ty akce po kliknutí.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0