Webshop (namjerno neću otkriti detalje u naslovu :D )

Bok svima,

Već 2 dana pokušavam na netu naći neki tutorial za izradu webshopa, ali nešto u obliku tečaja ili sl. sa opisanim koracima u teoriji ili praksi (može biti na bilo kojem programskom jeziku).

Zašto?

(sorry na malo osobne povijesti hehe)
Pa moj najveći problem je što sam uvijek lutao između web dizajna/programiranja i sistem administracije pa se zbog posla nisam stigao posvetiti ozbiljnijem učenju i “ostao sam” u razdoblju klasičnog ASP-a. Webove sam uglavnom radio u fušu i naučio sam ono što mi je trebalo za pojedini web. CSS i HTML rasturam, a klasični ASP znam vrlo dobro. No kad su mi trebali webshopovi, uvijek sam našao nešto gotovo: Presta, Magento, WP plugins…

E, a sad sam u poziciji da ne mogu koristiti ništa gotovo zbog specifičnosti situacije (probao sam sa Prestashopom, ali morao sam odustati) i fale mi još neke stvari kod dodavanja u košaricu. I siguran sam da ću ispetljati nešto, ali ću se u međuvremenu satrat od muke. Mislio sam da ću na webu začas naći nešto ovog tipa, ali NEMA J* ŠANSE… previše reklama i koječega.

Thnx unaprijed,

ex_profa

BTW, ako netko kojim slučajem ima želju pružiti pomoć, neka javi ovdje ili na pm pa ću objasniti gdje sam zapeo.

Koji programski jezik i gdje si zapeo? A što se tiče tvog glavnoga pitanja mislim da to nećeš nigdje naći osim ako ti ovo ne bi možda pomoglo:

[quote=“ex_profa”]

BTW, ako netko kojim slučajem ima želju pružiti pomoć, neka javi ovdje ili na pm pa ću objasniti gdje sam zapeo.[/quote]

Pa postaj ovdje na forumu ima ljudi koji su radili sa različitim webshopovima.

Evo baš sam i krenuo pisati pa vidim da ste i vi predložili isto.

Jezik je ASP/VBscript. Znači, artikli su iz baze i izlistaju se na webu sukladno odabranoj kategoriji. I sad imaš opciju da preko input polja uneseš količinu i stisneš košaricu koja pokrene potrebnu skriptu. Useri su također napravljeni i svaki user prilikom logina naravno dobije svoj session i sustav ga ne pušta dodavati u košaricu ako user nije logiran (takva je bila želja korisnika jer nelogirani useri ne smiju vidjeti cijene).

Ja bih to sad napravio ovako:

  • u posebnu (temp) tablicu bi zapisao red sa session ID, session username, šifra i naziv artikla, cijena i količina, te možda i međusuma.
  • kod dodavanja novog artikla u košaricu bih dodao još jedan takav redak
  • itd.
  • kod pregleda narudžbe, bih sve to lijepo zbrojio
  • a kod realizacije narudžbe bih kreirao novi dokumet u novoj tablici, a ove redove gdje je zapisan spomenuti session ID, bih obrisao, za slučaj da se session ID ne ponovi opet.

Nekako mi se čini logično, a s druge strane totalno blesavo.

[quote=“CreatifCode”]osim ako ti ovo ne bi možda pomoglo:


[/quote]
thnx, pogledat ću

[quote=“ex_profa”]
Ja bih to sad napravio ovako:

  • u posebnu (temp) tablicu bi zapisao red sa session ID, session username, šifra i naziv artikla, cijena i količina, te možda i međusuma.
  • kod dodavanja novog artikla u košaricu bih dodao još jedan takav redak
  • itd.
  • kod pregleda narudžbe, bih sve to lijepo zbrojio
  • a kod realizacije narudžbe bih kreirao novi dokumet u novoj tablici, a ove redove gdje je zapisan spomenuti session ID, bih obrisao, za slučaj da se session ID ne ponovi opet.[/quote]
    Ja bih uradio isto tako samo što bih session zapis skratio
    Temp tablica
    session_id, proizvod_id, količina

Kod realizacije narudžbe
Narudzba tablica:
korisnik_id, narudzba_id, proizvod_id, kolicina, datum_narudzbe, ukupno, pdv, ukupno_pdv

i to je to

prilikom pregleda narudžbe onda preko id proizvoda povlačiš sve ostalo što je vezano uz proizbod, opis, cijena, naziv itd.

