[Résolu] table métier non dans table node

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

bonjour,
d'après ce que j'ai compris les nodes sont stockés dans la table node.
Supposons que j'ai une table relative aux communes francaise, comment la rendre visible et modifiable sur drupal?
Faut il obligatoirement que la table des communes francaises soient intégrée à la table node ou drupal sait fonctionner avec des tables créées par l'admin?

Merci d'avance

Forum : 
Version de Drupal : 

Pour être exacte, ce sont les propriétés des noeuds qui sont stockés dans la table "node" (titre, status, date de création, etc). Les contenus des champs de la table (ceux qui vous ajoutez ou par défaut "body") sont stocké dans des tables de champ "field_data_field_XXX".

Drupal permet d'ajouter des champs (évidemment ;-) et des tables pour héberger des propriétés supplémentaires. En aucun cas il ne faut modifier la table "node".

Pour répondre plus directement à votre question, ce que j'en comprend c'est que vous avez une table de communes, et que vous voulez la manipuler comme un type de contenu "commune" avec un noeud par commune et ainsi pouvoir modifier/ajouter/supprimer une nouvelle commune dans cette table.

Si c'est bien cela, passer par la création d'un type de contenu "commune", y ajouter les champs nécessaire, et écrire une petite procédure d'importation initiale me semble beaucoup plus efficace.

S'il s'agit en revanche dans un type de contenu de référencer un table de communes, cela implique :
1/ de créer un module custom
2/ créer dans la partie .install du module, une table node_commune avec au minimum le champ nid, et le champ commune_id qui sera la référence à votre table.
3/ implémenter un hook_node_load, hook_node_insert, hook_node_update et hook_node_delete pour maintenir la table node_commune en fonction d'une propriété $node->commune_id (par exemple).
2/ d'implémenter un hook_form_alter pour ajouter l'élément de formulaire permettant le choix de la commune et ainsi renseigner le $node->commune_id Pour plus d'information, chercher Form API dans google.

Cela peut semble impressionnant comme cela mais chaque hook va contenir peu de lignes de code. Par exemple le hook_node_load ressemblera à cela :

<?php
function mon_module_hook_node_load($nodes) {
 
$query = db_query('SELECT * FROM {node_commune} WHERE nid in :nids', array(':nids'=>array_keys($nodes));
 foreach (
$query as $row) {
  
$node[$row->nid]->commune_id = $row->commune_id;
 }
 }
?>