2012-01-25 21 views
6

Tôi gặp sự cố với tích hợp chế độ xem mô-đun của mình. Tôi cần cung cấp thông tin về người dùng đã thêm video và dấu thời gian. Trường video là một trường truyền thông nhúng CCK và nó lưu trữ trong bảng content_field_3d_party_video.Xem tích hợp Drupal hook_views_data

schema bảng của tôi:

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; 
} 

Lần 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; 
} 

Nhưng bàn của tôi không được bao gồm trong tham gia và quan điểm tạo ra SQL như:

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 ... 

Hãy xem tại ON **uid** = users_video_data.uidON **value** = content_field_3d_party_video_video_data.field_3d_party_video_value

Bất kỳ trợ giúp nào?


Tìm thấy giải pháp. Để tham gia một cách chính xác bảng nút thông qua một lĩnh vực CCK chúng ta phải xác định node_data_field_3d_party_video như left_table thay vì 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

[OK để hỏi và trả lời câu hỏi của riêng bạn] (http://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer- câu hỏi của riêng bạn /) – Max

Trả lời

0

tôi đăng các giải pháp hỏi:

Để tham gia một cách chính xác bảng nút thông qua một lĩnh vực CCK chúng ta phải xác định node_data_field_3d_party_video dưới dạng left_table thay vì 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', 
    ), 
);