Ne znam što te brine session id ionako jednom kad se user odjavi ili ugasi browser taj se session uništava.

Thnx, čini se ok.

Session id me brine iz 2 razloga:

  • iako sam se jako protivio, korisnik želi da session ostane aktivan tijekom radnog dana, znači 10-ak sati (neće shop imati hrpetinu korisnika, pa možda server neće ni osjetiti količinu sessiona… ostaje da vidimo). U slučaju 2-3 narudžbe u danu, korisnik bi mogao imati problema sa dupliciranjima… pogotovo ako ne koristi logout.
  • 2 razlog je što nemam pojma da li se ikada session id ponavlja… ne bih volio saznati za pola godine :smiley:

E pa zvuči ok, možda bi trebao imati dvije tablice jednu za košaricu, drugu za proizvode u košaricu.
Ovako sve podatke za košaricu moraš upisivati i kod svakog proizvoda.
Povezivanje košarice i sessiona bi radio preko id od košarice.
Znaći ako user doda nešto u košaricu, provjeriš dali je ID u sessionu prazan, ako jest insert u bazu novu košaricu, povučeš ID preko last insert id sql naredbe.

Isto tako kad se user logira pogledaš dali postoji neki ID u tablici za košaricu vezan za tog korisnika, ako postoji samo dodjeliš ID košaricu u session košaricu i opet korisnik ima puno košaricu prije logouta.

Da malo idem dublje u analizu zašto bi tako napravio radi o jednoj od temeljnih stvari u OOP pristupu. Loose coupiling. Čim spojiš neka dvije stvari u jednu gubiš na fleksibilnosti u budučnosti.
Znaći svaka proizvod treba podatke o košarici (zbog tight coupuling), svaka košarica treba session (tight coupling).
I na kraju sa logičkog pogleda na stvar dobivaš da košarica ne može postojati bez sessiona i proizvoda.
No u budučnosti će ti možda zatrebati prazan objekt košarice, koji nemožeš imati bez session i proizvoda.

I moliš bodga da ti u međuvremenu nepukne veza, jer ako pukne onda u session tablici imaš zapis da u košarici postoji nešto, a u košarici nema ništa. I šta onda?

U tvom slučaju to izgleda ovako
Tablica session
session_id, user_id, kosarica_id

Tablica kosarica
session_id ili user_id, kosarica_id, proizvod_id, datum, kolicina

A u mene ovako:
session_id, korisnik_id, kosarica_id, proizvod_id, datum, kolicina
Čak ne mora niti tako, nego može
session_id, session_data i u session_data napraviš serijaliziran upis.

Sad kod tebe treba uvijek dva inserta, i dva selecta minimalno, a kod mene jedan upis, jedan select minimalno. Sa strane optimizacije, znajući da je insert jedan od sporijih SQL upita, pitam se što je bolje.
Ako ideš sa serijalizacijom možeš imati praznu košaricu, punu košaricu, ovaku onaku, kako ti volja, još uz sve to skupa nemoraš niti koristiti bazu, nego spremaš podatke od sessiona u temp folder. Itd. Itd. Itd.

[quote=“CreatifCode”]I moliš bodga da ti u međuvremenu nepukne veza, jer ako pukne onda u session tablici imaš zapis da u košarici postoji nešto, a u košarici nema ništa. I šta onda?
[/quote]
Dogoditi će se ništa. Baš ništa se neće. Košarica neće postojati, user neće moći checkout, ispast će napuštena košarica ili čak može da pri sljedećoj korisničkoj interakciji se potraži košarica.

A ja sam pogledao sa kuta OOP kako smatram da bi bilo najbolje, ako ne radi u OOP, može i čist drugačije, a OOP nije baš previše poznat po optimiziranom kodu već se to pokušava nadoknaditi na drugim djelovima.

U mojem slučaju to izgleda ovako
Tablica košarica:
user_id, kosarica_id

Tablica košarica_proizvod
kosarica_id, proizvod_id, datum, kolicina

I malo si ga izvrtio jer nitko nije spomenuo da bi košarica bila poseban objekt prije mene.
Već se session, košarica i proizvod stavilo pod jedno, a ja ništa drugo nisam učinio nego to razdvojio zato jer se tako to radi u OOP jeli se ovdje radi o OOP neznam, ali nekim automatizmom razdvajam sve pojmove jer se tako radi u OOP i to je ona osnova za rješavanje problema.

