4 - Accès base de données

Article publié par : (Google+ Profile) Mis à jour le 20 déc. 2017 (publié depuis le )
Gestion de sql dans magento

Que pensez-vous de cet article ?

OR

!!! ATTENTION SCRIPT 1.4 !!!

Cette partie du tutoriel fonctionne parfaitement sur une Magento Community 1.6 mais est écrite dans les standards 1.4.3. Aussi la version standard 1.6 diffère. Je vous recommande donc la lecture du tutoriel annexe suivante:
Modèle de données magento version 1.6
A noter que par défaut le reste du tutoriel est basé sur cette version: 1.6 full Updated.

Déclarer la table sql 

Nous allons ici mettre en place une table dite en 'flat' par opposition au modèle eav, standard de magento.

Pour ce faire il faut d'abord déclarer les informations correspondant à la table dans magento. (n'oubliez pas que ce travail est certe long, mais permet une grande évolutivité et souplesse pour le reste de la vie de votre module)

<models>
	<gestion>
		<class>Valibus_Gestion_Model</class>
		<resourceModel>gestion_mysql4</resourceModel>
	</gestion>
	<gestion_mysql4>
		<class>Valibus_Gestion_Model_Mysql4</class>
		<entities>
			<gestion>
				<table>gestion</table>
			</gestion>
		</entities>
	</gestion_mysql4>
</models>
<resources>
	<gestion_setup>
		<setup>
			<module>Valibus_Gestion</module>
		</setup>
		<connection>
			<use>core_setup</use>
		</connection>
	</gestion_setup>
	<gestion_write>
		<connection>
			<use>core_write</use>
		</connection>
	</gestion_write>
	<gestion_read>
		<connection>
			<use>core_read</use>
		</connection>
	</gestion_read>
</resources>

Nous rajoutons ici plusieurs éléments, tout d'abord un bloc models et un resources.
Le bloc resources contient tout la partie autorisation de connexion à la BDD. Les éléments core_read, core_write, et core_setup étant définis dans app/etc/config.xml lui même étant complété par app/etc/local.xml.
Ceci pour dire que vous pourriez ici configurer en vous inspirant de ces deux derniers fichiers un autre utilisateur de connexion à la base de donnée si le besoin se présentait.
Le bloc models contient lui toute la partie implémentation de la classe model et de la classe resource model qui lui est associée. A noter que l'on définit ici le nom de la table 'pushproduct'.

Créer la table

La table ne se créé pas directement dans mysql, mais via un script d'installation, c'est ce qui donne une réelle portabilité à votre module.
Nous allons donc créer le script d'installation :
Valibus/Gestion/sql/mysql4-install-0.1.0.php

<?php
 
$installer = $this;
 
$installer->startSetup();
 
$installer->run("
 
-- DROP TABLE IF EXISTS {$this->getTable('gestion')};
CREATE TABLE {$this->getTable('gestion')} (
  `gestion_id` int(11) unsigned NOT NULL auto_increment,
  `skuproduit` varchar(255) NOT NULL default '',
  `created_time` datetime NULL,
  `update_time` datetime NULL,
  PRIMARY KEY (`gestion_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 
    ");
 
$installer->endSetup();

Le fichier s'appelle ainsi car c'est un script d'installation de la version du module 0.1.0 (voir config.xml). Plus tard nous verrons que nous pouvons créer un script d'update qui sera exécuté lors de la modification du numéro de version du module dans le config.xml.

Création Model, Mysql4, Collection

Création du model

Valibus/Gestion/Model/Gestion.php

<?php
class Valibus_Gestion_Model_Gestion extends Mage_Core_model_Abstract {
	public function _construct(){
		$this->_init('gestion/gestion');
	}
}

Paramètrage mysql4

Valibus/Gestion/Model/Mysql4/Gestion.php

<?php
class Valibus_Gestion_Model_Mysql4_Gestion extends Mage_Core_Model_Mysql4_Abstract {
	public function _construct(){
		$this->_init('gestion/gestion', 'gestion_id');
	}
}

Déclaration de la collection

Valibus/Gestion/Model/Mysql4/Gestion/Collection.php

<?php
class Valibus_Gestion_Model_Mysql4_Gestion_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract {
}

Exemple d'application de votre module

Vous pouvez désormais réaliser vos premiers essais, par exemple modifier le code du block ainsi:

 <?php
class Valibus_Gestion_Block_Showblock extends Mage_Core_Block_Template
{
 public function voirblock()
     {
     	$return='';
     	$collection=Mage::getModel('gestion/gestion')->getCollection();
		foreach($collection as $item){
			$return.=$item->getSkuproduit()."<br />";
		}
		return $return;
     }
}

Comme vous le voyez, pour obtenir la valeur d'un champ, il est suffisant d'utiliser la méthode magique get<Nomduchamp>(). Attention à ne pas oublier la majuscule au début du nom du champ.

Etape suivante : 5 - Traduction / Helpers

Besoin d'aide pour réaliser un module Magento ? Appelez nous et prenez rendez vous avec notre développeur magento.

Que pensez-vous de cet article ?

Aucun avis pour le moment, soyez le premier à laisser le votre !