2012-01-25 4 views
6

Tengo un problema con la integración de mi módulo de vistas. Necesito proporcionar información sobre el usuario que agregó el video y la marca de tiempo. El campo de video es un campo de medios incrustado CCK y se almacena en la tabla content_field_3d_party_video.Integración de vistas de Drupal hook_views_data

mi esquema de la tabla:

function MODULE_schema() { 
    $schema = array(); 

    $schema['video_data'] = array(
     'description' => t('Users and timestamps for video field'), 
     'fields' => array(
     'value' => array(
      'description' => t('Emfield value'), 
      'type' => 'varchar', 
      'length' => '255', 
      'not null' => TRUE, 
      'default' => '', 
     ), 
     'uid' => array(
      'description' => t('User id'), 
      'type' => 'int', 
      'unsigned' => TRUE, 
      'not null' => TRUE, 
      'default' => 0, 
     ), 
     'timestamp' => array(
      'description' => t('Timestamp'), 
      'type' => 'int', 
      'unsigned' => TRUE, 
      'not null' => TRUE, 
      'default' => 0, 
     ), 
    ), 
     'primary key' => array('value'), 
     'indexes' => array(
     'timestamp' => array('timestamp'), 
     'uid' => array('uid'), 
    ), 
    ); 

    return $schema; 
} 

Vistas: hook_views_data

function MODULE_views_data() { 
    $data = array(); 

    $data['video_data']['table']['group'] = t('Video Data'); 

    $data['video_data']['table']['join'] = array(
     'node' => array(
      'left_table' => 'content_field_3d_party_video', 
      'left_field' => 'field_3d_party_video_value', 
      'field' => 'value', 
     ), 
     'users' => array(
      'left_field' => 'uid', 
      'field' => 'uid', 
     ), 
    ); 

    $data['video_data']['value'] = array(
     'title' => t('Video value'), 
     'relationship' => array(
      'base' => 'content_field_3d_party_video', 
      'base field' => 'field_3d_party_video_value', 
      'field' => 'value', 
      'handler' => 'views_handler_relationship', 
      'label' => t('Video value'), 
     ), 
    ); 

    $data['video_data']['uid'] = array(
     'title' => t('User id'), 
     'relationship' => array(
      'base' => 'users', 
      'base field' => 'uid', 
      'field' => 'uid', 
      'handler' => 'views_handler_relationship', 
      'label' => t('User id'), 
     ), 
    ); 

    $data['video_data']['timestamp'] = array(
     'title' => t('Timestamp field'), 
     'field' => array(
      'handler' => 'views_handler_field_date', 
      'click sortable' => TRUE, 
     ), 
     'sort' => array(
      'handler' => 'views_handler_sort_date', 
     ), 
     'filter' => array(
      'handler' => 'views_handler_filter_date', 
     ), 
    ); 

    return $data; 
} 

Pero mi mesa no está incluido en unirse y vistas generan tales SQL:

SELECT node.nid AS nid, 
    node.title AS node_title, 
    node.language AS node_language, 
    node_data_field_3d_party_video.field_3d_party_video_embed AS node_data_field_3d_party_video_field_3d_party_video_embed, 
    node_data_field_3d_party_video.field_3d_party_video_value AS node_data_field_3d_party_video_field_3d_party_video_value, 
    ... 
    node.type AS node_type, 
    node.vid AS node_vid 
FROM node node 
LEFT JOIN content_field_3d_party_video content_field_3d_party_video_video_data ON value = content_field_3d_party_video_video_data.field_3d_party_video_value 
LEFT JOIN users users_video_data ON uid = users_video_data.uid 
LEFT JOIN content_field_3d_party_video node_data_field_3d_party_video ON node.vid = node_data_field_3d_party_video.vid 
WHERE ... 

Tome una mirada en ON **uid** = users_video_data.uid y ON **value** = content_field_3d_party_video_video_data.field_3d_party_video_value

¿Alguna ayuda?


Solución encontrada. Para unir correctamente tabla de nodos a través de un campo CCK debemos especificar node_data_field_3d_party_video como left_table en lugar de content_field_3d_party_video:

$data['video_data']['table']['join'] = array(
    'node' => array(
     'left_table' => 'node_data_field_3d_party_video', 
     'left_field' => 'field_3d_party_video_value', 
     'field' => 'value', 
    ), 
    'users' => array(
     'left table' => 'users', 
     'left_field' => 'uid', 
     'field' => 'uid', 
    ), 
); 
+3

[está bien para preguntar y responder sus propias preguntas] (http://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer- tus-propias-preguntas /) – Max

Respuesta

0

he puesto la solución que pregunta:

Para unir correctamente tabla de nodos a través de un campo CCK debemos especificar node_data_field_3d_party_video como left_table en lugar de content_field_3d_party_video:

$data['video_data']['table']['join'] = array(
    'node' => array(
     'left_table' => 'node_data_field_3d_party_video', 
     'left_field' => 'field_3d_party_video_value', 
     'field' => 'value', 
    ), 
    'users' => array(
     'left table' => 'users', 
     'left_field' => 'uid', 
     'field' => 'uid', 
    ), 
);