“za slučaj da se session ID ne ponovi opet” - ja bih to rijesio tako sto bih spremio ip od korisnika u session i kada otvara taj session(tj kad server nadje na njegovom racunalu taj cookie za session) samo provjerim jel ip isti, ako nije unistim session jer je ocito da nece onaj korisnik koji je imao taj session id vise dobit isti… problem je samo kad ti se resetira ip(svaka 24h kod neki providera), ali to vecinom bude u noci tako da ne vidim tu neki problem…

Ne bih niti spremao podatke u temp tablicu, vec sve u session, jedino ako se radi o jako puno podataka onda mozda i bih…

moje razmisljanje, bez da kompliciram, nije da izbjegavam mysql ili tako nesta…

Session ID možeš i sam genrirati ne moraš koristiti standardni ASP Session.SessionID tako da tu nemaš nekog prevelikog razloga za brigu.

[quote=“gorrc”]Dogoditi će se ništa. Baš ništa se neće. Košarica neće postojati, user neće moći checkout, ispast će napuštena košarica ili čak može da pri sljedećoj korisničkoj interakciji se potraži košarica.

A ja sam pogledao sa kuta OOP kako smatram da bi bilo najbolje, ako ne radi u OOP, može i čist drugačije, a OOP nije baš previše poznat po optimiziranom kodu već se to pokušava nadoknaditi na drugim djelovima.

U mojem slučaju to izgleda ovako
Tablica košarica:
user_id, kosarica_id

Tablica košarica_proizvod
kosarica_id, proizvod_id, datum, kolicina

I malo si ga izvrtio jer nitko nije spomenuo da bi košarica bila poseban objekt prije mene.
Već se session, košarica i proizvod stavilo pod jedno, a ja ništa drugo nisam učinio nego to razdvojio zato jer se tako to radi u OOP jeli se ovdje radi o OOP neznam, ali nekim automatizmom razdvajam sve pojmove jer se tako radi u OOP i to je ona osnova za rješavanje problema.[/quote]

previše si zaglibio sa tim OOpom, kod dizajna ovakvih aplikacija najvažnija je dobra struktura, dizjan, baze, a onda se prema tome razvija kod. Barem koliko sam ja upoznat sa tim. Najčešće usko grlo u aplikacijama i je ta komunikacija između app i baze. Đaba tebi 385 objekata i klasa ako oni imaju neoptimiziranu bazu kojoj treba 5 minuta kako bi izvukla podatke van.

Hvala na odgovorima. Budem ovu diskusiju prokomentirao sutra…
Nego, kako napraviti da se stanje košarice zbraja gore u headeru u nekom divu? Ništa mi ne pada na pamet s čime da to punim u realnom vremenu :expressionless:

A može se aplikacija razvijati na puno načina, no sa pristupom kakav sam ja naveo 15% na popust košarce je kamilica za ugradit. Dok sa druge strane ako želi imati tablicu sa id sessio_id, proizvod_id, gdje upisati popust?
U kodu, negdje hardkodirati na serveru.
Moja tablice su sposebne podnjeti popust na košaricu i popust na proizvod. Isto tako košarica nije sposobna danas sutra za neki vanjski API jer ovisi o sessionu. Ukoliko se promjeni način handlanja sessija, recimo autogenerate, opet sve pada u vodu.
Itd…,
Samo zbog jedne stvari session_id,proizvod_id je nešto na čemu se temelji košarica.

Nedavno sam baš radio aplikaciju u kojoj o takvim stvarim nije bilo potrebe za brinuti jer kod kad se završi ide gore, neće se mjenjati, no kad je baš webshop u pitanju koji će se možda koristiti i negdje drugdje.
I naradio sam se sa webshopovima u zadnje vrijeme i nedavno bio neki freelance posao OS commercu baš trebalo te popuste na različite cijene ugraditi i lik ga nadrobio 3 kilometra teksta.
A uz ovaj moj primjer trebalo bi samo izračunati cijenu svih proizvoda i ako je cijena veća od recimo 1000kn, u košaricu tablici imati polje popust, i staviti popust 10%.
To je ta cijena koju optmizacija mora platiti ako se ide raditi nešto što se treba moći kvalitetno održavati i administrirati.

Nema smisla niti imati optimiziranu bazu ako je kod na serveru koju ju ubija.

