ECommerce - carret de la compra

De Wikijoan
Dreceres ràpides: navegació, cerca

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

Eines de l'usuari
Espais de noms
Variants
Accions
Navegació
IES Jaume Balmes
Màquines recreatives
CNC
Informàtica musical
joanillo.org Planet
Eines