Projects
> youterm
> 0xFFFF
> radare
> glh
> xml2doc
> bluewall
> pvc-repo
> cvs-repo
> git-repo
> mesure
> wistumbler2
> acr

Posts (81)
> List of posts

> Mini update
> Accelerated dreams
> Paranoia?
> Changelog
> Graphs and 077n pwnk
> HNY2k7
> Maemo mooo
> HC pwned
> Long time no post
> USB Pawah Injector i boot reveng

Categories
> all*
> TWD(7)
> blog(5)
> bluetooth(4)
> conf(1)
> desktop(1)
> devel(8)
> family(8)
> hpcva(9)
> hurd(2)
> life(20)
> n770(3)
> netbsd(2)
> pkgsrc(2)
> reality(5)
> tips(2)
> tothink(2)

Links
+ del.icio.us
+ asterx
+ bee.es.gnu.org

nopcode
+gallery
+www.nopcode.org
+cvs.nopcode.org
+news.nopcode.org
+blogs.nopcode.org

Other Blogs
+ sKUrZ0
+ TripleDES
+ gospel
+ blyx
+ MiKi
+ plue
+ xtraeme
+ esteve
+ jmmv
+ pof
+ syvic
+ Yosh
+ k0ro
+ ESN
+ Brainstorm
+ BlackShell
+ Hubertf
+ TooMany
+ viric
+ ziberpunk

doblog
+ Makefile
+ Source
+ Readme
+ TODO
+ Changelog









 
 >>Wed, 29 Mar 2006 15:40:55 +0200

 devel : osCommerce com a botiga online

Ja fa un temps vaig començar a muntar una botiga online per un client, per no complicar-me la vida vaig decidir pillar-ne una que ja estigues feta. Aixi que vaig agafar l'oscommerce, que a la web el pinten molt professional (...)

Després d'haver patit el que he patit per tenir-ho muntadet, he decidit escriure aquest post per tal d'evitar que pringui més gent amb el mateix que vaig pringar jo.

L'oscommerce es un software força complert que ens permet muntar una botiga online de forma relativament facil...el problema? Doncs que el codi esta fet amb el cul, hi han moltes coses repetides en molts llocs, t'instal.la moltes imatges i dades de manufacturers que no ens importen gaire (ms, ati, dvds...).


Instal.lació


Doncs bé, un cop baixats els sources em vaig instal.lar el mysql5, php4 i apache1.3 de pkgsrc.

