Mentre preparo degli appunti sul web per un lavoro che devo fare, mi imbatto in questo interessantissimo video che snocciola una serie di cifre sull’utilizzo dei maggiori servizi web del momento.
Gen 04
PHP Pear, PHPUnit e Yii
Per testare il codice scritto in PHP con il framework Yii è di moda, ma anche a ragione, usare una procedura di unit test, nel mio caso PHPUnit.
Ho dovuto fare un po’ di lavoro, può essere utile a qualcuno che si è trovato nelle stesse situazioni vedere come ho risolto la cosa.
Dettagli qui.
Dic 28
Modifica ai virtualhost per l’applicazione ecommerce
Tenere due domini di secondo livello mi provoca problemi con i cookies nelle sessioni in cui ho due tab aperte sui due siti: infatti il cookie è unico e, se si lavora con un solo browser, insorgono problemi, Opencart non riesce ad aprire due sessioni distinte, e prima o poi, una mangia l’altra.
Per ovviare a questo problema ho definito due domini: cliente1.tld e cliente2.tld, rivisto i virtual host di Apache e il file hosts. Tutto funziona a pallino.
Dic 27
Come configurare Opencart in modalità multi-store
Opencart ha l’utilissima (nel mio caso) caratteristica che consente di costruire più di un negozio elettronico con la medesima installazione.
Dal punto di vista del database, esiste l’entità store ogni riga della quale definisce un negozio separato, ognuno con logo, aspetto e catalogo distinti. La differenziazione degli articoli viene poi fatta agganciando le categorie agli store tramite la tabella category_to_store. L’interfaccia di amministrazione consente di gestire separatamente i cataloghi per le diverse aziende.
Le istruzioni per costruire un multi negozio elettronico sono relativamente poche e nemmeno troppo complicate, ma il tralasciare uno stupido slash (“/”) può costare ore di lavoro.
Operazioni da interfaccia di amministrazione
Nella interfaccia di amministrazione di Opencart seguire il menu Sistema > Impostazioni (o System > Settings).
E’ definito sempre un negozio di default, che ha 0 come store_id. Possiamo definirne altri (non c’è limitazione) premendo il pulsante Inserisci, e in ognuno di questi dobbiamo inserire queste informazioni basilari:
- * URL negozio: in questa casella di testo scriviamo l’URL del singolo negozio; meglio se in un dominio a parte o in un dominio almeno di secondo livello. Ad esempio potremmo scrivere http://hifi.esempio.com/ oppure se proprio è qualcosa di completamente separato (ad esempio due clienti distinti) http://www.hifi.com/; per un secondo negozio sceglieremo http://computers.esempio.com/ oppure http://www.computers.com/. Questo campo è obbligatorio (vedi l’asterisco rosso), e vediamo più avanti come va gestito anche il dominio.
Attenzione: lo slash finale (/) è assolutamente obbligatorio (l’avverbio è inutile, ma serve a rendere l’idea del tempo che si può perdere…) pena la redirezione al negozio predefinito! - Nome negozio: qui consiglio di scrivere un nome possibilmente breve per il negozio: nella tendina “Vai al negozio” dell’interfaccia amministratore si vedrà l’elenco degli store creati e, se il descrittore è troppo lungo, la lista si vedrà male.
- Il resto dei campi compiliamolo a discrezione.
Operazioni su Apache
Ora è necessario agire sull’httpd server che viene invocato quando andiamo a visitare i negozi. Per ora sto allestendo un setup sperimentale in una sola macchina per cui mi arrangio modificando solo alcuni file (quelli di apache e il file hosts), in un ambiente di produzione occorre mettere mano anche ai DNS, se serve.
Io uso Apache 2.2 e per definire due diversi host modifico la configurazione dei VirtualHosts:
- /etc/apache2/apache2.conf delega le configurazione personalizzate ai file sites-enabled/*, per cui creo un nuovo file /etc/apache2/sites-available/opencart che contiene la definizione dei virtual hosts:
<VirtualHost *:80> DocumentRoot /var/www/opencart/ ServerName negozio1.opencart.com </VirtualHost> <VirtualHost *:80> DocumentRoot /var/www/opencart/ ServerName negozio2.opencart.com </VirtualHost>
Come si vede, sto puntando alla stessa istanza di opencart, la selezione dei cataloghi è a carico di Opencart in base all’URL digitato dall’utente.
- devo anche creare un link simbolico nella directory sistes-enabled per abilitare il virtual host
$ cd /etc/apache2/conf.d/sites-enabled $ ln -s ../sites-available/opencart .
Alla fine riavvio Apache
$ sudo apachectl graceful
Come ultima modifica, devo dire al sistema operativo di invocare localhost quando cerco opencart.com (si può scrivere anche un tld di fantasia quando si lavora in locale, tipo opencart.tld):
127.0.0.1 negozio1.opencart.com negozio2.opencart.com
Ora devo splittare i cataloghi nel database: quando ho importato i dati dal gestionale aziendale ho avuto cura di distinguere le categorie e i prodotti in base ad una informazione company_id che ho introdotto nel database di Opencart per non perdere il legame. Ora basta che valorizzi in modo coerente category_to_store per utilizzare questa informazione per il multi store (in realtà non era necessario modificare la base dati per questo motivo, ma ho comunque dovuto aggiungere della complessità a OpenCart a partire da un gestionale che aveva parecchie complicazioni in più).
Dic 20
Volunia: un punto di vista radicalmente nuovo nei motori di ricerca
Ho aderito entusiasticamente come aspirante power user del progetto di Massimo Marchiori perché mi piacciono le idee nuove.
Marchiori ha prudenzialmente evitato di fornire dettagli sul suo progetto, sicuro che Google avrebbe “sicuramente messo al lavoro un centinaio di ingegneri per lavorare notte e giorno” sulla sua idea e batterlo sul tempo.
Ha inventato HyperSearch dal quale è nato Page Rank, l’idea centrale di Google, collabora con il W3C, con il MIT di Boston e insegna Basi di dati alla Facoltà di Scienze MMFFNN dell’Università di Padova. Lieto di averlo preceduto, nel mio piccolo.
Volunia dovrebbe uscire a giorni (il contatore alla rovescia nel sito non ha le idee chiare, ma faccio tutti gli in bocca al lupo possibili).
Dic 14
Bosone di Higgs: ultimi progressi
La particella di Dio si fa desiderare. Nell’ultima conferenza stampa di ieri, 13 dicembre (che non è il giorno più corto che ci sia come dicono ai telegiornali!), è stato affermato che se il bosone di Higgs esiste, deve avere una massa compresa tra 115 e 130 GeV. Insomma non è ancora stata scoperta, ma ci arriveranno.
L’articolo completo sul sito del CERN.
La definizione di elettronVolt e perché si misurano le masse con un’unità di misura dell’energia.
Nov 29
Opencart – software open source per ecommerce
Sto lavorando ad un sito di ecommerce per un Cliente, ed ho pensato di adottare Opencart per il fatto che è potente, flessibile e open source. Sto infatti procedendo ad una serie di modifiche strutturali abbastanza significative per adattarlo alle esigenze del mio Cliente.
Un paio di cose noiose che mi hanno fatto perdere tempo, ma alle quali ho trovato risposta:
- Un fastidioso errore Javascript (JSON Error: SyntaxError: Unexpected token E con Chrome, un po’ differente con Firefox) durante il check out mi impedisce di completare l’acquisto; ho trovato la soluzione nel [1] di OpenCart, ma è molto recente (un paio di settimane fa) ; c’è da aggiungere una nuova libreria e sostituire il file catalog/view//theme/default/checkout/checkout.tpl. Questo consente di produrre un debug più prolisso per cui si capisce l’origine dell’errore JSON che compariva: mancava un file di configurazione della lingua (nel mio caso, il file catalog/language/italian/checkout/success.tpl). Copiato il file dalla versione inglese, tradotto e tutto ha funzionato.
- Sempre sul forum di Opencart [2] ho trovato qualche suggerimento a cui rifarmi per il progetto dei banner.
- Lo stesso errore può accadere anche durante in free checkout: ciò che esce è un errore JSON che, dopo aver installato il pacchetto vqmod, riporta il messaggio “Error: Could not load language payment/free checkout”; anche in questo caso occorre copiare il file catalog/language/english/payment/free_checkout.php nella corrispondente cartella italiana.
Nov 27
Yii in ambienti promiscui
Si possono usare prefissi alle tabelle per far convivere più sottoschemi all’interno di un solo schema. Buono per ambienti promiscui.
Perché le classi omettano tale prefisso nel loro nome (quindi, a partire dalla tabella tbl_user, generare la classe User e non TblUser) editare il file protected/config/main.php e aggiungere la riga
tablePrefix' => 'tbl_',
nel descrittore del connettore a database:
db'=>array( 'class'=>'CDbConnection', 'connectionString' => 'mysql:host=localhost;dbname=mydb', 'tablePrefix' => 'tbl_', <------------- 'emulatePrepare' => true, 'username' => 'user', 'password' => 'pass', 'charset' => 'utf8', ),
Nov 26
Commenti recenti