Gledam ljudi stalno kukaju po bazi, kupuju GB i GB za server da bi baza radila, a da se koriste sve one mogučnosti koje mysql kao baza pruža bila bi to druga priča.
Mislim zašto sajt sa par milijuna pageviewa mjesečno može imati problem sa bazom.
Može jer je baza napravljena na razini mysql 3.1.
Trebao bi biti samo jedan čovjek koji bi za ozbiljnije projekte radio samo na bazi, još nisam čuo niti za jedan posao od kvalitetnog HR studija da traže takav profil developera.
Na kraju klijent plaća održavanje…

sto nije jednostavnije staviti bazu kod sebe lokalno i povezat
je sa webserverom makar generirala dio webkoda kod sebe ?

[quote=“ninohr”]sto nije jednostavnije staviti bazu kod sebe lokalno i povezat
je sa webserverom makar generirala dio webkoda kod sebe ?[/quote]

???

pa onak sam razmisljao kad su ovdje nabacili dilera sa par tisuca pozicija,
vjerovatno partnerskim webom, maloprodajom puta x komada, web shop,
servisi i slicno da se baza, umjesto na webu, negdje instalira i odrzava
lokalno u firmi da se nije ovisno o providerovoj zelji, volji, raspolozivim
resursima. U uploadu megabitni lizline danas nije skup a generiran html ili
query nije velika kolicina podataka

cemu updejtad bazu na webu ako se na x poziciji sa raznih izvora i
nacina komunikacije kontinuirano mjenjaju podaci i refreshaju a web
je mozda 20% provajdanje i 5% prometa ?

Pazi sad i ovu jednu situaciju što mi se dogodila danas.
Imam ovaj open source project i imam service. Service je hardokiran da radi sa YUI 3 JS frameworkom. Znam da je to sranje, ali radi i nije mi se dalo više petaljti sa time.
Danas opet me to koči u daljnjem razvoju.
I dva sata potrošim kako da to ostavim da bude tako kako jest, da zaobiđem, već pišem druge metode u controlleru pa ću pozivati te druge metode u budučnosti.
I onda jebiga ajmo to rješiti kako spada. Service ne smije znati za JS framework u kojem isporučuje javascript iako je cijeli projekt napravljen u jednom JS frameworku.
Imam template engine koji generira javascript kod, možda je to pravo mjesto. Prebacio to tamo, stavio u boostrap file da kaže framewroku sa koji frameworkom radi, da JS template engine može drugačije postupati.
I što sada, odvojio sam kod i moja metoda može ostati kakva jest.
Ne. Sada cijeli moj framework nije ovisan o moje JS library, već sutra mogu uzeti JQuery.
Pazi koja mala sitnica, a izblokira cijeli razvoj.
98.99% developera bi napisao novu metodu i idemo dalje, a niti 5 minuta posla i cijeli PHP framework je postao neovisan o JS frameworku.
A da bi uopće znao što sam napravio čovjek jednostavno mora zaglibiti u OOP.

Pazi sad i ovu jednu situaciju što mi se dogodila danas.
Imam ovaj open source project i imam service. Service je hardokiran da radi sa YUI 3 JS frameworkom. Znam da je to sranje, ali radi i nije mi se dalo više petaljti sa time.
Danas opet me to koči u daljnjem razvoju.
I dva sata potrošim kako da to ostavim da bude tako kako jest, da zaobiđem, već pišem druge metode u controlleru pa ću pozivati te druge metode u budučnosti.
I onda jebiga ajmo to rješiti kako spada. Service ne smije znati za JS framework u kojem isporučuje javascript iako je cijeli projekt napravljen u jednom JS frameworku.
Imam template engine koji generira javascript kod, možda je to pravo mjesto. Prebacio to tamo, stavio u PHP boostrap file da kaže framewroku sa kojim JS frameworkom radi.

I što sada, odvojio sam kod i moja metoda može ostati kakva jest.

Ne!!!. Sada cijeli moj framework nije ovisan o mojem JS library, već sutra mogu uzeti JQuery.
Pazi koja mala sitnica, a izblokira cijeli razvoj.
98.99% developera bi napisalo novu metodu i idemo dalje, a niti 5 minuta posla i cijeli PHP framework je postao neovisan o JS frameworku.
A da bi uopće znao što sam napravio čovjek jednostavno mora zaglibiti u OOP.

I nema mi većeg gušta kad radim na nekom projektu u kojem je dizajn totalno nebitan. To samo ide…, mislim gdje može zapeti, pa samo tipkaš koda:)


Copyright © 2020 WM Forum - AboutContact - Sponsored by: Mydataknox & Webmaster.Ninja