Un dels primers simptomes que ens trobem es que oscommerce no funciona amb php5 (com a minim l'ultima versio de CVS actual no ho fa encara), podeu anar buscant per foros i algun parche trobareu, pero warro warro.

I hem de pensar que cal habilitar el register_globals, pq ho han fet de forma tant guarra que no comproben els valors per POST o GET, sino directament com a variable...amb els conseqüents problemes de seguretat que pot comportar un codi mal revisat amb register_globals...

Quan l'instal·lem entrant al /osc/catalog/install/ per web ens anira fent preguntes (si no ens funciona el "next" sq tenim php5 xD). Alla ens crearà la base de dades de la botiga, amb un pilot de taules (46). a continuació podem borrar el directori install/, ja que no el necessitarem més.

Un altre cosa que em va molar molt es veure com el directori admin/ entres sense cap mena de problema, no demana autorització ni res...plain, aixi que he hagut de crear un .htacces (no us el pastejo pq es el especific pel meu hosting)

Hosting


Potser una de les millors opcions de hosting barat/features/serveis/contacte es minervahosting, encara que al final vam acabar pillant godaddy pq surt un pel més barato, pero et donen un panel de configuració surrealista i absurd.

Aixi que podem aprofitar el nou hosting per riuren's una estona.

Un dels punts putilles de godaddy sq tenen 2 tipus de serveis, un amb aspx (windows) i l'altre amb perl, php, ruby, mysql... (linux), amb el mateix cost, sols que et foten l'opcio de windows per defecte...i obviament el client la va cagar comprant el hosting i van haver d'enviar un mail a godaddy pq poguessim canviar a "linux" sense pagar més.

Development


Un altre dels problemes que té l'oscommerce es que enlloc d'autodetectar els paths d'instal·lació o fer-ho amb paths relatius ho has de configurar-ho a mà i a sobre en dos fitxers posant exactament el mateix.

I clar, el problema de tot aixo es que si tu ho mires en local...la web va bé, pero si ho mires des d'una altre maquina doncs no. I per no haver d'anar canviant la IP i els paths tota l'estona vaig editar el includes/configure.php i vaig posar aixo, contant que ho tenia instal.lat dins de /osc/osc/catalog/

  console:

define('HTTP_SERVER', '../../../');
define('HTTPS_SERVER', 'https://');
define('ENABLE_SSL', true);
define('DIR_WS_IMAGES', 'images/');
define('DIR_WS_ICONS', DIR_WS_IMAGES. 'icons/');
define('DIR_WS_INCLUDES', 'includes/');
define('DIR_WS_DOWNLOAD_PUBLIC', 'pub/');
define('DIR_FS_CATALOG', getcwd() ); // TODO: posar el path fixe quan fem el deploy
(...)


Un cop tinguem aquest ja tot modificat anem al admin/includes/configure.php i fem algo semblant a l'altre:

  console:

$cwd = getcwd();
define('HTTP_SERVER', '../../../..');
define('ENABLE_SSL_CATALOG', 'true');
define('DIR_FS_DOCUMENT_ROOT', "$cwd/../");
define('DIR_FS_ADMIN', '$cwd');
define('DIR_WS_ADMIN', '..');
define('USE_PCONNECT', 'true');


Beutify..


Hem de pensar que qualsevol petit canvi que volguem fer de disseny ens suposarà bastanta feina, ja que com he dit abans la majoria de coses estan entatxonades dins del index.php en plan c&p, les queries SQL estan hardcodejades alla, etc.

Utilitzen alguna cosa orientada a objectes per crear les taules amb continguts. I potser una de les coses primeres que haurem de fer es canviar els permisos dels directoris pq sino ens anirà fotent warnings que ens desquadraran la web i ens tocaran els ous..aixi que o li fem cas o comentem els warnings.

Per eliminar els warnings anem a includes/header.php i comentem by the face tot lq no ens moli. Basicament les 55 linies primeres, que es on utilitza el $messageStack;

Per canviar el quadre header de la web jo he comentat el <table> que hi ha sota dels warnings i me l'he fet al meu gust amb un table nou amb les imatges noves i aprofitant els links cap a la cesta, account, etc.

En el index.php tenim l'estructura de la web en la forma tipica:
 +---------------------+
| header |
+---------------------+
| | | |
| left | body | right |
| | | |
+---------------------|
| bottom |
+---------------------+


El header, left, right i bottom son includes de DIR_WS_INCLUDES . header.php, column_left.php, column_right.php, footer.php i application_bottom.php. Si anem dins de cada fitxer d'aquests (DIR_WS_INCLUDES = includes/) i fiquem o treiem els tables que ens interessin.

Ara si si volem modificar el body de la web ho haurem de fer a pelo en el index.php, i alla es on estan totes les querys SQL hardcodejades. Jo he fet un hack per poder mostrar els iconos de les categories en la primera pagina i en la resta només ensenyar el nom de la subcategoria, ja que aixi no s'han de fer 10.000 iconos. L'unica forma de fer-ho es anar posant "echo's" abans i dps de cada big-if-else-clause{} i tenir una mica de sort.

Sobre el tema del localization...de sèrie venen l'alemany, anglés i castellà...si volem un de nou fliparem una estona pq esta tot repartit per mil fitxers a includes/languages/{lang}/*.php i (com no!) a admin/includes/languages/{lang}/*.php. De fet alla dins no nomes trobarem fitxers de texte, sino també imatges, aixi que el curro de traducció es converteix en algo totalment inasumible.

Extras..


El fet de ser tant xapuceru implica que hi hagin mil contribucions amb formes esoteriques d'instal·lació que van desde descomprimir un zip, llegir un .doc, parchejar els fitxers a mà (pq obviament encara no han descobert el /usr/bin/diff la gent de winsux), i crear taules noves a la db o modificar-ne d'existens.

Sobre el tema de la pasarel·la amb el banc...encara no l'he muntada pq es veu que els bancs son un pel mongolics i lis costa uns quants messos de burocracia o ves a saber que donar-te les dades per muntar la pasarel.la.

Si busquem per contribucions trobarem pasarel·les per mil bancs.

Hi ha una web que ens ofereix una grab varietat de botons horteres per posar a la nostra web d'oscommerce en diferents idiomes, entre ells l'euskera, català, francés.

>> oscommerce-buttons.org

Ara si, com ja he dit, els botons son horteres de collons i alguns botons no lis entra el text a la mida del botó, aixi que segurament si canvieu el disseny haureu de canviar tots els botons, ja que els iconos per defecte son horribles i a sobre encara que siguin GIFs no usen transparencia, aixi que nomes que canviis el color de fons ja has de retocar totes les imatges.

Deployment


Per no enguarrar el wwwroot he creat el directori "shop/" i ho he enxufat tot a dins.
  console:

lftp> mkdir shop
lftp> cd shop
lftp> mirror -R -c


He creat un index.php que redirecciona cap al shop/:
  console:

$ cat index.php
<? header("Location: shop/"); ?>


L'ultim detall es que el export del mysql5 no es compatible amb el mysql3...ni tant sols amb el phpmyadmin forçant-li a que pasi a mysql3 o ANSI, aixi que m'he hagut de fer un programet en perl perquè em fes la feina bruta:
  console:

$ cat sql-filter.pl
s/tinyinteger/integer/;
s/^\)\ ENGINE.*/\);/;
s/int(.*)/integer/;
print if (!(/^--/||/^\/\*/));

$ mysqldump -hlocalhost -uosc -posc osc | perl -n sql-filter.pl > osc.sql


Finalment he anat al cpanel del hosting i amb un phpmyadmin modificat he pogut insertar el osc.sql sense cap error de sintaxi

Conclussions


OSCommerce fa por, el codi esta totalment desestructurat i duplicat, el tema del register_globals no inspira gaire confiança, l'administració web es un pel crua i té algunes limitacions un pel torracollons, pero ara per ara es l'unica botiga online lliure full-featured que hi ha .

No vull ni pensar en actualitzar-lo :)

PD: Potser algun dia em rallo i faig una botiga online ben feta xD... i en perl

[add comment] [view comments] (3)

Comments:
from: China
date: Mon, 17 Jul 2006 18:17:13 +0200
title: My homepage

Great work!
My homepage | Cool site


from: United States
date: Mon, 17 Jul 2006 18:17:18 +0200
title: My homepage

Thank you!


from: Russia
date: Mon, 17 Jul 2006 18:20:21 +0200
title: My homepage

Nice site!
http://hicnllir.com/aohr/ctjw.html | http://fygklhkw.com/ucli/kcsi.html