domenica 31 agosto 2014

Magento - rimozione della cartella per il negozio predefinito (pubblicazione di tutte le url sulla root)

Magento - Pubblicazione degli url sulla root per il negozio predefinito

Per varie ragioni principalmente legate alla SEO può essere necessario (o comunque preferibile) mettere tutti gli indirizzi del negozio predefinito sulla root del sito web anzichè su una sottocartella (tipicamente /it/ per i siti italiani).

Questo significa far gestire a Magento gli url senza aggiungere il codice negozio per avere gli url sulla root e poi forzarne il caricamento su sottocartelle create appositamente per i restanti codici negozio.

Disabilitiamo su Magento l'aggiunta del Codice del Negozio agli URLs

Innanzitutto disabilitiamo quindi l'aggiunta del codice negozio agli Url:



A questo punto tutti gli url saranno sulla root.

Creazione della cartella con il codice negozio per il negozio NON predefinito

Ora creiamo una cartella per ogni negozio NON PREDEFINITO, utilizzeremo il codice negozio per nominare la cartella. In ciascuna di queste cartelle copieremo i seguenti file dalla root di Magento:

* .htaccess
* index.php



In seguito vedremo quali modifiche vanno effettuate ai due file.

Impostazione dell'url per ogni negozio

Ora per ogni negozio dovremo specificare manualmente l'indirizzo del sito web.



Le differenze rispetto alle normali configurazioni è che:

* per URL di base inseriamo http://www.ilmiositoweb.it/en/ che è il percorso effettivo del sito web;
* per Skin URL di base andiamo ad inserire al posto della solita variabile {{unsecure_base_url}} l'indirizzo del sito web http://www.ilmiositoweb.it/skin. Lo stesso discorso vale per i campi Media URL di base e JavaScript URL di base;

Questo perchè ogni store deve utilizzare come root la cartella fisica corrispondente al codice negozio, ma deve prendere dalla root principale del sito  i CSS, le immagini e i JavaScript.

La stessa procedura vale per gli indirizzi sicuri, se utilizzate una sessione HTTPS.

MODIFICA DEL FILE index.php

Ora che abbiamo modificato detto a Magento di usare come root per ogni store NON PREDEFINITO le cartelle fisiche nominate come i codici negozio, dobbiamo modificare file .htaccess e index.php per far funzionare l'entry point principale del software.



a questo punto dobbiamo modificare l'entry point di Magento, il file index.php contenuto nella cartella /en/ appena creata, non quello sulla root.

Andiamo alla fine del file, qui troveremo il seguente codice:

/* Store or website code */
$mageRunCode = isset($_SERVER['MAGE_RUN_CODE']) ? $_SERVER['MAGE_RUN_CODE'] : '';
/* Run store or run website */
$mageRunType = isset($_SERVER['MAGE_RUN_TYPE']) ? $_SERVER['MAGE_RUN_TYPE'] : 'store';
Mage::run($mageRunCode, $mageRunType);

inseriremo quindi le seguenti variabili prima dell'ultima riga:
$mageRunCode="en";
$mageRunType="store";
Mage::run($mageRunCode, $mageRunType);
In questo modo le variabili $mageRunCode e $mageRunType anzichè essere impostate dinamicamente avranno sempre lo stesso valore a seconda della cartella dove si trovano.

Ora dobbiamo dire a Magento i percorsi giusti per le variabili:

* $compilerConfig
* $mageFilename

e indicare il percorso giusto per il file errors/503.php

Per fare questo, dato che sarà il file /en/index.php il nuovo entry point, avremo bisogno di modificare i percorsi dicendogli di salire di un livello e andare sulla root.

Modifica del file .htaccess



Alla riga 123 del file .htaccess (se non sono state effettuate altre modifiche al file) troveremo la riga
# RewriteBase /magento/
decommentiamola e inseriamo al posto di /magento/ il percorso della cartella su cui vogliamo inserire la root del sito web. in questo modo:
RewriteBase /en/
In questo modo varemo modificato correttamente il percorso dei negozio.

Ordine degli store

Sulle vecchie versioni di Magento (1.7 e precedenti) occorre indicare come store predefinito in SISTEMA -> GESTIONE NEGOZI-> NOME VISTA NEGOZIO l'ordine di caricamento del negozio. Nelle versioni più recenti (1.8 e successive) occorre inserire sempre in SISTEMA -> GESTIONE NEGOZI-> NOME VISTA NEGOZIO la vista negozio di default.

Localizzazione

Infine in SISTEMA -> CONFIGURAZIONE -> GENERALE non dimentichiamoci di impostare come lingua predefinita quella del negozio predefinito.


sabato 23 agosto 2014

Eliminazione delle immagini dal Database MySql e struttura EAV del database di Magento

Eliminazione delle immagini dal Database MySql di Magento

Su Magento può capitare di voler eliminare le immagini dei prodotti direttamente dal database. Per farlo occorre modificare i dati delle seguenti tabelle coinvolte sono:
  • catalog_product_entity_varchar
  • catalog_product_entity_media_gallery
  • catalog_product_entity_media_gallery_value

Le tabelle della galleria

Le seguenti tabelle:
  • catalog_product_entity_media_gallery
  • catalog_product_entity_media_gallery_value
contengono le immagini della galleria, per eliminare tutti i record è quindi sufficiente eseguire le seguenti query:
DELETE FROM catalog_product_entity_media_gallery_value
DELETE FROM catalog_product_entity_media_gallery
A causa delle Foreign Key un comando TRUNCATE non funzionerebbe.

Infine si possono eliminare le immagini dalla tabella:


  • catalog_product_entity_varchar

E' possibile utilizzare la seguente istruzione SQL:
DELETE FROM `catalog_product_entity_varchar` WHERE `attribute_id`=85 OR `attribute_id`=86 OR `attribute_id`=87
I valori 85 - 86 - 87 della clausola WHERE rappresentano i vari formati di immagine disponibili per il prodotto su Magento (image, thumb, small).

Osservazioni sulla struttura della tabella catalog_product_entity_varchar e sul database EAV di Magento 

Questa tabella contiene gli attributi di tipo VARCHAR dei prodotti inseriti. In Magento la maggior parte delle informazioni relative ai prodotti sono gestite come attributi. Quindi un'istruzione DELETE senza nessuna WHERE specificata come nel caso delle tabelle relative alla galleria delle immagini cancellerebbe, non solo i riferimenti ai file delle immagini dei prodotti ma anche altre informazioni.

I campi della tabella sono i seguenti:

* value_id, la chiave primaria della tabella
* entity_type_id, il tipo di entità, nel caso dei prodotti del catalogo il valore è sempre 4
* attribute_id, il tipo di attributo da cancellare
* store_id, l'id del negozio (sarà sempre 1 se non gestite un sito multilingua o un multistore)
* entity_id, l'id del recordprodotto
* value, il valore effettivamente inserito

Se volete verificare quali informazioni sono disponibili per un singolo prodotto (supponiamo quello con id 363) potete quindi eseguire la seguente query:
SELECT * FROM  `catalog_product_entity_varchar` WHERE  `entity_id` =363;
troverete tutti gli attributi assegnati a quel prodotto. Per conoscere a cosa corrisponde il valore dell'attribute_id, è sufficiente andare nel pannello di controllo su CATALOGO->ATTRIBUTI->GESTIONE ATTRIBUTI e  verificare il valore dell'attributo.

Se filtrerete i nomi degli attributi con i seguenti codici attributo:

* thumbnail
* image
* small_image

troverete appunto gli id 85, 86 e 87.

Per saperne di più sulla struttura EAV del database di Magento: