SQL magento : créer une nouvelle table au lancement d’un module

novembre 22, 2009 2 Commentaires

Nous allons voir dans ce tutoriel, comment créer de nouvelles tables dans la base de données de magento au lancement d’un nouveau module. Pour cela nous allons utiliser un script SQL initialisé par un setup. Ce setup se configure dans le fichier config.xml du module.
Dans les précédents tutoriels consacrés à la création d’un module nous avons vu comment fonctionnait globalement un module, ainsi que les rôles de tous les éléments du module.
Les controler MVC, les block ,comment référencer un module et l’architecture d’un module et toutes ses composantes.

Nous allons voir ici comment configurer le fichier config.xml du dossier etc du module. Ajoutez la déclaration dans le fichier config.xml du dossier etc :

initialisation du setup

<config>
	<modules>
		<Monmodule_Scriptsql>
			<version>0.7.0</version>
		</Monmodule_Scriptsql>
	</modules>
	<global>
		<resources>
			<scriptsql_setup> <!-- ajout du setup pour le module. Le dossier SQL du module contiendra un dossier avec ce nom "scriptsql_setup"-->
				<setup>
					<module>Monmodule_Scriptsql</module>
				</setup>
			<connection>
					<use>core_setup</use>
			</connection>
			</scriptsql_setup> 
		</resources>
	</global>
</config>

Explication du code

On fait référence à notre module : Monmodule_Scriptsql avec une version 0.7.0 cette version est importante il faudra l’indiquer dans le script SQL.
On déclare dans le noeud global resources, juste en-dessous le nom du setup « scriptsql_setup » ce nom correspondra au nom du dossier contenu dans le dossier SQL
On indique le type de connexion ici core setup pour initialiser la table au lancement du module, d’autres sont disponibles nous les verrons plus tard.

Créer le dossier SQL du module

Dans le module Monmodule_Scriptsql ajoutez un dossier sql contenant un autre dossier nommé « scriptsql_setup ». Placez à l’intérieur de ce dossier un fichier
mysql4-install-0.7.0.php. Il est explicite mysql intall avec la version 0.7.0 correspondant à la version indiquée dans le fichier config.xml

Arborescence du module : dossier sql et etc

Arborescence du module : dossier sql et etc

Script de création de table

$installer = $this;
/* @var $installer Mage_Core_Model_Resource_Setup */
 
$installer->startSetup();
 
$installer->run("
 DROP TABLE IF EXISTS {$this->getTable('mabelletable')};
 CREATE TABLE {$this->getTable('mabelletable')} (
 `id` INT(10) NOT NULL, 
 `name` VARCHAR(255) NOT NULL,
 PRIMARY KEY (`id`)
 )ENGINE =innoDB CHARACTER SET utf8 COLLATE utf8_bin COMMENT = 'holabelletable';
				");
$installer->endSetup();

Ce script créera une nouvelle table « mabelletable » dans la base de données magento au premier lancement du module.
Au premier lancement magento recherche son setup et l’exécute. Magento l’exécute qu’une seule fois, et le référence au sein de la table core_ressource de la base de données de magento. Cette entrée correspondant au nom du setup pour le tutoriel est « scriptsql_setup  »
Si vous effectuez des modifications sur script sql elles ne seront pas prises en compte, car le setup est déjà référencé dans la base de données. Pour relancer le setup il faut supprimer l’entrée de la base de données « scriptsql_setup » vider le cache et relancer magento.

Code
2 commentaires : “SQL magento : créer une nouvelle table au lancement d’un module”
  1. Bruno dit :

    Salut j’essaye de me connecter à la base de données de Magento. Je suis dans un template, impossible d’établir la connexion, quel code utiliser ? Existe t’il une syntaxe particulière.

  2. admin dit :

    Bonjour,
    Oui tu peux te connecter à la base de donnée via un template
    Mage::getSingleton(‘core/resource’)->getConnection(‘core_read’);
    je vais faire un tutoriel complet sur la connexion directe
    ++

Poster un commentaire

(obligatoire)

(obligatoire)