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!