2012-01-25 20 views
6

मुझे अपने मॉड्यूल दृश्य एकीकरण के साथ कोई समस्या है। मुझे उस उपयोगकर्ता के बारे में जानकारी प्रदान करने की आवश्यकता है जिसने वीडियो और टाइमस्टैंप जोड़ा है। वीडियो फ़ील्ड एक सीसीके एम्बेडेड मीडिया फ़ील्ड है और यह content_field_3d_party_video तालिका में स्टोर करता है।Drupal विचार एकीकरण hook_views_data

मेरे तालिका स्कीमा:

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

दृश्य 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; 
} 

लेकिन मेरी मेज में शामिल नहीं है में शामिल होने और विचारों में इस तरह के एसक्यूएल उत्पन्न:

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

एक नजर डालें ON **uid** = users_video_data.uid और ON **value** = content_field_3d_party_video_video_data.field_3d_party_video_value

पर

कोई मदद?


मिला समाधान। सही ढंग से एक CCK क्षेत्र के माध्यम से नोड तालिका में शामिल होने के लिए हम node_data_field_3d_party_video left_table के बजाय content_field_3d_party_video उल्लेख करना होगा: हम node_data_field_3d_party_video निर्दिष्ट करना होगा

सही ढंग से एक CCK क्षेत्र के माध्यम से नोड तालिका में शामिल होने के लिए:

$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

(http://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer- [यह पूछें और उत्तर अपने प्रश्न ठीक है] अपने-खुद-प्रश्न /) – Max

उत्तर

0

मैं पोस्ट प्रश्नकर्ता समाधान बजाय left_table 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', 
    ), 
);