Categorie
Blog

Programmazione magento – Creare url rewrite

Ciao a tutti,
in questo post, il primo della serie intitolata “Programmazione Magento“, vi mostrerò come creare in maniera semplice i rewrite per tutte le pagine che volete, sia che queste siano dinamiche, ad esempio quelle generate da moduli personalizzati, oppure statiche, come quelle create da cms.

Cosa è un URL REWRITE?

Una url rewrite è una tecnica per la quale una url viene sostituita da un altra che riteniamo migliore per varie motivazioni, che possono essere leggibilità e ottimizzazione per i motori di ricerca.

Facciamo un esempio:
Abbiamo una ulr del tipo:
[sourcecode]
www.sito.com/page.php?id=237&regione=toscana&provincia=firenze
[/sourcecode]

Questa url è alquanto complessa, e si differenzia dalla altre per il tipo e valore dei parametri passati in GET. Per le motivazioni che abbiamo accennato prima vogliamo trasformare questa url nella seguente:
[sourcecode]
www.sito.com/toscana/firenze/pagina.html
[/sourcecode]

Per fare questo è necessario utilizzare le Url Rewrite di apache.
Non starò qua a spiegare come funzionano le url rewrite di apache, ma vi dico solamente che Magento è in grado di produrre e generare Url Rewrite per apache attraverso il suo “motore” di rewrite che è in grado di rispodere alle esigenze di creare url ben formattate ad esempio nei nostri moduli personalizzati.

Ma andiamo a vedere come è possibile creare url rewrite da codice di magento.
[sourcecode language=”php”]
Mage::getModel(‘core/url_rewrite’)
//si imposta il tipo di rewrite a personalizzato
->setIsSystem(false)
//si imposta lo store view per il quale la url rewrite verrà creata
->setStoreId(2)
//si imposta il path che si vuole riscrivere, è il path originale non riscritto
->setIdPath($originalurl)
//si imposta il path che si vuole riscrivere, è il path originale non riscritto
->setTargetPath($originalurl)
//si imposta la nuova url (quella riscritta)
->setRequestPath($new_url)
->save();
[/sourcecode]

Così è possibile creare un rewrite. Accedendo alla $new_url veniamo rediretti (in automatico ed in modo nascoto) alla vecchia url, ma il browser manterrà quella nuova nella barra degli indirizzi.

Se poi vi capita di dover ricercare delle url in base al path reale oppure a quello riscritto potete utilizzare le seguenti funzioni:
[sourcecode language=”php”]
Mage::getModel(‘core/url_rewrite’)->setStoreId(2)->loadByIdPath($originalurl)
Mage::getModel(‘core/url_rewrite’)->setStoreId(1)->loadByRequestPath($new_url)
[/sourcecode]

Per qualunque richiesta non esitate a contattarmi!

Categorie
Blog

Come migliorare le prestazioni di magento attraverso apache

Un semplice modo per migliorare le prestazioni di magento è customizzare apache facendo in modo che il server comprima il suo output prima che questo venga mandato ai client nella rete.

Per fare questo è necessario modificare il file .htaccess all’interno della propria installazione magento dicendogli di abilitare questa compressione.

I moduli che devono essere abilitati prima di modificare il file htaccess sono due: deflate e headers. In una distrubuzione debian-like questi moduli si abilitano con i seguenti due comandi:
[sourcecode language=”shell”]
a2enmod headers
a2enmod deflate
[/sourcecode]

Dopo avere abilitato i moduli è necessario modificare il prorprio htaccess decommentando il seguente codice se presente o inserendolo:

[sourcecode language=”shell”]
php_flag zlib.output_compression on

<IfModule mod_deflate.c>

############################################
## enable apache served files compression
## http://developer.yahoo.com/performance/rules.html#gzip

# Insert filter on all content
SetOutputFilter DEFLATE
# Insert filter on selected content types only
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript

# Netscape 4.x has some problems…
BrowserMatch ^Mozilla/4 gzip-only-text/html

# Netscape 4.06-4.08 have some more problems
BrowserMatch ^Mozilla/4\.0[678] no-gzip

# MSIE masquerades as Netscape, but it is fine
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

# Don’t compress images
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary

# Make sure proxies don’t deliver the wrong content
Header append Vary User-Agent env=!dont-vary

</IfModule>

[/sourcecode]

Potrete notare che le prestazioni del vostro magento miglioraranno del 200%!!.
Al prossimo articolo!!

Categorie
Blog

Come i colori influenzano gli acquisti

Lo shopping è influenzato da molti fattori, ed uno di questi è il colore, che non è solamente una caratteristica di un prodotto, ma è un fattore che fa si che in noi scattino delle reazioni che determinano le nostre future azioni. Stiamo parlando di una sorta di arte della persuasione, e di come i colori utilizzati in maniera corretta, nei prodotti, nei pulsanti e nell’aspetto di un e-commerce possono influenzare l’acquisto tanto da decretarne il buon o cattivo esito.

Questo articolo è ripresso dal blog kiss metrics e qua sotto la rappresentazione visuale (tramite una immagine, chiamata infographic) dell’impatto dei colori sugli ecommerce.


