# PrestaShop

PrestaShop è un CMS open source utilizzato per realizzare siti di commercio elettronico.
Nasce nel 2007 e, a differenza dei CMS più "generici" diffusi all'epoca della sua prima release (WordPress e Joomla!), PrestaShop è interamente pensato per lo sviluppo e la gestione dell'e-commerce.
I temi PrestaShop sfruttano il motore di template Smarty, il quale permette una netta separazione tra contenuti, grafica e programmazione. Grazie a questa impostazione, il web designer può occuparsi della grafica del sito lavorando sui file di template e CSS, mentre il developer può intervenire sui files PHP (difatti la documentazione ufficiale è divisa in due sezioni ben distinte, una per i web designer ed una per gli sviluppatori).
Con la prima Release di Prestashop 1.7 è stato introdotto anche Twig (da Symphony).
Dopo la versione 1.7.8 arriva la 8.0 con nuove funzionalità e un upgrade più semplice. Il più grande cambiamento in PrestaShop 8 è il PHP 8.
L'interfaccia utente semplice e intuitiva, e il sistema modulare (per implementare una funzionalità basta installare il relativo modulo), hanno reso PrestaShop uno dei CMS per l'e-commerce più diffusi e utilizzati dai professionisti.
Attorno a PrestaShop c'è una comunità molto attiva, soprattutto in Francia e in Spagna, che contribuisce al costante miglioramento del software e allo sviluppo di moduli per implementare sempre nuove funzionalità.
È tradotto in varie lingue.

## Requisiti tecnici

Per utilizzare PrestaShop è necessario installarlo nel proprio spazio web.
Bisogna quindi provvedere a registrare un dominio e a sottoscrivere un abbonamento con un hosting provider.
Per supportare PrestaShop l'hosting deve avere le seguenti caratteristiche:
* web server: Apache 1.3, Apache 2.x, Nginx o Microsoft IIS;
* PHP 5.4 o superiore installato e abilitato fino alla versione 1.7.3;
* PHP 7.0 o superiore installato e abilitato dalla versione 1.7.4;
* MySQL 5.6 o superiore installato e abilitato;
* credenziali per l'accesso FTP.

## Versioni

Le versioni in rosso non sono più supportate, in giallo quella che il supporto sta per terminare, in verde la versione che attualmente in sviluppo, in azzurro le versioni future.
| Prima Versione | Ultima Versione | Uscita prima versione stabile | Uscita ultima versione stabile | Note |
| 0.9.7 | 0.9.7 | 20 Febbraio 2008 | | Prima versione. |
| 1.1.0.1 beta 2 | 1.1.0 | 7 Maggio 2009 | | |
| 1.2.0.8 | 1.2.5.0 | 29 Luglio 2009 | | |
| 1.3.0 | 1.3.7.0 | 25 Maggio 2010 | | |
| 1.4.0.17 | 1.4.11.1 | 16 Marzo 2011 | | |
| 1.5.0.17 | 1.5.6.3 | 7 Maggio 2009 | | |
| 1.6.0.5 | 1.6.1.24 | 17 Marzo 2014 | | Per la versione 1.6 il supporto è terminato il 30 giugno 2019 |
| 1.7.0 | 1.7.8.11 | 7 Novembre 2016 | 2 Gennaio 2024 | |
| 8.0.0 beta | 8.1.5 | 26 Ottobre 2022 | 18 Marzo 2024 | |
| | 9.0.0 | | | |

## Supporto multilingua

A partire dalla versione 1.6, PrestaShop include un pacchetto Localizzazione che permette di aggiungere nuove lingue al negozio online. Per ognuna sono selezionati la valuta, l'aliquota fiscale e le regole di tassazione con valori predefiniti e personalizzabili.
Le regole consentono di applicare una tassa e la relativa sopratassa, ma non una progressività tributaria con aliquote automaticamente differenziate per intervalli di prezzo imponibile. Il programma è valorizzato per una tassazione di tipo flat.
Il pacchetto comprende un ambiente di traduzione con traduttore automatico e dizionario, per agevolare l'inserimento delle descrizioni nelle nuove lingue all'interno delle schede dei prodotti in vendita.

## Sicurezza

