ECommerce - carret de la compra
Introducció
La idea és fer un carret de compra i una aplicació e-commerce dins del Wordpress, fet totalment a mida, i accedint a les meves taules per a la llista de productes i preus.
Començo creant una pàgina nova (Pages > Add New), l'anomeno Botiga2 (és una prova), sense comentaris i ficant l'ordre que m'interessa. Fixem-nos que li puc canviar la template.
El permalink en ppi no el canvio, i em queda: http://www.joanillo.org/?page_id=233
Vaig a Paypal (joanqc@gmail.com, jq********), i utilitzo un assistent per crear un botó de compra per cada article. El codi generat l'enganxo a la pàgina. També amb l'assistent creo el botó de Veure el carro.
Si vull accedir a la base de dades i personalitzar el codi, he de ficar en el codi coses com ara:
<?php echo ("hola Joan!"); ?>
Però això el Wordpress no ho deixa fer. El que jo busco està explicat a:
que és el plugin phpexec
<phpcode> <?php echo "Current date and time: "; echo date("l dS of F Y h:i:s A"); echo ("hola Joan!"); ?> </phpcode>
Em descarrego el plugin i s'instal.la com tots: copiant-lo a wp-content/plugins/, descomprimint-lo, i activant-lo des del penell d'administració.
$ wget http://priyadi.net/wp-content/plugins/phpexec.txt
i ara ja puc afrontar a fer un accés a una base de dades
<phpcode> <?php $dbhost=localhost; $dbuser=root; $dbpass=****; $dbname=langtrainer; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if (!$conn) { $log->error('Could not connect: ' . mysql_error()); die('Could not connect: ' . mysql_error()); } mysql_select_db($dbname, $conn) or die('Could not select langtrainer database.'); $sql = "SELECT * FROM LANGUAGE"; $result = mysql_query($sql); while($row=mysql_fetch_array($result)) { echo(utf8_decode($row["language"])); } mysql_close($conn); ?> </phpcode>
i ara ja accedeixo a la base de dades i puc programar un procés de compra més xulo
codi Javascript amb Wordpress
Les primeres proves que he fet funcionen. Dues maneres diferents de fer el Hello World:
<form name=myform> <input type=button value="hello1" onClick="alert('Hello from JavaScript!')" /> </form>
<script src="hello.js"></script> ... <form name=myform> <input type=button value="hello2" onClick="hello()" /> </form>
La funció hello() està definida a hello.js, que es fica al directori arrel de l'aplicació (/home/joan/blogjoanillo). Per poder editar he d'entrar com a su www-data. hello.js:
function hello() { alert("hola món"); }
Model de dades del meu carret de la compra
Vull una solució personalitzada, on hi ha uns productes que es poden vendre, i que són configurables, i el preu de l'article pot dependre de la configuració. La manera de calcular el preu de l'article pot ser molt simple, o molt complicada, i així vull la solució personalitzada i obrir la porta a poder calcular el preu del producte, transport,...
PRODUCTE (id_article, article_en, article_es, article_ca, preu) preu és not null, potser el preu està en els atributs ATRIBUT (id_atribut, atribut_en, atribut_es, atribut_ca, id_article) atribut és el color, tamany, idioma,... el preu pot dependre de l'atribut que agafo, o no DETALL_PRODUCTE (id_detall_article, detall_producte_en, detall_producte_es, detall_producte_ca, id_atribut, tipus_preu, preu) són els valors que pren l'atribut per a un producte determinat. Per exemple, 'català', 'escocès',... el tipus_preu pot ser PERC o ABS. PERC: s'incrementa un percentatge. ABS: preu total del producte amb aquest atribut. Es podrien establir regles complicades, doncs un producte pot tenir molts atributs, però això ja es faria programant. CLIENT (id_client, client, NIF, direccio, mail, telefon) -> les dades que em dóna el Paypal, que les introdueixo en una base de dades. COMPRA (id_compra, id_client, data, preu) DETALL_COMPRA (id_compra, id_article, id_detall_article, preu) Ara puc fer de nou un formulari de contacte que em guardi la informació en la BD: CONTACTE (id_contacte, nom, cognoms, mail, nacionalitat)
DROP TABLE DETALL_ARTICLE; DROP TABLE ATRIBUT; DROP TABLE ARTICLE; CREATE TABLE ARTICLE( id_article smallint primary key, article_en varchar(30) NOT NULL, article_es varchar(30) NOT NULL, article_ca varchar(30) NOT NULL, preu decimal(6,2) NULL ) TYPE=InnoDB; CREATE TABLE ATRIBUT( id_atribut smallint primary key, atribut_en varchar(30) NOT NULL, atribut_es varchar(30) NOT NULL, atribut_ca varchar(30) NOT NULL, id_article smallint NOT NULL ) TYPE=InnoDB; ALTER TABLE ATRIBUT ADD FOREIGN KEY(id_article) REFERENCES ARTICLE(id_article) ON DELETE CASCADE; CREATE TABLE DETALL_ARTICLE( id_detall_article smallint primary key, detall_article_en varchar(30) NOT NULL, detall_article_es varchar(30) NOT NULL, detall_article_ca varchar(30) NOT NULL, id_atribut smallint NOT NULL, ordre smallint NOT NULL, tipus_preu varchar(4) CHECK type IN('ABS','PERC','ADD'), preu decimal(6,2) ) TYPE=InnoDB; ALTER TABLE DETALL_ARTICLE ADD FOREIGN KEY(id_atribut) REFERENCES ATRIBUT(id_atribut) ON DELETE CASCADE; SET NAMES 'UTF8'; INSERT INTO ARTICLE VALUES(1, 'RKK Rythm KIT 4 KIDS', 'RKK Rythm KIT 4 KIDS', 'RKK Rythm KIT 4 KIDS', 120); INSERT INTO ARTICLE VALUES(2, 'Sonor sculpture', 'Escultura sonora', 'Escultura sonora', 250); INSERT INTO ATRIBUT VALUES(1, 'Language songs', 'Idioma canciones', 'Idioma cançons', 1); INSERT INTO ATRIBUT VALUES(2, 'Size', 'Tamaño', 'Tamany', 2); INSERT INTO ATRIBUT VALUES(3, 'Colour', 'Color', 'Color', 2); INSERT INTO DETALL_ARTICLE VALUES(1, 'English songs', 'Canciones en inglés', 'Cançons en anglès', 1, 1, NULL, NULL); INSERT INTO DETALL_ARTICLE VALUES(2, 'Spanish songs', 'Canciones en español', 'Cançons en castellà', 1, 2, NULL, NULL); INSERT INTO DETALL_ARTICLE VALUES(3, 'Catalan songs', 'Canciones en catalán', 'Cançons en català', 1, 3, NULL, NULL); INSERT INTO DETALL_ARTICLE VALUES(4, 'Big', 'Grande', 'Gran', 2, 1, 'PERC', 10); INSERT INTO DETALL_ARTICLE VALUES(5, 'Medium', 'Medio', 'Mig', 2, 2, 'PERC', 5); INSERT INTO DETALL_ARTICLE VALUES(6, 'Small', 'Pequeño', 'Petit', 2, 3, 'PERC', 0); INSERT INTO DETALL_ARTICLE VALUES(7, 'Black', 'Negro', 'Negre', 3, 1, 'ADD', 0); INSERT INTO DETALL_ARTICLE VALUES(8, 'Red', 'Rojo', 'Vermell', 3, 2, 'ADD', 20); INSERT INTO DETALL_ARTICLE VALUES(9, 'Blue', 'Azul', 'Blau', 3, 3, 'ADD', 20); INSERT INTO DETALL_ARTICLE VALUES(10, 'Green', 'Verde', 'Verd', 3, 4, 'ADD', 20); INSERT INTO DETALL_ARTICLE VALUES(11, 'Orange', 'Naranja', 'Taronja', 3, 5, 'ADD', 20);
creat per Joan Quintana Compte, juny 2010