 |
Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc Comunitatea PHP Romania
|
| Subiectul anterior :: Subiectul următor |
| Autor |
Mesaj |
huleacatalin
Data înscrierii: 26/Aug/2007
Mesaje: 25
Locație: Bucuresti
|
| Trimis: Dum Aug 26, 2007 1:42 pm Titlul subiectului: Katyshop - solutie de comert online |
|
|
Salut,
Eu sunt Catalin Hulea si de ceva timp lucrez la o solutie de comert online care se numeste Katyshop. De curand am reusit sa ajung la o versiune care, zic eu, poate fi prezentata pe forumuri si supusa evaluarii dumneavoastra :)
Aici puteti vedea un demo al aplicatiei, in functiune:
fishbite [dot] 3x [dot] ro/work/web/
Iar aici este publicat proiectul pe sourceforge, de unde puteti downloada codul sursa:
katyshop [dot] sourceforge [dot] net/index.html
Care sunt particularitatile:
Am incercat sa scriu cat mai simplu si cat mai putin cod, in totalitate orientat obiect, in asa fel incat programatorul sa invete repede si sa lucreze usor pe solutia aceasta, fie pentru customizarea designului, fie pentru modificarea bazei de date si adaugarea de noi obiecte Business-Logic.
Acestea sunt caracteristicile care deosebesc Katyshop de alte solutii e-commerce existente, deoarece multe dintre ele nu sunt orientate obiect, sau sunt incarcate cu prea multe clase, greu de invatat si pe care se lucreaza greu.
Va invit sa incercati acest produs si sa imi spuneti daca va place codul. Astept sugestii pentru imbunatatirea lizibilitatii si, bineinteles, voi aprecia nespus de mult orice BUG pe care mi-l puteti comunica.
Rezolv si implementari de magazine online folosind Katyshop, la preturi accesibile, insa in acest scop voi publica un alt anunt la o alta sectiune a forumului.
Contact: huleacatalin-AT-users-dot-sourceforge-dot-net
Multumesc :) |
|
| Sus |
|
huleacatalin
Data înscrierii: 26/Aug/2007
Mesaje: 25
Locație: Bucuresti
|
| Trimis: Dum Aug 26, 2007 1:45 pm Titlul subiectului: |
|
|
| Imi cer scuze pentru adresele ciudate, cu [dot] , insa abia mi-am facut contul si siteul imi interzice sa public adrese de siteuri. Sper sa nu ma considerati spammer. |
|
| Sus |
|
UnD3aD
Data înscrierii: 10/Apr/2006
Mesaje: 353
Locație: Cta
|
| Trimis: Dum Aug 26, 2007 2:49 pm Titlul subiectului: |
|
|
1. de ce as folosi eu katyshop cand as putea folosi altele mult mai bune? gen oscommerce... ?
2. ce cauta cvs-urile in sursa?
3. codul arata cam rau...
Cod: /**
* This is a singleton class, so the constructor is private
* @access private
*/
function Application()
{
}
bun si unde e private? oricum vad ca , codul e scris pentru php4 asa ca nici nu ai private...
Cod:
/**
* Singleton
* @return Application
*/
function createInstance()
{
global $Application;
if(!is_a($Application, "Application"))
{
$Application = new Application();
$Application->init();
}
return $Application;
}
nu arata asa un singleton...
Cod: function open()
{
$this->con = mysql_connect($this->host, $this->user, $this->pass);
if(!$this->con)
return false;
elseif(!mysql_select_db($this->name, $this->con))
return false;
else
return true;
}
Cod: function query($q)
{
mysql_select_db($this->name, $this->con);
$res = mysql_query($q, $this->con);
if($res === false)
{
Logger::err("Database::query() failed with error message: " . mysql_error(), __FILE__, __LINE__);
Logger::err("Query was: $q", __FILE__, __LINE__);
die(mysql_error());
}
return $res;
}
de ce mai selectezi db-u inca o data? de ce die(mysql_error()); ?
etc etc etc... |
|
| Sus |
|
huleacatalin
Data înscrierii: 26/Aug/2007
Mesaje: 25
Locație: Bucuresti
|
| Trimis: Dum Aug 26, 2007 3:25 pm Titlul subiectului: |
|
|
:)
Multumesc pentru raspuns. Toate criticile sunt bine-venite in ideea ca ma vor ajuta sa ma perfectionez. Acum... pe bune vorbind, ideea ca osCommerce ar fi bun sau nu, este preferinta ta personala - asa cum unora le place pestele, exista si oameni carora nu le place pestele, deoarece nu ii suporta mirosul.
Codul este scris pentru compatibilitate cu PHP 4 si 5, nu pot folosi private. Totusi l-am scris ca si comentariu ca sa inteleaga si altii, ca aceasta clasa nu e menita sa fie instantiata prin constructor. Am nevoie de putin ajutor aici: Nu e de ajuns sa spui "Nu asa arata un singleton". Mi-ar fi de ajutor daca ai spune si cum arata un singleton, in asa fel incat la versiunea viitoare imi voi corecta greseala. As aprecia, stiu ca mai am de invatat :)
die(mysql_error()) ca sa moara, in felul acesta sunt sigur ca nu am erori pe site. Daca ar fii vreo eroare, nu ar merge siteul deloc, dar din moment ce am die() si siteul inca merge atunci e totul ok si stiu ca nu-mi raman erori "ascunse".
In legatura cu restul criticilor: CVS-uri in sursa, mysql_select_db() de 2 ori - sa traiti am inteles! Iti multumesc ca le-ai scos in evidenta, se vor rezolva la urmatoarea versiune. Orice observatii si daca gasiti mai ales buguri sunt binevenite. |
|
| Sus |
|
UnD3aD
Data înscrierii: 10/Apr/2006
Mesaje: 353
Locație: Cta
|
| Trimis: Dum Aug 26, 2007 5:29 pm Titlul subiectului: |
|
|
| un site nu trebuie sa "moara" niciodata... |
|
| Sus |
|
huleacatalin
Data înscrierii: 26/Aug/2007
Mesaje: 25
Locație: Bucuresti
|
| Trimis: Dum Aug 26, 2007 5:34 pm Titlul subiectului: |
|
|
| Un site nu trebuie sa mearga mai departe cu erori. Am mult mai multa incredere in codul scris de mine, stiind ca toate clasele din DBlayer merg PERFECT. |
|
| Sus |
|
huleacatalin
Data înscrierii: 26/Aug/2007
Mesaje: 25
Locație: Bucuresti
|
| Trimis: Dum Aug 26, 2007 5:35 pm Titlul subiectului: |
|
|
| sfatuieste-ma cum sa rescriu singleton-ul. Merci. |
|
| Sus |
|
UnD3aD
Data înscrierii: 10/Apr/2006
Mesaje: 353
Locație: Cta
|
| Trimis: Dum Aug 26, 2007 5:36 pm Titlul subiectului: |
|
|
| o eroare trebuie captata si afisata pe intelesul utilizatorului.... nu ca o eroare mysql intr-o pagina alba.... |
|
| Sus |
|
UnD3aD
Data înscrierii: 10/Apr/2006
Mesaje: 353
Locație: Cta
|
| Trimis: Dum Aug 26, 2007 5:41 pm Titlul subiectului: |
|
|
Cod: <?php
class Singleton {
// object instance
private static $instance;
private function __construct() {}
private function __clone() {}
public static function getInstance() {
if (self::$instance === null) {
self::$instance = new Singleton();
}
return self::$instance;
}
public function doAction() {
...
}
}
//usage
Singleton::getInstance()->doAction();
?>
pentru php5.... pentru php4 cam greu cu obiectele... scoti public si private din fata...
oricum codul ala il intelegi doar tu... pe degeaba l-ai facut "opensource"...
si vezi ca php4 deja a murit... mai traieste din amintiri :) |
|
| Sus |
|
huleacatalin
Data înscrierii: 26/Aug/2007
Mesaje: 25
Locație: Bucuresti
|
| Trimis: Dum Aug 26, 2007 5:50 pm Titlul subiectului: |
|
|
Atunci, se pare ca va trebui sa renunt la compatibilitatea cu PHP4, ca din cauza asta l-am scris asa...
Multumesc pentru sfaturi, voi tine cont de ele la o viitoare versiune.
De ce spui ca numai eu il inteleg? LOL, eu speram sa fie usor de inteles! :)) |
|
| Sus |
|
huleacatalin
Data înscrierii: 26/Aug/2007
Mesaje: 25
Locație: Bucuresti
|
| Trimis: Dum Aug 26, 2007 5:53 pm Titlul subiectului: |
|
|
| va trebui sa scriu un tutorial cand voi avea timp; altminteri, speram ca numele claselor si ale metodelor le-am ales suficient de sugestive. Conditia este ca programatorul sa inteleaga de ce exista 3 directoare separate - logic, dblayer si web. |
|
| Sus |
|
Amenthes
Data înscrierii: 12/Dec/2005
Mesaje: 462
|
| Trimis: Vin Aug 31, 2007 5:38 am Titlul subiectului: |
|
|
Ce vroia sa spuna UnD3aD cu die()-ul e ca ar trebui inlocuit cu un adevarat... error handling, adica ti-ar trebui o functie gen my_die (spre exemplu wordpress are wp_die) care sa verifice sa zicem o anumita valoare in config si in functie de aia sa faca un die propriu zis, sa faca o inregistrare intr-un log, etc. Metoda ta ar trebui mai degraba sa returneze false daca se intampla ceva rau, iar atunci cand alt programator va folosi metoda va putea sa verifice cu un "if" daca merge sau nu ce vrea el sa faca. Acum... daca il rescrii din PHP4 in PHP5 (ceea ce te sfatuiesc din toata inima) mai bine ai folosi exceptii. Sunt mult, mult mai bune pentru error handling.
Vezi http://devzone.zend.com/article/666-Exceptional-Code---PART-1 pentru mai multe in legatura cu error handling, exceptii si PHP5.
Later edit: am vazut acum ca ai un Logger, scuze. Ramane valabil restul |
|
| Sus |
|
huleacatalin
Data înscrierii: 26/Aug/2007
Mesaje: 25
Locație: Bucuresti
|
| Trimis: Dum Sep 02, 2007 1:39 pm Titlul subiectului: |
|
|
Ok, va multumesc. Am facut bine ca l-am supus discutiei pe forum, acum am primit feedback si am suficiente informatii ca sa stiu ce am de facut pentru a-l imbunatati. Il voi rescrie pentru php 5 si voi reveni cand voi fi pregatit. Cred ca peste o luna voi putea prezenta o a doua versiune.
A... inca o intrebare: eu am zis ca este object oriented, si asa este, nu poate fi altfel. Vreau sa stiu daca este corect cum l-am scris, daca vreau sa spun ca este three tier. Credeam ca este, tinand cont ca am separat cele 3 layeruri in 3 directoare distincte. Dar am vorbit cu un alt programator si mi-a spus ca nu este din cauza ca in "/web" pot fi gasite bucati de cod de genul:
Cod:
$p = $db->tbProduct->getProductById(5); // sa zicem
// si ar fi trebuit sa fie:
$p = new Product();
$p->getFromDb(5); // adica sa nu apara niciodata obiectul $db in prezentare
Asa este? Trebuie sa nu apara niciodata $db in prezentare? Sa il rescriu in asa fel incat sa apara intotdeauna doar obiectele logice?[/code] |
|
| Sus |
|
admarnic
Data înscrierii: 03/Mar/2005
Mesaje: 78
Locație: Romania
|
| Trimis: Lun Sep 03, 2007 10:24 am Titlul subiectului: Cum retine ce a fost in cos, daca nu e logat inca |
|
|
M-am uitat la site-ul tau si mi se pare interesant si complex ca functionalitate. Sunt incepator in e-commerce si ma intreb cum faci baza de date sa retina ce e in cosul de cumparaturi inainte de logarea clientului ?
Multumesc anticipat pentru raspuns. |
|
| Sus |
|
huleacatalin
Data înscrierii: 26/Aug/2007
Mesaje: 25
Locație: Bucuresti
|
| Trimis: Lun Sep 03, 2007 10:40 am Titlul subiectului: |
|
|
Cosul nu se pastreaza in baza de date. Cosul de fapt il privesc ca fiind un obiect de tip comanda (Order) - vezi clasa asta in /classes/logic/Order.php.
in /web/init.php se instantiaza clasa Application, care reprezinta siteul in sine si are ca membri resursele generale ale siteului - conexiunea la baza de date ($db), un array cu informatiile de configurare ($cfg), si un mail handler ($mailAgent). Aici porneste totul:
Cod:
$Application = Application::createInstance();
// ... iar in Application::createInstance() se face apel catre:
$Application->init();
// ... iar in $Application->init(),
// in fisierul /classes/Application.php, la linia 322
// se face apel catre:
$this->createShoppingCart();
// care arata asa:
function createShoppingCart()
{
$this->shopping_cart = SessionHandler::get("Application_shopping_cart");
if(!is_a($this->shopping_cart, "Order"))
$this->shopping_cart = new Order();
}
Deci shopping cartul este un obiect de tip Comanda (Order) pe care inca nu l-am salvat in baza de date; Se pastreaza pe sesiune pana cand utilizatorul a parcurs toti pasii din wizardul de comanda, si cand da click ultima data pe "trimite comanda", atunci se salveaza toate datele in baza de date. |
|
| Sus |
|
PHPRomania Bot
Bot Member
Data înscrierii: 27/Dec/2007
Mesaje: 1
Locaţie: Server Google |
| Trimis: Mie Dec 26, 2007 7:01 pm Titlul subiectului: Ad |
|
|
|
|
|
| Sus |
|
| |
|