Sebbene esistano plugin per la sicurezza, PrestaShop può essere vittima dei seguenti attacchi informatici, come anche altri CMS:
* Cross-site scripting (XSS): permette a un cracker di inserire o eseguire codice lato client al fine di attuare un insieme variegato di attacchi quali, ad esempio, raccolta, manipolazione e reindirizzamento di informazioni riservate, visualizzazione e modifica di dati presenti sui server, alterazione del comportamento dinamico delle pagine web, ecc.
* Clickjacking ("rapimento del clic"): durante una normale navigazione web, l'utente clicca con il puntatore del mouse su di un oggetto (ad esempio un link), ma in realtà il suo clic viene reindirizzato, a sua insaputa, su di un altro oggetto, che può portare alle più svariate conseguenze: dal semplice invio di spam, al download di un file, fino all'ordinare prodotti da siti di e-commerce.
* File Inclusion: Local File Inclusion (LFI) consente a un utente malintenzionato di includere file su un server tramite il browser web. Remote File Inclusion, o RFI, nell'ambito della sicurezza informatica indica una vulnerabilità che affligge i servizi web con uno scarso controllo delle variabili arrivate da un utente, in particolare le variabili GET e POST del PHP.
* Il Cross-site request forgery, abbreviato CSRF o anche XSRF, è una vulnerabilità a cui sono esposti i siti web dinamici quando sono progettati per ricevere richieste da un client senza meccanismi per controllare se la richiesta sia stata inviata intenzionalmente oppure no.
* SQL injection o SQLi: un hacker può inserire istruzioni SQL dannose nel sito ottenendo potenzialmente l’accesso a dati sensibili presenti nel database o distruggendo questi dati.
* Esecuzione di codice in modalità remota: ottenere l'accesso a un account con privilegi riservati almeno al livelloauthor su un sito di destinazione per eseguire codice PHP arbitrario sul server sottostante, portando a un'acquisizione remota completa.
* Privilege Escalation: definita come una delle gravi vulnerabilità, l'escalation dei privilegi si verifica quando a un utente con privilegi amministrativi inferiori vengono concessi privilegi più elevati.

## Performance

Le cause principali per un sito lento fatto in PrestaShop (ma valgono per molti altri CMS) sono:
* Hosting: quando il server di web hosting non è configurato correttamente può danneggiare la velocità del sito web
* Configurazione: se il sito non usa pagine memorizzate nella cache sovraccaricherà il server, causando la lentezza o il blocco del sito web
* Immagini pesanti: a una risoluzione alta (adatta per la stampa ma non per il web) e/o una dimensione ampia e/o mancato uso degli Sprite CSS per evitare molte chiamate al server
* Riproduzione automatica dei video all'arrivo dell'utente e video ospitati sul proprio server anziché incorporato da YouTube, Vimeo o altri servizi esterni
* Moduli non validi e/o non aggiornati: se si utilizzano moduli mal codificati e/o obsoleti il sito Web può rallentare notevolmente
* Script esterni: annunci, caricatori di caratteri, ecc. possono avere un enorme impatto sulle prestazioni del sito web. Ad esempio utilizzare troppi font incorporati con Google Fonts o altri plugin di incorporazione font può rallentare il sito

### Soluzioni

Le possibile soluzioni per velocizzare PrestaShop sono:
* Scollegare tutti i moduli inutilizzati dalle loro posizioni
* Cache abilitata: velocizza le pagine. Attivalo quando il design del tuo e-commerce non deve essere modificato.
* Smart cache for CSS: riunisce in un unico file, comprime e memorizza nella cache i file CSS.
* Smart cache for Javascript: riunisce in un unico file, comprime e memorizza nella cache i file JS.
* Ottimizzazione Apache: consente di aumentare ulteriormente le prestazioni del sito.
* Minimizzare HTML: rimuove tutto lo spazio bianco dal codice HTML.
* Comprimere JavaScript mettendolo "inline" nell'HTML: se il tema utilizza del codice JavaScript, questo viene compresso per caricarlo più velocemente.
* Spostare JavaScript alla fine del codice: questa azione renderà più veloce il caricamento del contenuto della pagina e ridurrà l'attesa per gli utenti.
* Implementare un Content Delivery Network

## SEO

Per una buona SEO di PrestaShop si dovrebbe:
* Attivare i moduli SEO per PrestaShop
* Scegliere il Protocollo HTTPS
* Attivare la Sitemap XML e il file Robots.txt
* Abilitare la creazione di reindirizzamenti quando gli URL vengono modificati
* Assicurarsi di usare la versione più recente di PrestaShop
* Abilitare la riscrittura degli URL
* Inserimento dei Rich Snippets
* Parola chiave principale nel primo paragrafo
* Content Pruning (rimozione dei contenuti obsoleti che non possono più essere utili agli utenti)
* Parole chiave nei tag H1
* Immagini nominate correttamente (non per esempio "tr_1009_nh.jpg") e utilizzo del tag ALT
* Utilizzo del tag TITLE nei link
* utilizzare URLs Canonici
* Applicare il Nofollow per i link non necessari
* Applicare lo schema markup. Esempio:<div class=”product-view” itemscope itemtype=”http://sito.org/Product“>
* Testare i dati strutturati per la convalida dello schema markup
* Utilizzare title univoci per ogni pagina
* Non utilizzare contenuti duplicati

## Riconoscimenti

* 2010: Best Open-source Business Application Awards
* 2011: Best Open-source Business Application Awards
* 2013: Business Software Comparisons (BSOCO) nella categoria CMS.
* 2019: Acteurs du Libre International Award