La fonction suivante est contenue dans process_login.install dans le cadre d'un module personnalisé appelé process_login. Le module fonctionne si j'ai créé manuellement la table de base de données, mais naturellement je voudrais que la table soit créée automatiquement lors de l'installation.
La fonction elle-même ne génère pas d'erreur de schéma lors de l'installation du module. Mais il ne crée pas non plus la table de base de données process_login_register dans la base de données Drupal 7 MySQL.
Je ne vois aucune autre erreur ni aucun problème signalé par Site Report.
Je l'ai complètement supprimé et réinstallé plusieurs fois. J'ai beaucoup cherché sur le Web et consulté deux livres que j'ai sur le développement de Drupal. Je ne vois rien de mal avec cette fonction (répertoriée ci-dessous).
REMARQUE: j'ai également essayé de définir «id» comme série mais j'obtiens le même résultat (c'est-à-dire qu'aucune table n'a été créée).
Je n'ai plus d'idées. Est-ce que quelqu'un sait pourquoi cette fonction ne fonctionne pas?
function process_login_schema(){
$schema['process_login_register'] = array(
'description' => 'Register a specific computer with the system.',
'fields' => array(
'id' => array(
'description' => 'Primary identifier.',
'type' => 'int',
'unsigned' => TRUE,
'size' => 'normal',
'not null' => TRUE,
'default' => 0,
),
'ip' => array(
'description' => "The user's IP address at registration.",
'type' => 'varchar',
'length' => 32,
'not null' => TRUE,
'default' => '',
),
'user_agent' => array(
'description' => "The user's browser user agent string at registration.",
'type' => 'varchar',
'length' => 255,
'not null' => TRUE,
'default' => '',
),
),
'primary key' => array('id'),
);
return $schema;
}
hook_enable()
. L'installation d'un module ne peut être effectuée qu'après avoir été désinstallé (en utilisant l'onglet de désinstallation ou développer / réinstaller), après quoi toutes les tables créées par le module sont supprimées. Lorsque vous installez ensuite le module, ilhook_install()
s'exécute comme prévuRéponses:
Utilisez
drush dre -y [module]
ce qui désactive, désinstalle puis réactive le module. Le-y
drapeau le rend encore plus rapide, évitant d'avoir à appuyer sur y et à entrer trois fois.la source
Ce n'est que si vous désinstallez un module, puis le réinstallez, que les tables de base de données qu'il utilise et déclare avec
hook_schema()
sont recréées.Pour désinstaller un module, vous devez:
Décochez la case affichée pour le module
Cliquez sur Enregistrer la configuration
Cliquez sur l'onglet: Uninstall_
Cliquez sur le bouton Désinstaller
Sur la page suivante, confirmez que vous souhaitez désinstaller ce module en cliquant sur le bouton Désinstaller
Comme alternative, si vous avez installé Drush, vous pouvez utiliser les commandes suivantes.
Remplacez
$module
par le nom court du module, entre les sommets et sans l'extension .module.Ce que vous avez fait est de désactiver le module, puis de le réactiver. Même si vous avez supprimé le répertoire contenant le module, pour Drupal, ce que vous avez fait est simplement de le désactiver, puis de le réactiver.
la source