Views - jointure tables

Catégories:

Bonjour à tous,

Je suis en train de développer un petit module qui me permettrait d’exposer les données d’un table dans le module views.
Je vais essayer d’expliquer le plus clairement possible mon problème.
J’ai 3 tables :

  • - node (nid)
  • - filenode (fid, nid)
  • - files (fid, filepath, filename)

Vous l’aurez compris la table filenode est l’intermédiaire entre la table files et node

via hook hook_views_data :
1er cas (où ça fonctionne) je veux récupérer la valeur de filenode.fid

<?php
function filenode_view_views_data()
{
   
$data['filenode']['table']['group']  = t('FileNode');
$data['filenode']['table']['join'] = array(
     
'node' => array (
           
'left_field' => 'nid',
           
'field' => 'nid',
        ),
    );
   
$data['filenode']['fid'] = array(
     
'title' => t('FID'),
       
'help' => t('file id'),
    
'field' => array(
            
'handler' => 'views_handler_field',
            
'click sortable' => TRUE,
         ),
    
'sort' => array(
         
'handler' => 'views_handler_sort',
      ),
    
'filter' => array(
           
'handler' => 'views_handler_filter_string',
     ),
    
'argument' => array(
         
'handler' => 'views_handler_argument_string',
       ),
);
return
$data;
}
?>

2ème cas (où ça ne fonctionne pas) :
J’essaie de récupérer les données de la table files

<?php
function filenode_view_views_data()
{
   
$data['filenode']['table']['group']  = t('FileNode');
   
$data['filenode']['table']['join'] = array(
       
'files' => array (
           
'left_field' => 'fid',
           
'field' => 'fid',
        ),
     
'node' => array (
           
'left_field' => 'nid',
           
'field' => 'nid',
        ),
    );
   
  
$data['filenode']['fid'] = array(
     
'title' => t('FID'),
       
'help' => t('file id'),
    
'field' => array(
            
'handler' => 'views_handler_field',
            
'click sortable' => TRUE,
         ),
    
'sort' => array(
         
'handler' => 'views_handler_sort',
      ),
    
'filter' => array(
           
'handler' => 'views_handler_filter_string',
     ),
    
'argument' => array(
         
'handler' => 'views_handler_argument_string',
       ),
);
   
$data['filenode']['filename'] = array(
       
'title' => t('Filename'),
       
'help' => t('This is the filename.'),
       
'field' => array(
           
'handler' => 'views_handler_field',
           
'click sortable' => TRUE,
        ),
       
'sort' => array(
           
'handler' => 'views_handler_sort',
        ),
       
'filter' => array(
           
'handler' => 'views_handler_filter_string',
        ),
       
'argument' => array(
           
'handler' => 'views_handler_argument_string',
        ),
    );
   
$data['filenode']['filepath'] = array(
       
'title' => t('Filepath'),
       
'help' => t('This is the filepath.'),
       
'field' => array(
           
'handler' => 'views_handler_field',
           
'click sortable' => TRUE,
        ),
       
'sort' => array(
           
'handler' => 'views_handler_sort',
        ),
       
'filter' => array(
           
'handler' => 'views_handler_filter_string',
        ),
       
'argument' => array(
           
'handler' => 'views_handler_argument_string',
        ),
    );
   return
$data;
}
?>

J’ai essayé de suivre et comprendre les liens suivants :
- http://groups.drupal.org/node/17236
-http://views-help.doc.logrus.com/help/views/api-tables

Mais rien n’y fait, la requête générée n’est pas correcte :

user warning: Unknown column 'filenode.filename' in 'field list' query: SELECT node.nid AS nid, node.title AS node_title, filenode.fid AS filenode_fid, filenode.filename AS filenode_filename, filenode.filepath AS filenode_filepath FROM node node LEFT JOIN filenode filenode ON node.nid = filenode.nid LIMIT 0, 10 in D:\projects\drupal\sites\all\modules\views\includes\view.inc on line 765.

Quelqu’un aurait une idée/une piste pour m’aider ?

Merci,
Bonne journée,
Philippe

#

Va plutôt voir du côté de Table Wizard.

Attention à ne pas créer des modules qui existent déjà !

DRUPALONS.FR : lisez-nous et testez notre générateur de code, ou les flux drupaliens.

#

Merci pour votre intervention ! Je vais aller voir du côté de Table wizard.

Sinon pour mon information personnelle : vous avez peut-être une idée de ce qui cloche dans mon code ?

Merci,
Phil-

Syndiquer le contenu