UNIVERSITÀ POLITECNICA DELLE MARCHE FACOLTA’ DI INGEGNERIA Corso di Laurea in Ingegneria Informatica e dell’Automazione PROGETTAZIONE E IMPLEMENTAZIONE DI UN MODULO ZEN CART PER LA GESTIONE DI PRODOTTI PARAFARMACEUTICI Tesi di Laurea di: Relatore: Daniele Seri Prof. Aldo Franco Dragoni Anno Accademico 2010/2011 Indice 1.Introduzione generale……………………………………………………..……………………….1 1.1 Internet: “la rete delle reti”………………………………………………………………......….1 1.2 Il commercio elettronico……………………………………………………………….……….3 Che cos’è il commercio elettronico o e-commerce?.....................................................................7 Requisiti per il commercio elettronico……………………………………………………….….8 2.Specifiche di progetto……….………………………………………………………………….….9 2.1 Introduzione…………………………………………………………………........................….9 2.2 Creazione dell’interfaccia amministrativa………………………………………………….….9 2.3 Software Zen Cart…………………………………………………………………………….10 3. Strumenti utilizzati…………………………………………………………………………….....12 3.1 XAMPP………………………………………………………………………………………..12 Web Server Apache…………………………………………………………………………….13 Mysql……………………………………………………………….…………………………..13 Linguaggio PHP……………………………………………………………………………..…14 Installazione di XAMPP……………………………………………………………………..…14 3.2 Mozilla Firefox…………………………………………………………………………….…..15 3.3 Aptana Studio……………………………………………………………………………...…..16 3.4 Zen Cart…………………………………………………………………………………….….17 4. Realizzazione dell’interfaccia……………………………………………………………………20 4.1 Raccolta dei dati……………………………………………………………………………….21 Struttura delle basi di dati………………………………………………………………………21 Creazione del file per la connessione database………………………………………………...24 4.2 Struttura dell’interfaccia…………………………………………………………………….....26 4.3 Gestione dei dati……………………………………………………………………………….29 4.4 Visualizzazione dei dati……………………………………………………………………….34 Ricerca per marca………………………………………………………………………………34 Visualizzazione dei prodotti……………………………………………………………………43 Aggiunta/rimozione dei prodotti preferiti…………………………………………………………….46 Visualizzazione del grafico dello storico-prezzo del prodotto…………………………………49 Ricerca avanzata del prodotto……………………………………………………………...…..53 4.5 Gestione dei preferiti…………………………………………………………………………..59 5. Zen Cart……………………………………………………………………………………...…..61 5.1 Installazione e configurazione di Zen Cart……………………………………………………61 Configurazione di base……………………………………………………………………..…..61 Installazione Zen Cart..…………………………………………………………………………63 5.2 Installazione modulo aggiuntivo……………………………………………………………....70 Panoramica del negozio……………………………………………………………………......70 Admin Console………….…………………………………………………………………...…71 Modifica del codice sorgente di Zen Cart……………………………………………………...73 6. Conclusioni………………..……………………………………………………………………..80 7. Sviluppi futuri………………………………………………………………………………..…..81 8. Bibliografia………………………………………………………………………………………83 1.INTRODUZIONE Nell’età post-industriale la "finitezza" di sempre, che ci opprimeva e ci imponeva la sua legge, si infrange. A portata degli uomini si trova finalmente la risorsa infinita, l’unica: l’informazione, la conoscenza, l’intelligenza. Jean-Jacques Servan-Schreiber, "Le Defi Mondial", 1980. Internet: “ la rete delle reti” Da sempre l’essere umano è stato spinto dal desiderio naturale di trovare nuove forme di comunicazione e oggi Internet rappresenta l’apice della diffusione globale della cultura che ha cambiato per sempre il nostro modo di comunicare. L’idea di internet nasce all’inizio degli anni ’60, quando l’ARPA (Advanced Research Project Agency) decide di realizzare una rete di comunicazione tra i computer militari (ARPANET), che sia flessibile e robusta, e in grado di sopravvivere ad un attacco nucleare. ARPANET sarebbe servita a condividere online il tempo di utilizzazione del computer tra i diversi centri di elaborazione dati e i gruppi di ricerca per l'agenzia. Così, nel 1969 Leonard Kleinrock, dell’Università della California, fu incaricato di creare il primo collegamento telefonico da computer a computer fra l'Università della California di Los Angeles e lo Stanford Research Institute, e questi furono i primi due nodi di internet. Poco dopo si aggiunsero alla connessione l'Università di Santa Barbara e dello Utah, rispettivamente il terzo e quarto nodo. Il quinto nodo fu la BBN (Bolt, Beranek e Newman, una società di ingegneristica acustica di Boston), nei primi mesi del 1970, che aveva implementato i primissimi protocolli di ARPANET. Da questo momento in poi la crescita di ARPANET avveniva in maniera esponenziale. Ma l’evoluzione da rete militare, 1 come collegamento punto a punto dove tutti i computer connessi alla rete hanno le stesse capacità e possibilità, a “internet per tutti” ha richiesto tempo. 33Infatti, il fenomeno di cui si parla oggi, genericamente definito "internet", nella forma in cui lo conosciamo è nato in Italia nel 1994 e nel resto del mondo non molto prima. Fino al 1990, internet risultava ancora difficile da utilizzare per i profani. La capacità di trasmissione grafica era molto limitata e la ricerca e il recupero delle informazioni si rivelarono molto difficili. Ma proprio in questi anni, un nuovo salto tecnologico rese possibile la diffusione di internet tra le masse della società: la progettazione di una nuova applicazione, il World Wide Web, che organizzava il contenuto dei siti internet per informazione piuttosto che per posizione, fornendo agli utenti un facile sistema di ricerca per individuare l’informazione desiderata. Internet viene spesso immaginata come una struttura omogenea, una singola rete, chiamata "internet", ma in realtà non è così. Internet potrebbe essere definito come “la rete delle reti”, dove le reti sono decine di migliaia, ognuna completamente autonoma. Questo insieme di reti, sparse in tutto il mondo, sono collegate fra loro e sono in grado di scambiarsi informazioni binarie grazie a dei linguaggi comuni, chiamati convenzioni linguistiche o propriamente protocolli di comunicazione. Il “protocollo di comunicazione” descrive tutte le regole di trasmissione dei dati in rete, basandosi su specifiche tecniche molto dettagliate. Ciò che viaggia in internet, infatti, sono i pacchetti, che costituiscono l'unità minima di informazione in questo vasto sistema di comunicazione. Questi pacchetti viaggiano usando una tecnica conosciuta come commutazione di pacchetto (packet switching) che consente di condividere un cammino piuttosto che fare uso di percorso dedicato. In pratica un pacchetto che parte da un host e giunge a un altro host non segue un percorso di instradamento predefinito, ma quello più congeniale in un preciso momento in base alle condizioni 2 di congestione della rete. Di conseguenza anche gli altri pacchetti di una stessa comunicazione possono seguire percorsi diversi. Internet oltre che una rete di calcolatori è anche molto di più, grazie alle applicazioni che sfruttano la rete Internet come infrastruttura di comunicazione sottostante: il Web (WWW), la posta elettronica (SMTP), i Newsgroup, le Chat e tutti i sistemi di scambio di informazioni e di fornitura di servizi (dall’e-commerce all’e-banking). Infatti, utilizzando internet è possibile comunicare con altre persone in tutto il mondo via posta elettronica, leggere le versioni on line di quotidiani, di riviste e di pubblicazioni. Negli ultimi anni in Italia si è assistito ad una crescente diffusione di internet tra la popolazione, anche se siamo ancora lontani dall’utilizzo degli Stati Uniti. Negli anni 80, molte aziende iniziarono a realizzare delle proprie reti di personal computer, grazie alla loro maggiore economicità, potenza e disponibilità. In meno di trent’anni Internet è diventata una delle più sorprendenti realizzazioni tecnologiche e sociali del secolo. Milioni di persone utilizzano normalmente una complessa e interconnessa rete di calcolatori, localizzati in ogni angolo del globo e sui quali sono installati migliaia di software differenti. Il commercio elettronico Che cos’è il commercio elettronico o e-commerce? Attualmente internet si configura come un grande mercato globale e la sua diffusione mondiale e la sua tecnologia ipermediale, lo rendono un mezzo unico di comunicazione e scambio di beni per diversi motivi: la rete non ha confini geografici; l'accesso ai negozi virtuali, grazie ai web server, è continuo; permette la comunicazione multimediale tra venditore e cliente. Inoltre, per mezzo delle 3 tecnologie intelligent agent ( programma che svolge funzioni come la raccolta di informazioni, la selezione delle stesse o la mediazione per conto di una persona o entità), internet consente di acquistare proposte di differenti fornitori dopo che si siano messe a confronto, ed infine, permette sia l'integrazione dei processi di marketing, dalla progettazione dei nuovi prodotti alla comunicazione con il cliente, sia quella tra il processo di vendita e sistema informativo aziendale, migliorando il percorso di raccolta di informazioni di mercato e la gestione contabile, finanziaria e logistica degli ordini. Ed è proprio grazie all’avvento di queste nuove tecnologie nel campo dell’informazione e della comunicazione, che dal 1994 ad oggi si è materializzata quell’applicazione commerciale di Internet, divenuta ormai una realtà innegabile, che ha conquistato il mercato con una crescita esponenziale: l’ e-commerce. In generale il commercio elettronico o e-commerce può essere definito come un qualsiasi tipo di transazione tendente a vendere o acquistare un prodotto o un servizio, in cui gli attori interagiscono elettronicamente piuttosto che con scambi fisici e contatti diretti [P.F. Camussone, A. Biffi (a cura di), Il commercio diventa elettronico, Edipi, 1999]. Quindi il commercio elettronico è l’applicazione di nuove tecnologie, in particolare internet e web, al fine di permettere ai singoli individui, alle aziende o ad altre entità di svolgere meglio il proprio business. La diffusione del commercio elettronico ha permesso di effettuare i propri acquisti da casa, utilizzando il proprio computer. Inoltre, offre la possibilità di acquistare beni di ogni tipo, prodotti in tempi e luoghi diversi. Ma l’ e-commerce non è semplicemente il trasferimento di un negozio tradizionale sul Web, ma può e deve offrire molto di più come l’accessibilità al negozio a qualunque ora e in qualunque luogo, servizi più 4 avanzati e personalizzati di quelli comunemente ottenibili presso la normale distribuzione. I principali vantaggi che ha favorito la diffusione del commercio elettronico sono diversi: in primo luogo, esso dovrebbe offrire un migliore servizio e rapporto qualità/prezzo, almeno in linea teorica, e portare una riduzione dei costi operativi per l’offerta. In più, permette alle aziende di raggiungere nuovi clienti o fornitori e creare nuove modalità di vendita per i prodotti esistenti, e ancora l’e-commerce può essere utilizzato per la gestione finanziaria, amministrativa e anche delle risorse umane di un’azienda. Fig.1.1 Le fasi del processo di vendita online. Lo sviluppo del commercio elettronico è dovuto anche a due innovazioni che hanno permesso di rendere internet facile da usare e accessibile a tutti: gli ipertesti e le graphical user interface (interfaccia grafica utente). I primi consistono in un collegamento alla parola chiave, che talvolta appare nello schermo sotto forma di icona o immagine; mentre l’interfaccia consente all’utente di interagire con la macchina manipolando oggetti grafici convenzionali. 5 Il Commercio Elettronico si può classificare in due categorie principali: business to business, spesso definito B2B, che raccoglie le transazioni commerciali fra imprese, e business to consumer, definito B2C, che riguarda l’insieme delle vendite dei beni e servizi tra le imprese e consumatori finali. Nella categoria business to business sono comprese le transazioni che vedono coinvolti come controparti due o più aziende. Un'azienda può effettuare ordini ai propri fornitori e pagare tramite Internet la merce ricevuta. Più specificamente, business to business indica le relazioni che un' impresa detiene con i propri fornitori per attività di approvvigionamento, di pianificazione e monitoraggio della produzione, o di sussidio nelle attività di sviluppo del prodotto, oppure le relazioni che l' impresa detiene con clienti professionali, cioè altre imprese, collocate in punti diversi della filiera produttiva. Quindi nei rapporti tra imprese la presenza delle reti incide fortemente con l'efficienza e l'efficacia aziendali, rispetto alle più costose e chiuse soluzioni del passato. Mentre per ciò che riguarda la categoria business to consumer, volta allo scambio commerciale "virtuale" tra imprese e consumatori, l'esistenza di reti (Internet, Intranet) stravolge il ruolo del consumatore del mercato digitale, il quale può progettare il prodotto, fornendo direttamente le informazioni che lo riguardano. Mentre l'imprenditore con un po' di flessibilità, producendo beni-servizi con le caratteristiche richieste dai propri acquirenti, può moltiplicarne il valore. Questo fa emergere che indipendentemente dalla natura e dal tipo del bene-servizio scambiato, la materia prima del commercio elettronico è l'informazione. L'azienda deve sapere comunicare, le sue risorse sono tutte impegnate nel business. 6 Requisiti per il commercio elettronico Il software per il commercio elettronico deve essere ospitato da un web server. Una volta che esso è stato individuato o costruito, occorre iniziare a esaminare e installare il software il per commercio elettronico. Le funzionalità che potete attendervi dal software vanno da poche e fondamentali operazioni a ricche e complete soluzioni (dalla gestione del catalogo alla notifica del completamento della transazione). In sintesi, tutte le soluzioni di e-commerce devono prevedere: · La presentazione del catalogo · La gestione del carrello elettronico · La gestione della transazione · Gli strumenti per riempire il catalogo e semplificare le scelte relative alla presentazione del catalogo. Per la realizzazione di un negozio on line le soluzioni vanno da quelle più economiche e semplici da utilizzare a quelle molto costose e complesse. I grandi sistemi per il business to business e business to consumer richiedono sistemi hardware e software molto differenti. Siti di e-commerce enormi, come Amazon.com, richiedono un software per il commercio elettronico robusto, in grado di funzionare su calcolatori dedicati e capace di interagire con il sistema di database per gestire il catalogo ed elaborare gli ordini. Sistemi come questi sono costosi sia da implementare che da mantenere. I negozi elettronici in hosting e poco costosi, molto spesso, sono dotati di strumenti per costruire il sito in meno di un’ora. Lo spazio Web, la creazione del catalogo, i carrelli elettronici e i sistemi di elaborazione della transizione sono tutti compresi nel pacchetto. 7 I sistemi per il commercio elettronico intermedi sono adottati da un gran numero di aziende le cui necessità sono decisamente superiori a quelle dei piccoli negozi, ma allo stesso tempo molto minori di quelle di MP3.com o Amazon.com. Rendere operativo un software per il commercio elettronico non è sempre semplice: alcuni possono richiedere solo un’ora o due per l’installazione e la configurazione, mentre per altri potrebbero essere necessari giorni e svariate chiamate all’assistenza tecnica. Con l’eccezione dei negozi piccoli e con siti standard, è opportuno che le aziende valutino attentamente le funzionalità dei pacchetti software per il commercio elettronico prima di scegliere quello su cui effettuare le prove per poi realizzarvi il sito vero e proprio. Sebbene la maggior parte dei software per il commercio elettronico possieda sistemi di autocomposizione per la creazione di pagine basate su certi modelli, compresa l’home page, le pagine di informazione sull’azienda e la pagina che l’utente utilizza per i contatti con l’azienda, i più preferiscono effettuare una personalizzazione. Le pagine con le immagini dell’azienda e dei prodotti sono le prime candidate alla personalizzazione; inoltre, è necessario effettuare la manutenzione del sito, come ad esempio l’aggiunta di nuovi prodotti. Dunque nella valutazione del pacchetto è necessario accettarsi che l’aggiunta di nuove funzionalità non richieda troppo tempo. 8 2. SPECIFICHE DEL PROGETTO 2.1 Introduzione Il progetto sviluppato ha come obiettivo quello di creare un’interfaccia amministrativa per il portale di commercio elettronico di parafarmaci della Farmacia Blasi Giuseppe di Monsampietro Morico. Tale interfaccia ha come compito quello di permettere all’utente di visionare i prodotti e i prezzi dei siti “concorrenti”, in modo tale da trarre valutazioni e stime riguardo al contesto aziendale proprio e del mercato cui partecipano. Questi dati, vengono raccolti, elaborati e utilizzati per supportare concretamente le decisioni di chi occupa ruoli direzionali. Perciò, il sistema di gestione da noi creato ha l'obiettivo di permettere agli utenti di prendere decisioni strategiche fornendo informazioni precise, aggiornate e significative nel contesto di riferimento. 2.2 Creazione dell’interfaccia amministrativa L’interfaccia realizzata in tale lavoro di tesi è stata sviluppata sequenzialmente al progetto “Implementazione di un’interfaccia per l’estrapolazione di informazione da siti web, per il commercio di parafarmaci”,realizzato dal laureando Matteo Egidi, il quale prevedeva appunto la creazione di funzioni PHP per l’estrazione di dati dai due portali e-commerce indicati dal Dott. Blasi: Le informazioni · http://www.saninforma.it · http://www.parafarmacia.it estrapolate rappresentano principalmente tutte le varie caratteristiche dei parafarmaci venduti nei portali precedentemente elencati. Attraverso questi dati, è stata sviluppata un’interfaccia in grado di raccogliere e 9 aggiornare continuamente le informazioni stesse ed ovviamente di metterle a disposizione dell’utente, attraverso strumenti di ricerca e di gestione dei prodotti “preferiti”. L’utente attraverso un’apposita sezione, è tenuto costantemente informato della datazione dei dati all’interno del database, consentendo di aggiornarli in qualsiasi momento. Mentre la sezione per la visualizzazione dei prodotti, offre varie tipologie di ricerca, tramite le quali l’utente può visionare i prodotti di suo interesse all’interno del database. Secondo le indicazioni del Dott. Blasi, sono stati creati degli strumenti di ricerca di facile utilizzo, attraverso i quali visualizzare tutte le caratteristiche dei prodotti, come il nome, la descrizione, la casa farmaceutica di produzione e il prezzo. Dato che il principale utilizzo dell’interfaccia è quello di poter controllare i prezzi e le loro eventuali variazioni, è stata implementata una funzionalità in grado di controllare, sotto forma di grafico, la variazione del prezzo del prodotto nel tempo. L’interfaccia ovviamente offre anche la possibilità di poter associare un prodotto ad una lista di “preferiti” attraverso la quale l’utente può, in maniera diretta e senza effettuare ricerche, tenere sotto controllo i prodotti di maggiore interesse, venendo inoltre informato di eventuali variazioni di prezzo di uno di tali prodotti. 2.3 Software Zen Cart Una volta terminata la realizzazione dell’interfaccia si è passati all’utilizzo del software Zen Cart. Zen Cart è una piattaforma open source con la quale è possibile creare autonomamente il proprio negozio online, permettendo all’utente di poter gestire tutte le funzionalità interne al negozio, come la gestione del catalogo, dei clienti e del portale stesso. Zen Cart inoltre offre un elevato grado di 10 personalizzazione attraverso l’aggiunta di pagine al sito oppure tramite l’installazione di moduli aggiuntivi. Questi moduli aggiuntivi sono integrazioni e/o modifiche del programma per gestire particolari condizioni e/o funzionalità che possono essere integrate all’interno del portale, e sono sviluppabili in maniera autonoma o su richiesta ad un Team specializzato contattabile sul sito di supporto italiano (http://www.zen-cart.it). Si è scelto di utilizzare questa piattaforma appunto perché è quella utilizzata nella realizzazione del portale e-commerce della Farmacia del Dott. Blasi. Una volta installato il software Zen Cart, sono state studiate le caratteristiche fondamentali del negozio di test creato, dopo di che si è andati ad incorporare l’interfaccia sviluppata, all’interno del pannello di amministrazione del negozio creato da Zen Cart. Data la licenza open source di questa piattaforma, si sono potuti studiare ed in seguito modificare i codici sorgente del software, in modo tale da integrare l’interfaccia sviluppata fra le altre funzionalità di base del pannello amministrativo. 11 3. STRUMENTI UTILIZZATI Per lo sviluppo di applicazioni web, è importante disporre degli strumenti giusti, che, se scelti correttamente, possono essere di grande supporto per svolgere al meglio il proprio lavoro. Nella realizzazione del nostro progetto sono stati utilizzati i seguenti software: · Server con sistema operativo Windows 7 (http://windows.microsoft.com). · XAMPP 1.7.4 (http://www.apachefriends.org/it/xampp.html). · Mozilla Firefox 4 (http://www.firefox.com) · Aptana Studio (http://www.aptana.com). · Zen Cart 1.3.9 (http://www.zen-cart.it). 3.1 XAMPP Nello sviluppo di siti web è preferibile operare in locale e trasferire il tutto sul server remoto solo una volta che si è ottimizzata la configurazione per lo scopo che ci si è prefissi. Ciò permette di avere una maggiore velocità, appunto perché non bisogna operare direttamente sul server trasferendo i file ogni volta che occorre apportare delle modifiche al codice. Per poter sviluppare in locale è necessario avere a disposizione un web server in cui è abilitato l’utilizzo del linguaggio PHP e un database su cui memorizzare i dati. Quindi per evitare problemi di installazione e configurazione che si avrebbero nel caso si andasse ad installare singolarmente ogni componente, abbiamo utilizzato il pacchetto XAMPP che contiene tutti questi programmi già configurati per le esigenze più comuni. 12 XAMPP non è altro che un software gratuito rilasciato sotto la GNU General Public Licenze contenente Apache HTTP Server, il database MySQL e tutti gli strumenti necessari per utilizzare i linguaggi di programmazione PHP e Perl. 3.1.1 Web Server Apache Apache è un web server per il protocollo HTTP, designato per realizzare le funzioni di trasporto delle informazioni di internet work e di collegamento e anche di controllo per la sicurezza. Ricordiamo inoltre che Apache è distribuito come free software, per esplicito desiderio del team che lo sviluppa: questi, infatti, ritengono che strumenti di questo genere debbano essere accessibili a tutti, e che le software house debbano guadagnarci solo producendo addons o simili di valore, o magari personalizzati per alcune categorie di utenti. 3.1.2 MySQL MySQL è un Relational database management system (RDBMS), composto da un client con interfaccia a caratteri e un server, entrambi disponibili sia per sistemi Unix come GNU/Linux che per Windows, anche se prevale un suo utilizzo in ambito Unix. MySQL nelle versioni non recenti manca di alcune funzionalità come le viste e l'integrità referenziale, a causa delle quali alcuni sostenevano che non era del tutto corretto considerare MySQL come un RDBMS (sistemi di gestione di base di dati relazionali). Tuttavia la versione 5.0 ha introdotto nuove funzionalità, come i triggers, le viste, le stored procedures, i cursori che vanno a colmare alcune lacune e soprattutto mettono MySQL sullo stesso piano dei DBMS concorrenti, sistemi software progettati per consentire la creazione e manipolazione efficiente di database. 13 3.1.3 Linguaggio PHP PHP (Hypertext Preprocessor) è un linguaggio completo di scripting, sofisticato e flessibile, che può girare praticamente su qualsiasi web server, su qualsiasi sistema operativo (Windows o Unix/Linux, ma anche Mac, AS/400, Novell, OS/2 e altri), e consente di interagire praticamente con qualsiasi tipo di database (SQLite, MySQL, PostgreSQL, SQL Server, Oracle, SyBase, Access e altri). Si può utilizzare per i più svariati tipi di progetti, dalla semplice home page dinamica fino al grande portale o al sito di e-commerce. 3.1.4 Istallazione di XAMPP L’installazione di XAMPP è molto semplice, infatti una volta effettuato il download del software dal sito ufficiale, è sufficiente lanciare l’eseguibile del programma. Una volta installato, per attivare il web server apache e gli atri strumenti, si potrà utilizzare il pannello di controllo di XAMPP mandando in esecuzione il programma XAMPP Control Panel. Figura 3.1 Pannello di controllo di XAMPP 14 Una volta avviato il pannello di controllo di XAMPP, aprendo il browser Firefox all’indirizzo http://localhost/, si può accedere alla pagina di configurazione di XAMPP, dove sarà possibile avere accesso ad alcuni servizi come PHPMyAdmin. Fig. 3.2 Pagina di configurazione di XAMPP 3.2 Mozilla Firefox Mozilla Firefox è un web browser open source multipiattaforma prodotto da Mozilla Foundation. E’ un browser che migliora e facilita di molto il lavoro di un web designer, appunto perché non si limita a visualizzare le pagine web ma offre una serie di vantaggi, come: · Possibilità di usare i plug in, Primo su tutti "web developer", che consente di modificare il codice html di un sito in tempo reale mentre lo si visita. · Ripristino delle finestre in caso di crash. · Ottima visualizzazione di layout, infatti anche con il design più avanzato e con proprietà CSS non approvate o non supportate su altri browser saranno visualizzate proprio come l’autore le aveva concepite. 15 3.2 Aptana Studio Aptana è un IDE (integrated development environment), un ambiente di sviluppo integrato per la creazione di siti e applicazioni per il web. E’ un software rilasciato con licenza open source: può essere scaricato liberamente e utilizzato per scopi commerciali. Aptana serve a creare semplici siti Internet o applicazioni web complesse. Presenta una quantità e una qualità di funzioni tali da costituire una alternativa valida a software commerciali da larga diffusione come Adobe Dreamware. Gli stumenti disponibili attraverso Aptana sono numerosi, i principali sono: · digitare codice HTML, CSS e JavaScript in modo assistito, con supporto per l’evidenziazione della sintassi dei codici tramite colorazione e l’autocompletamento del codice in sede di sviluppo per velocizzare la creazione del listato. · supporto tramite plug-in per i vari linguaggi di sviluppo, tra cui PHP. · strumenti per la creazione e la gestione dei progetti. · disponibilità di strumenti per l’integrazione con i database relazionali, sia in locale che in remoto. · supporto completo per il trasferimento di file da locale a remoto e viceversa. 16 Figura 3.3 Ambiente di sviluppo di Aptana 3.3 Zen Cart Zen Cart è un sistema di carrello elettronico open source derivato da OSCommerce, gratuito e di notevole capacità d’uso. Il software viene sviluppato da un team di esperti, tra cui negozianti, programmatori, designer e consulenti convinti che l’e-commerce possa e debba assumere una formula semplice e accattivante. Ampliamente configurabile sia per l’inserimento di un numero illimitato di articoli, sia riguardo le offerte, le categorie, la gestione di clienti e ordini è un vero negozio virtuale affidabile e potente. Zen Cart è di facile utilizzo, una volta installato può essere settato da chiunque abbia un minimo di conoscenze in campo informatico. Inoltre offre ai visitatori del negozio le novità più interessanti in materia di shopping online. La navigazione attraverso gli articoli del negozio è semplice e sicura e, una volta inserito l’articolo desiderato nel carrello, sarà sufficiente che il cliente inserisca i dati di fatturazione, la modalità di 17 spedizione e quella di pagamento, infine potrà ricontrollare l’ordine eseguito ed inserire delle proprie note in un apposito spazio. A conferma avvenuta dell’ordine, sia il negoziante che il cliente riceveranno immediatamente una notifica, rispettivamente un avviso dell’ordine e una conferma tramite e-mail personalizzata. Alcune delle caratteristiche più importanti di Zen Cart sono: · sistema di indicizzazione del sito sui motori di ricerca, consente infatti l’indicizzazione sui motori di ricerca per categorie e per tutti i prodotti in vendita nel negozio. · gestione dei clienti nel negozio, ai quali è data loro l’opportunità di tenere sotto controllo lo stato degli ordini effettuati o storico. Inoltre il negoziante può gestire i dati relativi ai clienti ed inviare newsletter o buoni acquisto. · gestione illimitata di categorie, sotto categorie e prodotti. I vantaggi di ampliare senza limiti quantitativi la gamma dei prodotti offerti e di rendere profondo il proprio assortimento permette di fornire ai visitatori un’offerta vasta e completa. · diverse soluzioni di pagamento proposte. L’integrazione con PayPal è nativa nell’installazione, tanto come altri metodi di pagamento come postepay e contrassegno. · gestione in tempo reale del magazzino consentendo di monitorarne la consistenza, le minime scorte e così via. · gestione avanzata degli ordini dove, oltre a ricevere e-mail di notifica di ordine avvenuto, ne prevede la tracciatura con invio di mail al cliente di aggiornamento dello stato. 18 · monitoraggio costante delle informazioni relative al numero dei visitatori e dei prodotti più visti nel tempo. · gestione multilingua e multi valuta. Infine è importante menzionare le svariate possibilità offerte dai moduli aggiuntivi o add-on. In genere queste aggiunte vanno dalla modifica di qualche tipo di performance o disposizione degli elementi, all’integrazione di peculiarità significative, sino alla riscrittura di intere parti per condizionare il completo progetto a scopi ben determinati. Figura 3.4 Home Page del negozio di prova creato tramite Zen Cart 19 4.REALIZZAZIONE DELL’INTERFACCIA Un’interfaccia la si può definire come un insieme di strumenti che consente l'interazione con un ambiente. Quando parliamo di Internet, l'interfaccia è quell'insieme di strumenti (per lo più piccole immagini, scritte e testi) che consentono la navigazione nel sito e, tra le caratteristiche principali, vi sono due elementi fondamentali: chiarezza e semplicità, garanzia di efficacia comunicativa. Progettare l'Interfaccia Utente significa comporre in un unico disegno metafore di interazione, immagini, e concetti usati per veicolare funzioni e contenuto informativo sullo schermo. Proprio per questo risulta essere di fondamentale importanza un'accurata progettazione che ponga l'attenzione sull'utente e i suoi compiti piuttosto che sugli aspetti tecnologici. Una buona interfaccia web deve assolvere a diverse funzioni: · far percepire i contenuti · permettere di individuare le principali aree tematiche · far orientare il visitatore, cioè far capire dove si trova in ogni momento · consentire di passare agevolmente da un argomento all'altro con percorsi diretti e rapidi · facilitare la ricerca di un argomento. L'utente deve sempre avere l'idea di essere lui a controllare ciò che vuole fare e non il computer a decidere per lui. Troppo spesso, tuttavia, l'utente reagisce soltanto all'interno di un insieme limitato di opzioni. La soluzione ideale è generare un equilibrio tra il fornire agli utenti delle possibilità di scelta e nello stesso tempo "guidare" l'utente fornendo dei percorsi chiari indicati da noi. 20 4.1 Raccolta dei dati Il primo passo nella realizzazione dell’interfaccia amministrativa è quello di prelevare i dati dai siti concorrenti e successivamente, implementare una pagina di gestione dove l’utente possa costantemente tenere aggiornato il database. Per fare questo sono state utilizzate delle funzioni in linguaggio php implementate, come detto precedentemente dal laureando Matteo Egidi, in grado di estrapolare le informazioni necessarie dai due portali di commercio di parafarmaci richiesti dal Dott. Blasi: · www.saninforma.it · www.parafarmacia.it I dati prelevati consistono nei nomi delle case farmaceutiche trattate dai due siti in questione e i nomi dei prodotti con relativa descrizione (se presente) e il prezzo proposto, raggruppati per la marca di riferimento. Struttura delle basi di dati Le informazioni ottenute, vengono archiviate all’interno di due database, i quali contengono: uno i prodotti e le marche di saninforma.it e l’altro di parafarmacia.it. 21 La struttura delle due basi di dati è praticamente identica: Fig. 4.1 Diagramma E-R del database Saninforma Fig. 4.2 Diagramma E-R del database Parafarmacia I diagrammi entità-relazione di Figura 4.1 e di Figura 4.2, sono dei modelli per la rappresentazione concettuale dei dati e ci offrono un alto livello di astrazione, inoltre rappresentano uno degli approcci più solidi per la modellazione di domini applicativi 22 in ambito informatico. Le entità, raffigurate con un quadrato, rappresentano classi di oggetti (marche, prodotti, prezzi e tipi di aggiornamento) che hanno proprietà comuni ed esistenza autonoma ai fini dell'applicazione di interesse. Invece le associazioni (dette anche relazioni), raffigurate tramite un rombo, rappresentano un legame tra due o più entità ed il numero di tali entità legate è indicato dal grado dell’associazione. La traduzione complessiva delle intere basi di dati nel modello relazionale è la seguente: Saninforma MARCA(COD_MARCA, NOME_MARCA, DISP_MARCA) PRODOTTO(COD_PRO, NOME_PRO, DESC_PRO, LINK_PRO, DATA_PRO, PREFERITI_PRO, COD_MARCA) STORICO_PREZZO(COD_STORICO, PREZZO, DATA_PREZZO, COD_PRODOTTO) AGGIORNAMENTO(COD_AGGIORNAMENTO, DATA_AGGIORNAMENTO, TIPO_AGGIORNAMENTO) Parafarmacia MARCA_P(COD_MARCA, NOME_MARCA, DISP_MARCA) PRODOTTO_P(COD_PRO, NOME_PRO, DESC_PRO, LINK_PRO, DATA_PRO, PREFERITI_PRO, COD_MARCA) STORICO_PREZZO_P(COD_STORICO, PREZZO, DATA_PREZZO, COD_PRODOTTO) 23 AGGIORNAMENTO_P(COD_AGGIORNAMENTO, DATA_AGGIORNAMENTO, TIPO_AGGIORNAMENTO) I due database sono composti rispettivamente da quattro tabelle: · MARCA (o MARCA_P), la quale contiene tutti i nomi delle case farmaceutiche trattate dal sito, identificate da un codice univoco e un attributo utilizzato per verificarne la disponibilità. · PRODOTTO (o PRODOTTO_P) dove al suo interno sono presenti tutti i prodotti, anch’essi identificati da un codice, con relativo nome, descrizione, marca di riferimento e il link diretto al prodotto nel sito di provenienza. · STORICO_PREZZO (o STORICO_PREZZO_P) in cui sono memorizzati i prezzi di ogni prodotto con la relativa data di memorizzazione. · AGGIORNAMENTO (o AGGIORNAMENTO_P) dove vengono mantenuti solo due record relativi alla data di aggiornamento, rispettivamente del contenuto dell’entità MARCA e il contenuto dell’entità PRODOTTO. Creazione del file per la connessione ai database Per poter accedere alle informazioni contenute nel database, abbiamo creato il file connessione_db.php. Tramite la funzione PHP include(), richiediamo l’utilizzo della funzione connect() che abbiamo realizzato all’interno del file connessione_db.php, nella quale vengono definiti: $host="localhost"; $user="root"; $password=""; 24 Dopo di che, tramite le istruzioni: $conn=mysql_connect($host,$user,$password) or die("ERRORE NELLA CONNESSIONE AL DATABASE"); mysql_select_db($db_name,$conn); return $conn; apriamo una connessione al server MySQL e selezioniamo il database a cui connetterci. 25 4.2 Struttura dell’interfaccia La nostra interfaccia è stata concepita per essere integrata in un sito già esistente, in modo tale da offrire delle funzionalità aggiuntive nella parte dell’amministrazione. Per quanto riguarda il lato grafico del sito, si è optato per uno sfondo bianco con caratteri di colore blu, per adattarsi al meglio al font di default del pannello di amministrazione del sito in cui si è integrata l’interfaccia. Come si può vedere dalla Figura 4.3 , le pagine da noi create verranno visualizzate nel Corpo dell’interfaccia finale, mentre la Testa rimarrà costante Fig. 4.3. Rappresentazione dell’interfaccia: la Testa è evidenziata dal quadrato rosso e il Corpo dal quadrato celeste. La nostra interfaccia è stata progettata in modo tale da suddividere in due parti le funzioni che l’utente può eseguire: 1. Gestione dei dati del database; 2. Visualizzazione prodotti dei siti “concorrenti”. 26 Nella prima l’utente può aggiornare le informazioni sui prodotti e controllarne lo stato, mentre la seconda opzione è suddivisa a sua volta in tre rami: 1. Ricerca del prodotto per marca; 2. Ricerca avanzata; 3. Gestione dei prodotti preferiti. Tramite le due ricerche l’utente può effettuare la ricerca di un prodotto o di una casa farmaceutica, mentre nella gestione dei preferiti può controllare le informazioni e gli andamenti dei prezzi dei prodotti che ha scelto di tenere “sotto controllo”. Inoltre in ogni pagina è stato inserito un pulsante Home, in modo tale da permettere all’utente di ritornare in ogni momento alla pagina iniziale. 27 Fig. 4.4. Panoramica generale della struttura del sito. 28 4.3 Gestione dei dati Per poter raccogliere i dati e fare in modo che l’utente possa sempre tenerli aggiornati, abbiamo creato una sezione relativa alla gestione di queste informazioni. La pagina di gestione dei dati è strutturata in modo tale che l’utente possa scegliere quale dei due database aggiornare (corrispondenti ai due negozi di e-commerce: saninforma e parafarmacia) e, per ognuno di essi, scegliere se aggiornare le case farmaceutiche o i prodotti parafarmaceutici del database con quelli presenti nel sito. Fig. 4.5 Schermata della gestione dei dati L’utente è tenuto informato riguardo la datazione del database attraverso delle aree di testo che indicano appunto da quanti giorni non si provvede all’aggiornamento dei prodotti o delle marche. Fig. 4.6 Parte della schermata dedicata alla gestione dei dati del database riferiti al sito Saninforma 29 Dato che entrambi i siti vengono aggiornati con una frequenza settimanale, nel caso si siano superati sette giorni, l’utente viene avvisato della possibile obsolescenza dei dati attraverso una colorazione gialla dell’area informativa. A seconda dell’opzione che si sceglie, si andranno ad aggiornare le informazioni desiderate. Attraverso l’uso del modulo <form> con l’attributo method di valore POST, la pagina viene ricaricata e i dati vengono inviati attraverso la richiesta http che il browser invia al server. Questi dati indicano a quale portale di vendita si fa riferimento e quale delle quattro tipologie di aggiornamento si andrà ad eseguire: · Aggiorna_marche_saninforma; · Aggiorna_prodotti_saninforma; · Aggiorna_marche_parafarmacia; · Aggiorna_prodotti_parafarmacia. Prima di avviare l’aggiornamento, l’utente viene avvertito dell’imminente avvio della procedura tramite una finestra di avviso realizzata in linguaggio Java Script, che si attiva al click del pulsante “Aggiorna Adesso” e, attraverso l’istruzione confirm(), viene aperta una finestra pop up, dove l’utente può scegliere di cliccare “OK” per iniziare l’aggiornamento, oppure “Annulla” per non avviare la procedura, ma, fin quando l’utente non effettua la scelta, l’elaborazione dello script è sospesa. Fig. 4.7 Finestra di conferma per avviare l’aggiornamento 30 Una volta confermato di voler procedere, l’aggiornamento delle case farmaceutiche viene svolto attraverso il frammento di codice di Figura 4.8 (in questo caso l’aggiornamento riguarda il portale saninforma.it), in cui viene richiamata la funzione agg_marchesaninforma(), adibita a prelevare le marche dal sito. if($_REQUEST["mode"]=="aggiorna_marche_saninforma") { $conn= connect('saninforma'); agg_marchesaninforma($conn); /*Query per modificare la data in qui viene aggiornata la tabella delle marche*/ $query_aggiorna="UPDATE AGGIORNAMENTO SET DATA_AGGIORNAMENTO='".addslashes($data_odierna_db)."' WHERE TIPO_AGGIORNAMENTO='Marche www.saninforma.it'"; $result_agg=mysql_query($query_aggiorna,$conn); mysql_close($conn); } Fig.4.8 Codice per l’aggiornamento delle case farmaceutiche di Saninforma Una volta memorizzate tutte le marche del portale, viene aggiornato anche il campo DATA_AGGIORNAMENTO della tabella AGGIORNAMENTO (Fig.4.), il quale contiene appunto la data in cui le marche del database sono state revisionate per l’ultima volta. Fig. 4.9 Tabella relativa al record 1 della tabella AGGIORNAMENTO. Al termine di ogni procedura di memorizzazione, l’utente viene avvertito tramite una finestra di avviso. 31 Per quanto riguarda l’aggiornamento dei prodotti invece, data la vasta gamma di parafarmaci presenti in ogni sito (più di tremila), il procedimento per essere portato a termine, richiede un arco di tempo che va dai dieci ai quindici minuti. Ciò va in contrapposizione con il settaggio di default nel file php.ini per quanto riguarda il tempo massimo di esecuzione. Infatti il parametro max_execution_time imposta il tempo massimo in secondi concessi ad uno script per l’esecuzione prima di essere interrotto dal parser. Per default è impostato a trenta secondi, questo aiuta a prevenire che script scritti male blocchino il server. Una possibile soluzione sarebbe quella di modificare il limite di tempo nel file php.ini, ma ciò significherebbe modificare il suddetto file anche nel server di destinazione ed inoltre, eventuali script che portano a “loop” infiniti potrebbero bloccare il server. Quindi per rimediare a questo inconveniente abbiamo utilizzato la funzione: void set_time_limit ( int seconds ) la quale, quando viene eseguita, re-imposta il contatore di tempo di esecuzione a zero. In altre parole, se il timeout è impostato per default a trenta secondi e dopo venticinque secondi di esecuzione si richiama la funzione con set_time_limit(600), lo script potrà girare per circa dieci minuti. In questo modo possiamo permettere allo script di aggiornare tutti i prodotti all’interno del database impedendo che l’esecuzione del programma termini prematuramente. 32 else if($_REQUEST["mode"]=="aggiorna_prodotti_saninforma") { $conn= connect('saninforma'); $query_sql_marche="SELECT COD_MARCA,NOME_MARCA FROM MARCA WHERE DISP_MARCA=1"; $result_marche=mysql_query($query_sql_marche,$conn); if(mysql_num_rows($result_marche)>0) { set_time_limit (600); while($fields_marche = mysql_fetch_row($result_marche)) { aggiornamento_prodotti_saninforma($fields_marche[1], $conn,$data_odierna_db); } /*Query per modificare la data in qui viene aggiornata la tabella dei prodotti*/ $query_aggiorna="UPDATE AGGIORNAMENTO SET DATA_AGGIORNAMENTO='".addslashes($data_odierna_db)."' WHERE TIPO_AGGIORNAMENTO='Prodotti www.saninforma.it'"; mysql_query($query_aggiorna,$conn); } mysql_close($conn); } Fig. 4.10 Codice per l’aggiornamento dei prodotti relativi al portale Saninforma Per quanto riguarda l’aggiornamento vero e proprio, per prima cosa è necessario compiere un’interrogazione al database, in modo da prelevare tutti i nomi delle case farmaceutiche disponibili sul portale che si sta analizzando (se un record nel database ha l’attributo DISP_MARCA con valore 0, significa che quella marca non è più disponibile sul sito). Dopo di che attraverso una delle due funzioni utente: · aggiornamento_prodotti_saninforma() · aggiornamento_prodotti_parafarmacia() vengono estrapolati dal sito di riferimento tutti i prodotti in vendita. Infine, prima di effettuare la chiusura del database, andiamo ad aggiornare il contenuto del campo DATA_AGGIORNAMENTO con la data odierna. Come già detto ciò serve per tener traccia dell’ultima revisione dei prodotti del database. 33 Fig. 4.11 Tabella relativa al record 2 della tabella AGGIORNAMENTO. 4.4 Visualizzazione dei dati Nella parte della gestione la nostra interfaccia amministrativa svolge l’attività di raccolta e di archiviazione di grandi quantità di dati, ma per rendere tali dati accessibili e utilizzabili all’utente, abbiamo implementato un area predisposta alla visualizzazione personalizzata dei dati attivi, detta appunto visualizzazione. Infatti le maggiori aspettative degli utilizzatori si traducono in una visualizzazione dei dati sempre più ricca e funzionale. Quest’ultima progettata in maniera adeguata, riveste un ruolo importante al fine di semplificare , organizzare e presentare dati complessi, in modo che l’utente possa recepire , in maniera immediata, le informazioni associate a tali dati. Abbiamo creato tre modi differenti di visualizzazione delle informazioni: il primo suddivide i risultati in base alla casa farmaceutica mentre il secondo effettua una ricerca all’interno del database per mezzo di una parola chiave; la terza opzione invece riguarda la gestione e la visualizzazione dei prodotti contrassegnati dall’utente come preferiti. Ricerca per marca Effettuando l’accesso alla pagina Index -> Visualizzazione ->Ricerca_per_Marca, l’utente può compiere una ricerca all’interno del database dei prodotti classificati in 34 base alle case farmaceutiche di produzione. L’utente infatti può scegliere di visualizzare tutte le marche di un portale di vendita, oppure può cercare una determinata marca attraverso il campo di ricerca. La pagina è concepita in modo tale che nella parte superiore siano sempre disponibili gli strumenti per la ricerca, mentre i risultati vengono visualizzati nella parte sottostante (Fig. 4.3) Fig. 4.3 Rappresentazione dell’interfaccia: il quadrato rosso evidenzia gli strumenti per la ricerca e il quadrato celeste l’area dove verrano visualizzati i risultati Per la visualizzazione dei dati si è sfruttata la principale peculiarità del web dinamico, ovvero la possibilità di variare il contenuto delle pagine in base alle richieste degli utenti. Questa possibilità si concretizza attraverso i meccanismi che permettono, oltre che richiedere una pagina dal web server, anche di specificare determinati parametri che saranno utilizzati dallo script PHP per determinare quali contenuti la pagina dovrà visualizzare. Quindi per organizzare questo genere di servizi è necessario raccogliere i parametri selezionati dall’utente: per farlo si utilizzano i moduli, ovvero i form. Per creare una 35 pagina con dei moduli abbiamo fatto ricorso all’apposito tag <form> e come metodo di invio abbiamo scelto POST, attraverso il quale i dati vengono inviati in maniera da non essere visibili all’utente. Per visualizzare tutte le case farmaceutiche di un portale abbiamo utilizzato il seguente modulo: <th>VISUALIZZA MARCHE SANINFORMA</th> <tr> <td> <form action="ricerca_per_marca.php?sito=saninforma" target="_self" name="ris" method="post"> <center><input type="submit" value="Visualizza marche" > </center> </form> </td> </tr> <tr bgcolor="LAVENDER"> <th>VISUALIZZA MARCHE PARAFARMACIA</th> </tr> <tr> <td> <form action="ricerca_per_marca.php?sito=parafarmacia" target="_self" name="marca_parafarmacia" method="post"> <center><input type="submit" value="Visualizza marche" > </center></form> </td> </tr> Fig. 4.11 Moduli per visualizzare le marche dei due portali Questo modulo contiene semplicemente il tasto che invia i dati tramite il metodo POST alla pagina ricerca_per_marca.php, la quale si troverà a disposizione la variabile $_POST[‘sito’] contente il valore corrispondente al nome del portale di cui si vogliono visualizzare le case farmaceutiche. Una volta che il bottone per la visualizzazione delle marche viene premuto, la pagina verrà ricaricata passando il parametro sito, che contiene appunto il nome del portale. I risultati della ricerca vengono visualizzati per mezzo del codice contenuto in una condizione if, usata in combinazione con la funzione: 36 bool isset ( mixed variable [,..] ) tramite la quale verifichiamo se una variabile è definita (in questo caso $_POST[‘sito’]); perciò se dalla funzione isset verrà restituito il valore TRUE significherà che la variabile è settata (ovvero è stato premuto il pulsante per la visualizzazione delle marche di un portale), quindi sarà eseguito il codice all’interno della condizione. if(isset($_REQUEST["sito"])) { if($_REQUEST["sito"]=='saninforma') { $conn= connect('saninforma'); $query_sql="SELECT NOME_MARCA FROM MARCA WHERE DISP_MARCA=1 ORDER BY NOME_MARCA"; } else if ($_REQUEST["sito"]=='parafarmacia') { $conn= connect('parafarmacia'); $query_sql="SELECT NOME_MARCA FROM MARCA_P WHERE DISP_MARCA=1 ORDER BY NOME_MARCA"; } $result=mysql_query($query_sql,$conn); $i=0; $colore='LAVENDER'; $cont_colore=0; if((mysql_num_rows($result)>0)) { echo "<hr>"; echo "<table cellspacing='2' cellpadding='2' align='center' >"; echo "<tr bgcolor=".$colore.">"; while($fields = mysql_fetch_row($result)) { $nome_marca= str_replace("-"," ",$fields[0]); echo"<td align='center'><a style='text-decoration: none;' href='ricerca_per_marca.php?mode=visualizza&sito_m arca=".$_REQUEST['sito']."&marca=".html_entity_dec ode(htmlentities($fields[0],ENT_QUOTES),ENT_NOQUOT ES)."'>".html_entity_decode(htmlentities($nome_mar ca,ENT_QUOTES),ENT_NOQUOTES)."</a></td>"; $i++; 37 if($i>8) { $cont_colore++; if($cont_colore%2) $colore='WHITE'; else $colore='LAVENDER'; echo "</tr>"; echo "<tr bgcolor=".$colore.">"; $i=0; } } echo "</tr>"; } else echo "<h2> Non ci sono MARCHE al momento </h2>"; echo "</table>"; echo "<hr>"; mysql_close($conn); } Fig. 4.12 Codice per la visualizzazione in forma tabellare di tutte le marche Come si può vedere dalla figura, il codice è lo stesso sia che si tratti del sito Saninforma che di Parafarmacia. Dato che la variabile $_POST[‘sito’] contiene il nome del portale, l’abbiamo utilizzata per determinare quale database dobbiamo interrogare per ottenere le informazioni di qui abbiamo bisogno, ottimizzando il codice ed evitando di ripetere più volte le stesse operazioni. 38 Fig. 4.13 Visualizzazione di tutte le marche di Saninforma Una volta visualizzate le marche dei parafarmaci di un sito, abbiamo creato dei collegamenti ipertestuali associando un indirizzo del nodo di destinazione ad ogni elemento visualizzato nella pagina corrente, ovvero ad ogni nome delle case farmaceutiche, in modo tale che, una volta che sono state visualizzate tutte le marche, l’utente può cliccare su una di esse e visionare tutti i prodotti relativi alla marca scelta. Questa associazione è basata sull’utilizzo del tag <a href> dove a sta per ancoraggio ed href è l’abbreviazione di Hypertext-Refernce (riferimento ipertestuale). Nel nostro caso abbiamo definito un collegamento che ricarica la pagina corrente passando tre parametri che identificano rispettivamente: · l’opzione di visualizzazione che si è selezionata ( parametro mode); · il sito di riferimento (parametro sito); 39 · nome della casa farmaceutica desiderata (parametro marca). In questo modo la pagina viene aggiornata e vengono visualizzati tutti i parafarmaci relativi alla marca selezionata. Le modalità di visualizzazione dei dati verranno descritti nel prossimo capitolo. Per quanto riguarda la ricerca di una casa farmaceutica tramite parola chiave, abbiamo utilizzato un semplice modulo contenente una cesella di testo (ins_marca) in cui l’utente andrà ad inserire la parola chiave per la ricerca ed un bottone a cui abbiamo associato degli eventi Java Script. La gestione di questi eventi è fondamentale, in quanto ci permette di effettuare dei controlli su ciò che l’utente ha inserito nella casella di testo per la ricerca. <th>RICERCA DELLE MARCHE</th> <tr> <form action="ricerca_per_marca.php?mode=presenza_marca" target="_self" name="marca_presente" method="post"> <td> <center><input type="text" size="20" maxlength="50" name="ins_marca" ></input> </td> <td> <input type="button" value="Cerca le marche" onClick="javascript:Presenza_marca();" ></center> </td> </form> </tr> Fig. 4.14 Modulo per la ricerca di una marca Al bottone della ricerca abbiamo associato la funzione Java Script: Presenza_Marca(), attraverso la quale andiamo a controllare il contenuto della casella di testo, in modo tale da verificare che l’utente abbia inserito una parola chiave valida per la ricerca. Nel caso in cui invece non abbia inserito nessun carattere o uno spazio vuoto, viene avvertito tramite un messaggio di errore del mancato inserimento di una parola valida. Il codice della funzione in questione è il seguente: 40 function Presenza_marca() { if(trim(document.marca_presente.ins_marca.value)=="") { alert("Inserisci il nome della MARCA che stai cercando"); return; } else if(trim(document.marca_presente.ins_marca.value)==" ") { alert("Inserisci il nome della MARCA che stai cercando"); return; } else { document.marca_presente.submit(); } } Fig. 4.15 Funzione Presenza_Marca Una volta superato il controllo in Java Script, la pagina viene ricaricata con il parametro mode settato al valore presenza_marca, così da eseguire il codice contenuto all’interno della condizione: if(($_POST[“mode”])== “presenza_marca” ) { … } All’interno della suddetta condizione if abbiamo effettuato due chiamate ai database Saninforma e Parafarmacia, i quali vengono interrogati attraverso una query in linguaggio SQL per ottenere tutti i nome delle case farmaceutiche che abbiano una corrispondenza sintattica con la parola chiave inserita dall’utente. Per fare ciò abbiamo usato l’operatore LIKE con la condizione WHERE per effettuare la ricerca in una colonna a partire da un determinato modello, quindi LIKE può essere immaginato al termine “come” o “che contiene” , in quanto indica al database i termini di paragone di una ricerca. Inoltre al modello dell’operatore LIKE abbiamo abbinato il carattere jolly “%”, il quale sostituisce un insieme di caratteri, cosicché 41 possiamo trovare nella tabella PRODOTTO tutti i nomi dei parafarmaci che contengono, in qualsiasi posizione, la parola chiave scritta dall’utente. “SELECT NOME_MARCA FROM MARCA WHERE DISP_MARCA=1 AND LIKE ‘%”.$_REQUEST[“ins_marca”]. “%’”; Utilizzando una query strutturata in questo modo però, potremmo incorrere in problemi se non vengono specificate correttamente le minuscole e le maiuscole del dato che stiamo cercando. Ad esempio se prendiamo in considerazione due prodotti, uno con nome “Azione Urto” e l’altro “Azione urto”, il nome è lo stesso ma il dato è differente. Quindi se l’utente andrebbe ad inserire come parola chiave “Urto”, la query precedente visualizzerebbe soltanto il prodotto contenente la parola “Urto” escludendo l’altro. Per la visualizzazione di entrambi i record abbiamo operato delle accortezze all’interno della selezione utilizzando la funzione LOWER, la quale trasforma il dato analizzato in lettere minuscole prima di confrontarlo con la chiave di ricerca. In questo modo il risultato della query è una lista completa dei due prodotti, sia del prodotto “Azione Urto” che di “Azione urto”. if(($_GET["mode"])=="presenza_marca") { $conn= connect("saninforma"); $colore=0; $query_pres_marca="SELECT NOME_MARCA FROM MARCA WHERE DISP_MARCA=1 AND LOWER(NOME_MARCA) LIKE LOWER('%".addslashes($_REQUEST["ins_marca"])."%')"; $ris_pres_marca=mysql_query($query_pres_marca,$conn) … } Fig. 4.16 Frammento di codice contenente la query per prelevare i record che soddisfano la condizione WHERE e LIKE 42 Una volta ottenuti tutti i nomi delle marche che soddisfano la ricerca, essi vengono visualizzati in forma tabellare, così da avere nella prima colonna i nomi delle marche e nella seconda il sito di riferimento alla stessa. Ovviamente per ogni marca visualizzata, è possibile cliccare su una di esse e visionare tutti i sui prodotti. Fig. 4.17 .Visualizzazione delle marche che soddisfano la ricerca tramite parola chiave Visualizzazione dei prodotti Vista la grande varietà di parafarmaci e di informazioni che ognuno di essi possiede, abbiamo cercato di implementare una visualizzazione dei prodotti ordinata e di facile comprensione. Una volta che l’utente ha selezionato una marca dall’elenco, tramite appunto il collegamento ipertestuale la pagina corrente viene ricaricata e fra i parametri che le vengono passati, viene settata la variabile mode al valore di visualizza, in questo modo vengono eseguite tutte le istruzioni relative alla stampa dei prodotti. Per prima 43 cosa abbiamo effettuato la connessione al database relativo al sito di provenienza della marca tramite la variabile $_REQUEST[“sito_marca”], dopo di che abbiamo effettuato le tre query SQL fondamentali per ottenere tutte le informazioni di cui abbiamo bisogno: 1. "SELECT COD_MARCA FROM MARCA WHERE NOME_MARCA='".addslashes($_REQUEST["marca"])."'". 2. SELECT DATA_AGGIORNAMENTO FROM AGGIORNAMENTO WHERE TIPO_AGGIORNAMENTO='Prodotti www.saninforma.it'"; 3. "SELECT NOME_PRO,DESC_PRO,COD_PRO,LINK_PRO FROM PRODOTTO WHERE COD_MARCA='".$cod_marca."' AND DATA_PRO='".$data_aggiornamento_pro_sani[0]."' ORDER BY NOME_PRO"; N.B. Le query sopraelencate sono relative al database Saninforma Attraverso la prima query andiamo a prelevare dal database il codice della marca selezionata dall’utente, mentre con la seconda interrogazione otteniamo la data dell’ultimo aggiornamento della tabella dei prodotti. Le informazione ottenute dalle due query precedenti vengono memorizzate rispettivamente nelle variabili cod_marca e data_aggiornamento_pro_sani[0] e utilizzate per prelevare tutte le informazioni dei prodotti aventi come marca quella selezionata dall’utente e l’attributo DATA_PRO uguale al valore contenuto in data_aggiornamento_pro_sani[0], ovvero i prodotti la cui data di aggiornamento corrisponde con la data in cui il database è stato aggiornato l’ultima volta. L’utilizzo dell’attributo DATA_PRO è fondamentale, in quanto, grazie ad esso, siamo in grado di selezionare solo i prodotti disponibili sui due portali di parafarmaci. Infatti, se la data contenuta in DATA_PRO non corrisponde a quella in DATA_AGGIORNAMENTO nella tabella AGGIORNAMENTO, significa che il 44 prodotto nella data dell’ultima revisione non era presente all’interno di uno dei due portali. Una volta prelevate dal database tutte le informazioni dei prodotti aventi come casa farmaceutica quella selezionata dall’utente, andiamo a visualizzarli in forma tabellare, specificando per ogni prodotto: il nome, la descrizione, la marca produttrice, il prezzo di vendita e il logo del portale. Al nome di ogni prodotto è stato associato un collegamento ipertestuale, attraverso il quale possiamo accedere alla pagina internet originaria del parafarmaco. Per ottenere l’indirizzo completo del prodotto, è bastato prelevare dal database l’attributo LINK_PRO, contenete appunto l’indirizzo, per poi associare quest’ultimo al collegamento ipertestuale. Inoltre per ogni parafarmaco sono disponibili due funzionalità molto importanti per l’utente: l’aggiunta o la rimozione di un prodotto dai preferiti e la visualizzazione del grafico dell’andamento del prezzo di vendita nel tempo. Fig. 4.18 Visualizzazione prodotti relativi ad una marca 45 Aggiunta/rimozione dei prodotti preferiti Una delle principali funzionalità per l’utente consiste nel poter aggiungere ai propri preferiti un determinato prodotto di suo interesse e, ovviamente, anche l’opportunità di rimuovere dai preferiti un prodotto che l’utente non ha più intenzione di seguire. L’aggiunta di un prodotto fra i preferiti corrisponde ad una semplice operazione di update su di un record del database. Infatti premendo il bottone Aggiungi relativo al prodotto desiderato, viene richiamata la funzione in Java Script: Agg_preferiti() alla quale vengono passati quattro parametri che identificano: il sito di e-commerce a cui si fa riferimento, il valore che l’utente ha digitato nella casella di testo della ricerca, il codice e il nome del prodotto selezionato, così da poter segnalare all’utente tramite una finestra di avviso, quale prodotto ha aggiunto ai preferiti. function Agg_preferiti(sito,cod,marca) { document.location.href='ricerca_per_marca.php?mode=agg_preferiti&no me_sito='+sito+'&cod_prodotto='+cod+'&marca='+marca; } function Canc_preferiti(sito,cod,marca) { document.location.href='ricerca_per_marca.php?mode=canc_preferiti&n ome_sito='+sito+'&cod_prodotto='+cod+'&marca='+marca; } Fig. 4.19 Funzioni Java Script per aggiungere e togliere un prodotto dai preferiti Dopo di che attraverso gli oggetti Java Script location che rappresenta la URL, associata alla finestra e, href, che viene usato per cambiare pagina, andiamo a ricaricare la pagina ricerca_prodotti.php passando i parametri necessari per effettuare la ricerca del prodotto: document.location.href=’ricerca_prodotti.php?mode=agg_preferit i&nome_sito=’+sito’&valore_text=’+nome+’&cod_prodotto=’+cod; 46 I parametri a cui si fa riferimento sono appunto: · il nome del sito, tramite il quale possiamo risalire su quale dei due database effettuare la ricerca · il valore contenuto nella casella di testo · il codice e il nome del parafarmaco che l’utente ha intenzione di aggiungere ai preferiti Mentre con il parametro mode settato al valore agg_preferiti, la pagina andrà ad eseguire soltanto le istruzioni contenute nella condizione if in Figura 4.20. if($_GET["mode"]=="agg_preferiti") { $sito=$_REQUEST["nome_sito"]; if($sito=='saninforma') { $conn= connect("saninforma"); $query_agg_preferiti="UPDATE PRODOTTO SET PREFERITI_PRO=1 WHERE COD_PRO=".$_REQUEST["cod_prodotto"].""; } else if($sito=='parafarmacia') { $conn= connect("parafarmacia"); $query_agg_preferiti="UPDATE PRODOTTO_P SET PREFERITI_PRO=1 WHERE COD_PRO=".$_REQUEST["cod_prodotto"].""; } $ris_agg_preferiti=mysql_query($query_agg_preferiti,$conn); mysql_close($conn); header ("Location: ricerca_per_marca.php?mode=visualizza&sito_marca=".$sito."&mar ca=".$_REQUEST["marca"].""); } Fig. 4.20 Codice per aggiungere un prodotto ai preferiti Per mezzo della variabile $_REQUEST[“nome_sito”] andiamo ad eseguire la connessione al database corrispondente, in modo tale da poter eseguire la query SQL di aggiornamento utilizziamo il comando UPDATE 47 UPDATE PRODOTTO SET PREFERITI_PRO=1 WHERE COD_PRO=”.$_REQUEST[“cod_prodotto”].” Tramiti questa query, i campi elencati dalla clausola SET vengono aggiornati per tutti i record che soddisfano la clausola WHERE e, nel nostro caso, verrà aggiornato solo il record che corrisponde a quel codice prodotto. L’attributo PREFERITI_PRO di ogni prodotto del database è impostato per default a 0 che sta a significare appunto che il prodotto non fa parte dei “preferiti”, al contrario, il valore di questo attributo viene modificato ad 1 nel caso in cui l’utente ha deciso di inserirlo nella lista dei prodotti da seguire. Al termine della procedura di aggiornamento, la pagina viene nuovamente ricaricata tramite la funzione: void header ( string $string [ ,bool $replace = true [, int $http_response_code ]] ) la quale viene impiegata per re-indirizzare la pagina su se stessa, con il parametro mode impostato al valore cerca in modo da visualizzare nuovamente i prodotti precedentemente cercati dall’utente tramite il secondo parametro text_prodotto che abbiamo passato (contenete la parola chiave di ricerca) ed il parametro scegli_sito corrispondente all’opzione selezionata dal menù. Per quanto riguarda invece la rimozione di un prodotto dai preferiti, i passaggi che abbiamo seguito sono praticamente identici, ad eccetto della funzione Java Script utilizzata: Canc_preferiti(), e del codice per l’aggiornamento del prodotto nel database che differisce da quello per l’aggiunta ai preferiti solo nel settare l’attributo PREFERITI_PRO a 0. 48 Visualizzazione del grafico dello storico del prezzo di un prodotto Visto il continuo svilupparsi del commercio online dei parafarmaci e il continuo mutamento dei prezzi di vendita, abbiamo implementato un’utile funzionalità per l’utente, che consiste nel poter visionare sotto forma di grafico, l’andamento del prezzo nel tempo di un prodotto. Per ogni prodotto visualizzato, oltre alle varie informazioni di base e al pulsante dei Preferiti, abbiamo aggiunto il pulsante Grafico, tramite il quale l’utente potrà controllare l’andamento del prezzo nel tempo sotto forma di un grafico. Al bottone è stato associato un evento Java Script, il quale si attiva al clic del mouse aprendo la finestra che andrà a visualizzare il grafico. <input type='button' value='Grafico' onClick=\"javascript: window.open('grafica.php?sito=".$sito."&cod_prod=".$cod_prodot to."','Grafico andamento prezzo','width=510,height=600');\" /> Tramite il comando window.open possiamo creare delle finestre personalizzate che si adattano alle nostre esigenze. Abbiamo quindi la possibilità di specificare tre parametri: window.open('percorso','nome finestra','caratteristiche'); · nel percorso indichiamo il file da inserire all’interno della finestra, ovvero grafica.php, che contiene tutte le istruzioni necessarie per creare il grafico attraverso i parametri sito e cod_prod che andiamo a passare alla pagina · il nome della finestra · le caratteristiche della finestra, le quali specificano ad esempio la forma, la dimensione e la posizione 49 Nella pagina grafica.php, attraverso le due variabili che le abbiamo passato $_REQUEST[“sito”] e $_REQUEST[“cod_prod”], andiamo ad effettuare la connessione al database e successivamente a svolgere la query alla tabella STORICO_PREZZO, in modo tale da ottenere, per quel codice prodotto, i vari prezzi che ha assunto nel suo storico e la relativa data di memorizzazione. if($_REQUEST["sito"]=='saninforma') { $conn= connect('saninforma'); $query_sql="SELECT PREZZO,DATA_PREZZO FROM STORICO_PREZZO WHERE COD_PRODOTTO=".$_REQUEST["cod_pop"]." ORDER BY DATA_PREZZO ASC "; } else if($_REQUEST["sito"]=='parafarmacia') { $conn= connect('parafarmacia'); $query_sql="SELECT PREZZO,DATA_PREZZO FROM STORICO_PREZZO_P WHERE COD_PRODOTTO=".$_REQUEST["cod_pop"]." ORDER BY DATA_PREZZO ASC "; } Fig. 4.21 Codice per ricavare tutti i prezzi e le relative date di un prodotto Prendiamo in esempio il prodotto “Giuliani Albios” avente codice prodotto “1379”. Tramite la precedente interrogazione del database otteniamo tutti i prezzi con la relativa data, ordinati in maniera decrescente in base alla data di memorizzazione. Fig. 4.22. La tabella raffigura il risultato della query per determinare date e prezzi del prodotto. Una volta in possesso di questi dati, siamo passati alla creazione del grafico vero e proprio. Il linguaggio PHP mette a disposizione diversi strumenti per creare automaticamente dei grafici e noi ci siamo serviti della PHPGraphLib, la quale è una 50 libreria “pre-confezionata”, orientata agli oggetti, destinata alla creazione di grafici per l'inserimento di questi ultimi in pagine web. La libreria in questione include un sistema di gestione degli errori molto efficace ed i risultati ottenibili con questa libreria sono veramente stupefacenti, la potenza del codice inserito nell'unica pagina di PHPGraphLib possono essere utilizzati al massimo, date le piccole dimensioni di quest'ultima. PHPGraphLib richiede la presenza delle librerie GD Graphics Library installate sul nostro web Server e una versione di PHP almeno 4 o superiore. L'inserimento della libreria PHPGraphLib all'interno del nostro file grafica.php avviene tramite una semplice operazione di include: include("phpgraphlib.php"); dopo di che andiamo ad impostare la lunghezza e la larghezza del grafico tramite l’istruzione: $graph=new PHPGraphLib(500,550); I dati acquisiti precedentemente dal database, utilizzando la funzione mysql_fetch_row, vengono trasferiti riga per riga nell’array $fields, e per mezzo del ciclo while definiamo un array bidimensionale con chiavi associative, denominato $data, creando tanti elementi quanti sono i prezzi del prodotto, dove le chiave dell’array saranno le date di memorizzazione e i valori i relativi prezzi. while($fields = mysql_fetch_row($result)) { $a=floatval(str_replace(",",".",$fields[0])); $data[$fields[1]]= $a; } 51 Quindi per il prodotto con il codice “1379”, otteniamo un array così strutturato: $data[“2009-07-21”]=4.6 $data[“2010-01-08”]=4.9 $data[“2011-06-28”]=3.9 $data[“2011-07-04”]=4.7 Una volta definito l’array, abbiamo inserito altre funzioni predefinite della libreria per la creazione del grafico: · addData($data)attraverso la quale abbiamo inviato alla libreria i valori che vogliamo mostrare nel grafico · setRange() tramite la quale abbiamo impostato il grafico in modo che mostri, sull’asse Y, i valori che vanno da un massimo ad un minimo · setTitle e setTextColor servono per impostare rispettivamente il titolo della finestra e il colore del testo · tramite l’istruzione setBars(false) indichiamo alla libreria di non mostrare un grafico a barre dato che di default questo valore è impostato a true, di conseguenza con setLines(true) segnaliamo che si tratta di un grafico a linee · con setDataPoints(true) e setDataPointColor("yellow") abbiamo fatto visualizzare un bollino di colore giallo nel punto del valore indicato · mentre con setDataValues(true) e setDataValueColor("blue") abbiamo visualizzato il valore di ogni punto impostandone il colore blu · infine abbiamo richiamato la funzione createGraph(), la quale restituisce in output l’immagine del grafico appena creato 52 Per il prodotto avente codice “1379” avremo il seguente grafico: Fig 4.23 Esempio di grafico per il prodotto “1379” Ricerca avanzata di un prodotto Nel paragrafo precedente abbiamo mostrato come è stata realizzata la ricerca dei prodotti in base alla marca di riferimento. Ora invece passiamo ad illustrare come è stata implementata la ricerca avanzata di un prodotto. Come per la ricerca di una marca, anche per questa pagina è stato creato un piccolo motore di ricerca, ovvero una utility che permette all’utente di trovare rapidamente quello che cerca, semplicemente immettendo una o più parole nella casella di testo ed avviare lo script PHP che tirerà fuori i risultati desiderati. 53 Fig.4.24 Modulo per la ricerca avanzata La ricerca viene effettuata all’interno del database a nostra disposizione, contenente tutti i parafarmaci in commercio nei due portali e-commerce, inoltre l’utente ha la possibilità di scegliere su quale dei due negozi cercare il prodotto desiderato, oppure di effettuare la ricerca su entrambi. Anche per questa tipologia di ricerca abbiamo utilizzato una form, la quale contiene una casella di testo, un menù a discesa che permette all’utente di scegliere su quale portale cercare il prodotto ed in ultimo il tasto che invia i dati attraverso il metodo POST alla medesima pagina ricerca_prodotti.php. <form action="ricerca_prodotti.php?mode=cerca" target="_self"name="ris_prodotti" method="post"> La funzione Convalida() ha gli stessi compiti della funzione Presenza_Marca() descritta nel paragrafo precedente, che consistono appunto nel segnalare all’utente l’eventuale inserimento di una parola di ricerca non valida nella casella di testo. 54 <table cellspacing="2" cellpadding="3" align="center"> <tr> <td>Prodotto</td> <td><input type="text" size="20" maxlength="50" name="text_prodotto" /></td> <td> <select name="scegli_sito" size="1"> <option value="op_tutti" selected>Ricerca completa</option> <option value="saninforma">Saninforma</option> <option value="parafarmacia">Parafarmacia</option> </select> </td> <td> <input type="button" value="CERCA" onClick="javascript:Convalida();" > </td> </tr> </table> Fig. 4.25 Modulo per la ricerca del prodotto desiderato Avendo utilizzato un’unica pagina per il modulo di ricerca e per lo script, dobbiamo fare in modo che quest’ultimo non parta automaticamente al caricamento della pagina, per questo abbiamo utilizzato la variabile mode che, se settata al valore “cerca”, permetterà di eseguire lo script adibito a tale funzionalità solo una volta che l’utente avrà premuto il pulsante Cerca. Questa pagina si troverà a disposizione la variabile $_REQUEST[“text_prodotto”] contenente il valore che l’utente ha digitato nel campo di testo; inoltre, se è stata selezionata un opzione nel menù a discesa, riceverà la variabile $_REQUEST[“scegli_sito”] con il valore scelto, altrimenti, se l’utente non ha selezionato nessuna opzione, la variabile corrispondente risulterà definita con il valore di default. Di seguito viene mostrato il codice utilizzato: 55 <?php if(($_GET["mode"])=="cerca") { ?> <table cellspacing="2" cellpadding="3" align="center"> <tr> <td>Prodotto</td> <td> <input type="text" size="20" maxlength="50" name="text_prodotto" value='<?php echo html_entity_decode(htmlentities($_REQUEST["t ext_prodotto"],ENT_QUOTES),ENT_NOQUOTES);?>' /> </td> <td> <select name="scegli_sito" size="1"> <?php switch($_REQUEST["scegli_sito"]) { case "op_tutti": echo "<option value='op_tutti' selected >Ricerca completa</option> <option value= 'saninforma'> Saninforma </option> <option value= 'parafarmacia'> Parafarmacia </option>"; break; case "saninforma": echo "<option value='op_tutti' >Ricerca completa</option> <option value ='saninforma' selected> Saninforma </option> <option value ='parafarmacia'>Parafarmacia </option>"; break; case "parafarmacia": echo "<option value='op_tutti' >Ricerca completa</option> <option value ='saninforma'> Saninforma</option> <option value ='parafarmacia' selected >Parafarmacia </option>"; break; } ?> </select></td> <td><input type="button" value="CERCA" onClick="javascript:Convalida();" ></td></tr> </table> <?php echo "<table cellspacing='4' cellpadding='6' align='center' >"; if(($_REQUEST["scegli_sito"])=="op_tutti") { Crea_Tabella("saninforma",$_REQUEST["text_prodotto"]); Crea_Tabella("parafarmacia",$_REQUEST["text_prodotto"]); } else { Crea_Tabella($_REQUEST["scegli_sito"], $_REQUEST["text_prodotto"]); } echo "</table><hr>"; } Fig. 4.26 Codice per il richiamo della tabella 56 Come si può vedere dall’immagine, una volta che l’utente ha inserito i dati nel modulo di ricerca, l’intera pagina viene ricaricata e sia la casella di testo che il valore del menù a discesa vengono impostati con i valori scelti in precedenza dall’utente, dopodiché viene richiamata la funzione Crea_Tabella() addetta alla visualizzazione dei risultati. Fig.4.27. Visualizzazione dei risultati tramite la ricerca “azione-urto” La funzione utente Crea_Tabella() ha il grande vantaggio di poter accorpare , all’interno di una singola porzione di codice, la funzionalità di visualizzazione dei prodotti usata nel nostro programma, richiamandola al momento opportuno. Perciò all’interno della suddetta funzione, sono state accorpate tutte le istruzioni viste nei paragrafi precedenti per la visualizzazione in forma tabellare dei prodotti, con i relativi pulsanti per l’aggiunta o la rimozione ai preferiti e per la visualizzazione del grafico. La funzione Crea_Tabella() viene richiamata più volte all’interno del programma e, i parametri che le vengono passati dipendono dall’opzione che l’utente ha selezionato nel menù di ricerca. Crea_Tabella( “sito di provenienza”, “valore della casella di testo”) 57 Tramite il primo parametro, che può assumere uno valore tra saninforma e parafarmacia, può essere effettuata la connessione al database, mentre il secondo parametro contiene la parola chiave che l’utente ha digitato nella casella di testo, perciò tramite quest’ultimo la funzione è in grado di interrogare il database per ottenere i risultati della ricerca. Bisogna però distinguere due casi: nel primo, viene selezionata nel menù di ricerca una delle opzioni Saninforma o Parafarmacia, mentre nel secondo l’opzione Ricerca Completa. Nel primo caso la funzione Crea_Tabella() viene richiamata passando come primo parametro la variabile $_REQUEST[“scegli_sito”], la quale corrisponderà al nome di uno dei due database: Crea_Tabella("[nome database]",$_REQUEST["text_prodotto"]); Mentre nel caso sia stata selezionata l’opzione “Ricerca Completa”, la pagina, una volta ricaricata, si troverà a disposizione la variabile $_REQUEST[“scegli_sito”] contenente il valore “op_tutti”, che sta ad indicare appunto che l’utente vuole che la ricerca venga effettuata su entrambi i portali e-commerce. In questo modo quindi, la funzione Crea_Tabella() verrà richiamata due volte consecutive: Crea_Tabella("saninforma",$_REQUEST["text_prodotto"]); Crea_Tabella("parafarmacia",$_REQUEST["text_prodotto"]); 58 4.5 Gestione Preferiti La possibilità di aggiungere un prodotto in una propria lista dei preferiti, rappresenta per l’utente la principale utility dell’interfaccia, appunto perché attraverso essa, è in grado di “tenere sotto controllo” i prodotti di suo interesse. La pagina ha una struttura molto simile alla pagina utilizzata per la ricerca avanzata dei prodotti descritta precedentemente. Infatti presenta un modulo, composto da una casella di testo e un menù a discesa, attraverso i quali l’utente può inserire un prodotto da ricercare e, tramite il menù, selezionare su quale portale andare a cercare il prodotto desiderato. Mentre nella parte sottostante vengono visualizzati i risultati. Accedendo alla pagina, vengono visualizzati tutti i preferiti dell’utente, attraverso alla funzione Crea_Tabella(), la quale presenta una struttura del tutto simile a quella analizzata nel capitolo precedente. Le uniche differenze sono appunto nella query di ricerca: SELECT NOME_PRO,DESC_PRO,COD_MARCA,COD_PRO,LINK_PRO FROM PRODOTTO WHERE DATA_PRO='".$data_aggiornamento_pro_sani[0]."' AND PREFERITI_PRO=1 AND LOWER(NOME_PRO) LIKE LOWER('%". nome."%') ORDER BY NOME_PRO Infatti la ricerca non viene eseguita su tutti i prodotti del database, ma soltanto su quelli aventi l’attributo PREFERITI_PRO impostato al valore 1, che significa appunto che quel prodotto fa parte dei preferiti dell’utente. Per ogni prodotto vengono visualizzate tutte le informazioni relative ad esso e sono disponibili le funzioni di visualizzazione del grafico dello storico del prezzo e ovviamente la funzione di rimozione del prodotto dai preferiti. 59 Fig. 4.28 Schermata della gestione dei preferiti Inoltre a fianco di ogni prodotto viene visualizzata un’icona, la quale sta ad indicare come il prezzo di listino è variato rispetto all’ultimo aggiornamento. Indica che il prezzo del prodotto ha subito un incremento rispetto al precedente Denota una flessione verso il basso del prezzo del prodotto Indica che il prezzo non ha subito variazioni rispetto all’ultimo aggiornamento del database In questo modo l’utente può in maniera immediata determinare se il prezzo di un prodotto di suo interesse è cambiato o se è rimasto costante. 60 5.Zen Cart In questo capitolo descriveremo in dettaglio i passi seguiti per includere l’interfaccia amministrativa da noi creata, in un portale e-commerce realizzato con il software Zen Cart. In particolare tratteremo le varie procedure per l’istallazione di Zen Cart e di come creare un modulo aggiuntivo in un portale. 5.1. Istallazione e configurazione di Zen Cart Come nella realizzazione dell’interfaccia amministrativa, anche in questa fase abbiamo operato in locale, perciò per lo sviluppo è stato necessario avere a disposizione il software XAMPP, un pacchetto che contiene appunto tutti i programmi (web server Apache, PHP 5 attivato, MySQL 4) che sono indispensabili per le nostre esigenze. Configurazione di base Prima di passare all’istallazione di Zen Cart abbiamo creato un dominio nella macchina locale, dato che consente di accedere al negozio usando una URL più realistica ( ad esempio http://www.esempio.com/negozio) anziché usare localhost ed inoltre perché, per poter testare Zen Cart, non è permesso specificare account email con localhost come dominio. Per creare un dominio abbiamo aperto il file C:\WINDOWS\system32\drivers\etc\hots con un editor di testo ed abbiamo aggiunto le seguenti righe nella parte finale del file: 127.0.0.1 www.esempio.com #for browser access 127.0.0.1 mail.esempio.com #for email access 127.0.0.1 esempio.com #for mercury mail server 61 In questo modo è indifferente usare localhost e www.esempio.com per effettuarne l’accesso al browser. Dopo di che abbiamo configurato Apache in modo che usasse il dominio da noi creato. Dal file <xampp-home>/apache/conf/http.conf, tramite un editor di testo abbiamo cancellato ed aggiunto la seguente riga dal file ServerName localhost:8 ServerName www.esempio.com:80 Infine, ci siamo assicurati, che tutte le email del dominio esempio.com venissero gestite dal nostro server di posta. Per configurare il server di posta Mercury, abbiamo dapprima bloccato il servizio Mercury dal Pannello di controllo di XAMPP, dopodiché abbiamo cancellato ed aggiunto la seguente riga dal file <xampp-home>/MercuryMail/MERCURY.INI con un editor di testo: myname localhost.com #Canonical name for this server myname esempio.com #Canonical name for this server Inoltre abbiamo aggiunto nel file la seguente riga sotto le parole “localhost.com : localhost.com” esempio.com : esempio.com 62 Infine tramite il browser,accedendo alla pagina http://www.esempio.com/phpmyadmi, abbiamo creato un database di prova da utilizzare per l’istallazione di Zen Cart. Fig. 5.1 Home Page di phpmyadmin Installazione Zen Cart Dopo aver istallato tutto il software necessario ed aver effettuato le configurazioni di base, siamo passati all’istallazione vera e propria di Zen Cart. Dal sito di riferimento italiano www.zencart-italia.it, nella sezione Download, ci siamo procurati l’ultima versione disponibile del software. Terminato il download della distribuzione di Zen Cart, abbiamo estratto il file scaricato nella cartella xampp/htdocs/zen-cart_139_H_ITA, rinominando quest’ultima in negozio. Una volta aperto un web browser, puntando all’indirizzo http://localhost/negozio, abbiamo avviato l’installer e, dopo aver accettato i termini e le condizioni dettate dalla licenza GNU, siamo passati alla schermata dei prerequisiti. 63 Fig. 5.2 Schermata dei prerequisiti Questo è uno dei passi fondamentali per la corretta istallazione di Zen Cart, l’installer infatti, esamina tutti i requisiti tecnici, indispensabili al corretto funzionamento del programma, e segnala con una “X”, o con caratteri di colore rosso, tutte le anomalie che devono essere risolte prima di procedere, mentre gli avvisi vengono segnalati con un punto esclamativo racchiuso in un cerchio di colore giallo oppure con caratteri di colore arancione. Inoltre l’installer controlla anche i corretti permessi sulle cartelle e sui file, indicando quelli da modificare. Una volta controllate tutte le voci, abbiamo proseguito cliccando sul pulsante Install, tramite il quale abbiamo avuto accesso alla schermata delle impostazioni di sistema, nella quale vengono rilevati automaticamente tutti i path di sistema: dove fisicamente è presente la directory di Zen Cart, l’indirizzo del negozio virtuale, l’indirizzo del server HTTPS, il path virtuale che punta alla directory di Zen Cart e due opzioni che consentono l’abilitazione o meno delle connessioni sicure SSL per l’area amministrazione e di registrazione degli account utente. 64 Fig. 5.3 System Setup Una volta salvate le impostazioni di sistema, siamo passati nella schermata delle impostazioni del database. Nella nuova schermata il primo campo presenta un menù a tendina dove scegliere il tipo di database da utilizzare (nel nostro caso abbiamo scelto MySQL), a seguire vengono richieste le informazioni relative al prefisso da utilizzare per le tabelle contenute nel database, il nome dell’host o l’indirizzo IP del server MySQL, il nome utente e la password da utilizzare durante la connessione e il nome del database che avevamo precedentemente creato (zencart). 65 Fig. 5.4 Setup Database Dopo aver salvato anche le impostazioni del database, siamo passati alla schermata Store Setup, nella quale abbiamo inserito le informazioni base del negozio virtuale, come il nome ed altre informazioni come nome ed email del responsabile, le attività, la nazione, la città e l’indirizzo completo del negozio, ossia tutte quelle informazioni che dovrebbero venir stampate sui documenti, utilizzate nell’invio delle mail e visualizzate online alla pagina Info & Contatti. In basso alla schermata abbiamo selezionato l’italiano come lingua base, l’euro come valuta ed infine abbiamo scelto di installare una DEMO di categorie, prodotti ed 66 allestimento per vetrine, varianti di prodotto ed offerte per conoscere ed imparare caratteristiche e peculiarità di Zen Cart. Fig. 5.5 Configurazione Negozio Nell’ultima schermata invece, abbiamo inserito tutti i dati relativi all’amministratore del negozio: admin come nome dell’utente, una password e un indirizzo email dell’amministratore , in ultimo abbiamo anche abilitato il controllo degli aggiornamenti di Zen Cart. 67 Fig 5.6 Setup Account Amministratore Una volta salvate le impostazioni dell’amministratore, siamo passati all’ultima pagina, la quale informava della riuscita installazione del negozio, fornendoci alcuni suggerimenti e riferimenti utili sugli ultimi passi per la configurazione del negozio. Dopo aver terminato l’installazione, per motivi di sicurezza, è stata cancellata la cartella zc_install, in modo da evitare tentativi di re installazione o di eliminazione del database del negozio da parte di terzi. 68 Un altro passo fondamentale è stato quello di modificare i permessi, in sola lettura, del file configure.php presenti nelle cartelle · /admin/includes · /includes In secondo luogo, abbiamo modificato il percorso del pannello di amministrazione. Questa procedura è utile affinché invece di accedere al pannello dall’indirizzo di default, ad esempio http://www.esempio.com/admin, si accede con un indirizzo proprio e sconosciuto, come ad esempio http://www.esempio.com/tirocinioseri. Dalla cartella C:/xampp/htdocs/negozio/admin/includes abbiamo aperto il file configure.php,il quale contiene delle specifiche per il pannello amministratore e, dopo aver fatto una copia di back-up del file, lo abbiamo aperto con un editor di testo. All’interno del file le define che contengono nel percorso /admin e le abbiamo sostituite con /tirocinio-seri. define (‘DIR_WS_ADMIN’ , ‘/negozio/admin’); define (‘DIR_WS_HTTPS_ADMIN’ , ‘/negozio/admin’); define (‘DIR_FS_ADMIN’ , ‘…/negozio/admin’); Una volta salvato il file con le nuove impostazioni, abbiamo rinominato la cartella da /admin in /tirocinio-seri. Grazie a questa procedura il pannello è stato messo in sicurezza ed è possibile accedervi tramite l’indirizzo http://www.esempio.com/tirocinio-seri. 69 5.2 Installazione modulo aggiuntivo Come già detto nell’introduzione, Zen Cart è un software open source, il quale termine deriva dall’inglese e significa letteralmente “codice aperto”. Più precisamente in informatica indica un software rilasciato con un certo tipo di licenza per la quale il codice sorgente è lasciato alla disponibilità di eventuali sviluppatori indipendenti. Avere a disposizione il codice sorgente, infatti, consente ai programmatori ed agli utenti avanzati di modificare il programma a piacimento, adattandolo così alle proprie necessità. Zen Cart è un software libero, perciò è possibile aggiungere autonomamente delle funzionalità, dette appunto moduli. In rete sono disponibili molti di questi moduli supplementari che potenziano il software ed offrono opzioni molto utili, come ad esempio l’aggiunta di un nuovo amministratore al sito, una diversa gestione degli sconti ai prodotti e comparatori di prezzo. La difficoltà sta nel fatto che, una volta sviluppata una nuova funzionalità, non esistono procedure di installazione o guide per integrare il lavoro fatto nel proprio negozio, ma occorre appunto integrare in maniera autonoma il proprio modulo aggiuntivo all’interno del negozio. Panoramica del negozio Il negozio Zen Cart è suddiviso in due aree di accesso differenti. I visitatori del sito e i clienti hanno accesso allo Store Front, per fare i loro acquisti e gestire il proprio account, mentre il proprietario del negozio, detto anche amministratore, ha accesso all’Admin Console ( Pannello dell’Amministratore), attraverso il quale può aggiungere nuovi prodotti al catalogo del negozio e configurare le regole aziendali. 70 Lo Store Front funge da negozio vero e proprio dove il cliente può guardare i prodotti in vetrina ed effettuare i propri acquisti. L’intero processo della spesa online costituisce un vero e proprio flusso di lavoro come illustrato nella Figura 5.7. Fig. 5.7 Flusso di lavoro: 1)l’utente accede alla Home dello Store Front, 2)accede al catalogo dei prodotti, 3) aggiunge un prodotto al carrello, 4) effettua il Log In oppure la registrazione al sito, 5)-6)l’utente viene informato riguardo i tempi di consegna e le modalità di pagamento, 7)conferma dell’ordine, 8)l’acquisto viene inoltrato e l’utente viene informato della possibilità di ricevere email su aggiornamenti del prodotto, 9)il cliente può visionare gli ordini eseguiti e il loro stato. Admin Console L’amministratore del sito è colui che si occupa della manutenzione sito e quindi ha il completo accesso a tutte le funzionalità del negozio. L’interfaccia da noi sviluppata deve appunto far parte delle funzionalità disponibili all’amministratore e non di un normale utente o visitatore del sito. Perciò dobbiamo integrare l’interfaccia da noi creata all’interno del pannello di amministrazione. Per accedere alla home page dell’amministratore puntiamo, tramite un web browser, all’indirizzo http://www.esempio.com/tirocinio-seri . 71 Fig. 5.8 Home Page Amministratore I compiti dell’amministratore sono molteplici e per comodità vengono divisi in varie categorie: · Configurazione · Catalogo, che racchiude le varie operazioni effettuabili sui prodotti; · Moduli per i pagamenti e le spedizioni; · Clienti, dove è possibile visionare e gestire tutti i clienti registrati al sito; · Località/tasse · Localizzazioni · Reports per i prodotti più visti o per quelli più acquistati · Strumenti in cui si possono modificare i settaggi degli utenti e gestire in generale il sito; · Certificato regalo/buoni sconto · Extra 72 Abbiamo scelto di aggiungere la nostra funzionalità, che permette di visionare i prezzi dei prodotti dei siti “concorrenti”,negli Strumenti, visto che in questa categoria vengono raggruppati tutti i vari compiti di carattere generale, dalla gestione dei box laterali del sito alle email di benvenuto. Modifica del codice sorgente di Zen Cart Per poter aggiungere la nostra interfaccia alle varie funzionalità del pannello amministrativo, abbiamo dapprima aggiunto un’opzione al menù a discesa nella categoria Strumenti, in modo tale da permettere all’utente di accedere alla pagina iniziale dell’interfaccia da noi creata. Selezionando una qualsiasi categoria nel pannello dell’amministratore siamo risaliti, tramite l’URL, alla pagina C://xampp/htdocs/negozio/tirocinio-seri/alt_nav.php nella quale sono contenuti tutti i riferimenti alle pagine che gestiscono le singole categorie. Nel file alt_nav.php sono contenute le varie funzioni require(), tramite le quali vengono inclusi i file che gestiscono ogni categoria: require(DIR_WS_BOXES . 'configuration_dhtml.php'); require(DIR_WS_BOXES . 'catalog_dhtml.php'); require(DIR_WS_BOXES . 'modules_dhtml.php'); require(DIR_WS_BOXES . 'customers_dhtml.php'); require(DIR_WS_BOXES . 'taxes_dhtml.php'); require(DIR_WS_BOXES . 'localization_dhtml.php'); require(DIR_WS_BOXES . 'reports_dhtml.php'); require(DIR_WS_BOXES . 'tools_dhtml.php'); require(DIR_WS_BOXES . 'gv_admin_dhtml.php'); require(DIR_WS_BOXES . 'extras_dhtml.php'); 73 Come possiamo vedere, il file chef a riferimento alla categoria Strumenti è tools_dhtml.php. Perciò, siamo andati a modificare la pagina C://xampp/htdocs/negozio/tirocinio-seri/includes/boxes/tools_dhtml.php. Al suo interno viene definito un array, avente come chiave il nome dell’opzione nella voce Strumenti e come valore il collegamento alla relativa pagina PHP. $za_contents = array(); $za_heading = array(); $za_heading = array('text' => BOX_HEADING_TOOLS, 'link' => zen_href_link(FILENAME_ALT_NAV, '', 'NONSSL')); $za_contents[] = array('text' => BOX_TOOLS_TEMPLATE_SELECT, 'link' => zen_href_link(FILENAME_TEMPLATE_SELECT, '', 'NONSSL')); $za_contents[] = array('text' => BOX_TOOLS_LAYOUT_CONTROLLER, 'link' => zen_href_link(FILENAME_LAYOUT_CONTROLLER, '', 'NONSSL')); $za_contents[] = array('text' => BOX_TOOLS_BANNER_MANAGER, 'link' => zen_href_link(FILENAME_BANNER_MANAGER, '', 'NONSSL')); $za_contents[] = array('text' => BOX_TOOLS_MAIL, 'link' => zen_href_link(FILENAME_MAIL, '', 'NONSSL')); $za_contents[] = array('text' => BOX_TOOLS_NEWSLETTER_MANAGER, 'link' => zen_href_link(FILENAME_NEWSLETTERS, '', 'NONSSL')); $za_contents[] = array('text' => BOX_TOOLS_SERVER_INFO, 'link' => zen_href_link(FILENAME_SERVER_INFO, '', 'NONSSL')); $za_contents[] = array('text' => BOX_TOOLS_WHOS_ONLINE, 'link' => zen_href_link(FILENAME_WHOS_ONLINE, '', 'NONSSL')); $za_contents[] = array('text' => BOX_TOOLS_ADMIN, 'link' => zen_href_link(FILENAME_ADMIN, '', 'NONSSL')); $za_contents[] = array('text' => BOX_TOOLS_EMAIL_WELCOME, 'link' => zen_href_link(FILENAME_EMAIL_WELCOME, '', 'NONSSL')); $za_contents[] = array('text' => BOX_TOOLS_STORE_MANAGER, 'link' => zen_href_link(FILENAME_STORE_MANAGER, '', 'NONSSL')); $za_contents[] = array('text' => BOX_TOOLS_DEVELOPERS_TOOL_KIT, 'link' => zen_href_link(FILENAME_DEVELOPERS_TOOL_KIT, '', 'NONSSL')); $za_contents[] = array('text' => BOX_TOOLS_EZPAGES, 'link' => zen_href_link(FILENAME_EZPAGES_ADMIN, '', 'NONSSL')); $za_contents[] = array('text' => BOX_TOOLS_DEFINE_PAGES_EDITOR, 'link' => zen_href_link(FILENAME_DEFINE_PAGES_EDITOR, '', 'NONSSL')); $za_contents[] = array('text' => BOX_TOOLS_SQLPATCH, 'link' => zen_href_link(FILENAME_SQLPATCH, '', 'NONSSL')); Fig. 5.9 Definizione dell’array $za_contents Abbiamo quindi aggiunto, al temine della definizione dell’array $za_contents la seguente riga: $za_contents[] = array('text' => BOX_TOOLS_GEST_SITI, 'link' => zen_href_link(FILENAME_TIROCINIO, '', 'NONSSL')); 74 Per rendere operativa la modifica appena fatta, abbiamo aggiunto alla fine del file C://xampp/htdocs/negozio/includes/filenames.php le seguenti righe: define('BOX_TOOLS_GEST_SITI','Gestione siti "concorrenti"'); define('FILENAME_TIROCINIO','index_tirocinio'); In questo file, vengono definite, tramite la funzione define(), delle costanti, ovvero degli identificatori di valori che non possono essere modificati od eliminati. Perciò abbiamo aggiunto le nostre due costanti utilizzate precedentemente nel file tool_dhtml.php , ovvero: o BOX_TOOLS_GEST_SITI, la quale indica il nome dell’opzione che abbiamo aggiunto alla categoria Strumenti. o FILENAME_TIROCINIO che contiene il nome del file PHP della pagina iniziale dell’interfaccia da noi implementata. Il passo successivo è stato quello di copiare, all’interno della cartella dell’amministratore, C://xampp/htdocs/negozio/tirocinio-seri/, tutti i file creati nella realizzazione della nostra interfaccia. Tramite questo procedimento quindi, abbiamo aggiunto un collegamento nel pannello di amministrazione alla home page dell’interfaccia da noi creata, alla quale, è possibile accedervi tramite la voce Gestione siti “concorrenti” dal menù Strumenti. 75 Fig. 5.10 Pannello di amministrazione modificato L’ultima operazione che abbiamo eseguito per rendere completa l’aggiunta del modulo, consiste nell’aver inserito in ogni pagina PHP dell’interfaccia da noi creata (escluse quelle dedicate all’estrapolazione dei dati dai siti) le seguenti righe di codice: 1. Fra i tag <html> </html>: <link rel="stylesheet" type="text/css" href="includes/stylesheet.css"> <link rel="stylesheet" type="text/css" href="includes/cssjsmenuhover.css" media="all" id="hoverJS"> <script language="javascript" src="includes/menu.js"></script> 76 <script language="javascript" src="includes/general.js"> </script> 2. all’interno dei tag <script> </script> abbiamo aggiunto la seguente funzione Java Script: function init() { cssjsmenu('navbar'); if (document.getElementById) { var kill = document.getElementById('hoverJS'); kill.disabled = true; } } 3. nel tag <body> abbiamo aggiunto l’attributo onLoad="init()" 4. infine all’inizio del file abbiamo inserito le seguenti righe: <?php require('includes/application_top.php'); require(DIR_WS_INCLUDES . 'header.php'); ?> Queste porzioni di codice che abbiamo aggiunto in ogni file della nostra interfaccia permettono di visualizzare l’intestazione e tutte le varie opzioni di base del pannello dell’amministratore. Infatti queste, sono le istruzioni contenute in tutti i file predefiniti di Zen Cart riguardanti il pannello amministrativo. In questo modo, 77 selezionando l’opzione da noi aggiunta, Gestione siti “concorrenti”, accediamo alla pagina iniziale della nostra interfaccia compresa della barra delle opzioni del pannello. Fig. 5.11 Home della nostra interfaccia Fig. 5.12 Pagina della gestione dei dati 78 Fig. 5.13 Esempio di ricerca dei prodotti 79 6. Conclusioni L’obbiettivo dichiarato in questa tesi era quello di creare un modulo aggiuntivo per un negozio di e-commerce di parafarmaci utilizzante il software Zen Cart. Il progetto è stato realizzato con lo scopo di offrire all’utente, nonché amministratore del portale di e-commerce, un’interfaccia in grado di trovare e monitorare le variazioni di prezzo dei prodotti di due siti concorrenti di vendita (saninforma.it e parafarmacia.it). L’interfaccia è stata concepita per essere “efficace”, cioè da permettere all’utente di navigare e di trovare ciò che cerca nel minor tempo possibile, e inoltre per fare in modo che sia un mezzo valido per supportare l’utente nelle proprie scelte di mercato. L’utilizzo della piattaforma Zen Cart è stata senz’altro un fattore di avvicinamento verso un’importante realtà in continua evoluzione, l’e-commerce. Sul mercato esistono una grande quantità di software per il commercio elettronico sia a pagamento che gratuiti, come Magento, OSCommerce e Zen Cart. Zen Cart è un fork del più noto OSCommerce, entrambi i software hanno vaste comunità di sviluppatori provenienti da tutto il mondo e grazie al contributo di ognuno di loro, entrambi mettono a disposizione tantissimi moduli, funzioni e plug-in tra cui scegliere quello più utile. Si è potuto constatare che Zen Cart vanta di una maggiore attività dal punto di vista del rilascio delle distribuzioni anche se il sorgente viene segnalato dagli utilizzatori come più difficoltoso da comprendere. Inoltre si tratta di un software ancora in ascesa e la sua comunità di supporto risulta ancora inferiore rispetto a quelle delle altre piattaforme di e-commerce. In ogni caso Zen Cart rappresenta una tra le più valide alternative per la realizzazione del proprio negozio di commercio elettronico. 80 7. Sviluppi futuri L'acquisto di farmaci online ha mostrato una crescita esponenziale negli ultimi anni: Poter acquistare farmaci dal web rappresenta un vantaggio ed una comodità per molti individui. La vendita di farmaci online si rivela inoltre utilissima alla concorrenza nel mercato dei farmaci, in quanto permette un progressivo abbassamento del prezzo dei medicinali a favore degli acquirenti. Quindi, mettere a disposizione del venditore un sistema veloce e robusto, che gli permetta di “osservare” le proposte dei siti concorrenti, è senz’altro uno strumento utile per operare le proprie scelte di mercato. L’attuale livello dell’interfaccia permette di visualizzare le informazioni dei prodotti di due portali e-commerce di interesse del richiedente. Un potenziamento futuro del progetto sarà di mettere a disposizione dell’utente informazioni sui prodotti riguardanti altri portali di vendita. In questa prospettiva sarà necessario aggiungere al sorgente della nostra interfaccia le istruzioni necessarie per la visualizzazione dei dati relativi ai nuovi siti, i quali dati dovranno essere prelevati dai database creati da nuove funzioni di estrapolazione dei dati, quest’ultime create sulla base di quelle già implementate. In questo modo l’utente avrà un numero più elevato di informazioni sulle quali operare le proprie scelte di mercato. Un ulteriore potenziamento riguarda inoltre la possibilità da parte dell’utente di poter confrontare i prezzi dei parafarmaci da lui proposti con quelli dei siti concorrenti, avendo così un quadro più completo. In quest’ottica sarà necessario avere a disposizione il database in cui sono memorizzati i prodotti dell’utente, in modo tale da disporre dei dati necessari per effettuare il confronto con le proposte degli altri portali di vendita. Il problema principale però sta nel fatto che informazioni di base come il nome e la descrizione di un parafarmaco non sono le medesime per ogni sito, 81 quindi non sarebbe possibile effettuare un confronto esatto fra i prezzi dei prodotti. Una possibile soluzione è quella di aggiungere alle funzionalità di aggiunta ai preferiti e di visualizzazione del grafico prezzo, disponibili per ogni prodotto visualizzato dalla nostra interfaccia, un’ulteriore opzione in grado di visualizzare tutti i prodotti presenti nel database dell’utente aventi un nome e una descrizione simili a quella del prodotto selezionato del sito concorrente, effettuando ovviamente anche il confronto dei prezzi. 82 8. Bibliografia Testi sullo sviluppo dell’e-commerce G. Schneider e J. Perry, Commercio Elettronico, Apogeo, Milano 2000. Fonti di riferimento generale http://www.php.net. http://www.apachefriends.com. http://www.html.it. W. Mark, Sviluppare applicazioni web con PHP e MySQL, Apogeo 2006. G. Andi e B. Stig e R. Derick, PHP 5 Guida Completa, Apogeo 2005 Zen Cart http://www.zen-cart.it. http://www.zen-cart.com. Staff Zen Cart Italia, Manuale E-Commerce Zen Cart, Phasar Edizioni, Firenze 2007. G. H. Hoek, e-Start Your Web Store with Zen Cart, Cucumber Media Pte ltd 2007. 83