Categorie
Blog

Opzioni di configurazione di un modulo

Quando si progetta un modulo o una estensione capita di avere la necessità di inserire nel codice, tramite variabili statiche, oppure in file di configurazione dei parametri che permettono di impostare il nostro modulo. I parametri di configurazione possono essere disparati ed in questo articolo andremo a vedere come è possibile in Magento inserire delle stringhe di configurazione all’interno del nostro file config.xml che si trova all’interno della cartella etc di ogni modulo (app/code/local/Mio/Modulo/etc/config.xml).

La configurazione va aggiunta all’interno della sezione global nel seguente modo (andrò ad inserire una query nel file di configurazione in modo da poterla caricare quando ne ho bisogno ed una variabile custom):
[sourcecode language=”xml”]
<?xml version="1.0"?>
<config>
<global>

<namespace>
<query>
<select>
<all>
SELECT
*
FROM tabella
</all>
</select>
</query>
<aaa>
<bbb>
<ccc>variabile custom</ccc>
</bbb>
</aaa>
</namespace>

</config>

[/sourcecode]

Per poter accedere alla variabile di configurazione dovremo utilizzare il seguente codice:
[sourcecode language=”php”]
$conf_query = Mage::getConfig()->getNode(‘global/namespace/query/select’)->all;
$conf_var = Mage::getConfig()->getNode(‘global/namespace/aaa/bbb’)->ccc;
[/sourcecode]

Ecco a voi come inserire nei file di configurazione le vostre variabili personalizzate.

Categorie
Blog

Utilizzare un database mysql esterno per le estensioni

Capita di dover accedere a dati esterni al nostro magento, o addirittura in database che risiedono in host diversi da quello del magento.

E’ necessario quindi indicare al nostro modulo o estensione personalizzata i parametri di accesso al database; attualemente sto utilizzato la versione 1.4.2 di Magento che riesce a collegarsi solamente ad un database Mysql, se qualcuno di voi ha notizie di come collegare magento a postgres mi faccia sapere, sarò lieto di pubblicare la soluzione.

Quindi andiamo nel nostro file config.xml all’interno della directory nostrmodulo/etc/config.xml e inseriamo il seguente codice:

 
[sourcecode language=”xml”]
<?xml version="1.0"?>
<config>
<global>
<modules>
<my_module>
<version>0.1.0</version>
</my_module>
</modules>
<helpers>
<my_module>
<class>My_Module_Helper</class>
</my_module>
</helpers>
<resources>
<externaldb_write>
<connection>
<use>externaldb_database</use>
</connection>
</externaldb_write>
<externaldb_read>
<connection>
<use>externaldb_database</use>
</connection>
</externaldb_read>
<externaldb_setup>
<connection>
<use>core_setup</use>
</connection>
</externaldb_setup>
<externaldb_database>
<connection>
<host><![CDATA[hostname oppure ip]]></host>
<username><![CDATA[username da inserire]]></username>
<password><![CDATA[password da inserire]]></password>
<dbname><![CDATA[database name da inserire]]></dbname>
<model>mysql4</model>
<type>pdo_mysql</type>
<active>1</active>
</connection>
</externaldb_database>
</resources>
</global>
<frontend>
<routers>
<mymodule>
<use>standard</use>
<args>
<module>My_Module</module>
<frontName>mymodule</frontName>
</args>
</mymodule>
</routers>
<layout>
<updates>
<mymodule>
<file>mymodule.xml</file>
</mymodule>
</updates>
</layout>
</frontend>
</config>

[/sourcecode]

Ora che abbiamo configurato il nostro modulo per accedere ad un database mysql esterno personalizzato dobbiamo creare il codice in grado caricare la connessione al database e passare query a questo. Per farlo inseriremo un metodo di esempio nell’Helper del nostro modulo (cartella che contiene classi e funzioni di utilitità) nel seguente file nostrmodulo/Helper/Data.php:

[sourcecode language=”php”]
class My_Module_Helper_Data extends Mage_Core_Helper_Abstract {
public function getDataFromDb(){
$resource = Mage::getSingleton(‘core/resource’);
$conn = $resource->getConnection(‘externaldb_read’);
$queryString = "select * from table_example";

$results = $conn->fetchAll($queryString);
Mage::log($results);
foreach($results as $row) {
echo var_dump($row);
}

}
}
[/sourcecode]

Ecco fatto, basterà attivare il modulo nel file app/etc/modules/My_Module.xml nel seguente modo e richiamare l’helper nel controller o ovunque sia necessario.
[sourcecode language=”xml”]
<?xml version="1.0"?>
<config>
<modules>
<My_Module>
<active>true</active>
<codePool>local</codePool>
</My_Module>
</modules>
</config>
[/sourcecode]

Per richiamare l’helper all’interno del controller create il file My_Module/controllers/IndexController.php:

[sourcecode language=”php”]
class My_Module_IndexController extends Mage_Core_Controller_Front_Action
{
public function indexAction()
{
$result = Mage::helper("my_module)->getDataFromDb();
$this->loadLayout(array(‘default’));
$this->renderLayout();
}

}
[/sourcecode]

Ciao e alla prossima!