2011-10-25 38 views
12

Tôi đã viết mô-đun để giao diện với Chế độ xem 3 bằng Drupal 7, nhưng khi tôi tạo chế độ xem sử dụng bảng tùy chỉnh làm nguồn dữ liệu, không có dữ liệu nào hiển thị. Dưới đây là sơ đồ của tôi từ MySQL:Drupal 7 - xem tùy chỉnh với bảng tùy chỉnh, không có dữ liệu nào hiển thị

+-------------+------------+------+-----+---------+----------------+ 
| Field  | Type  | Null | Key | Default | Extra   | 
+-------------+------------+------+-----+---------+----------------+ 
| id   | int(11) | NO | PRI | NULL | auto_increment | 
| title  | mediumtext | NO |  | NULL |    | 
| Department | text  | NO |  | NULL |    | 
| credits  | int(10) | NO |  | NULL |    | 
| description | longtext | NO |  | NULL |    | 
+-------------+------------+------+-----+---------+----------------+ 

Và đây là ghi đè móc trong my_module.views.inc:

function my_module_views_data() { 
    $tableName = 'My_Awesome_Table'; 
    $data = array(); 
    $data[$tableName]['table']['group'] = t('Courses'); 

    $data[$tableName]['table']['base'] = array(
    'field' => 'id', 
    'title' => t('Courses'), 
    'help' => t("Contains courses, departments, and descriptions.") 
); 

    $data[$tableName]['title'] = array(
    'title' => t('Course name'), 
    'help' => t('Course name'), 
    '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[$tableName]['Department'] = array(
    'title' => t('Course department'), 
    'help' => t('Course department'), 
    '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[$tableName]['credits'] = array(
    'title' => t('Credits'), 
    'help' => t('Number of credit hours'), 
    'field' => array(
     'handler' => 'views_handler_field', 
     'click sortable' => TRUE, 
    ), 
    'argument' => array('handler' => 'views_handler_argument_numeric'), 
    'filter' => array('handler' => 'views_handler_filter_numeric'), 
    'sort' => array('handler' => 'views_handler_sort_numeric') 
); 

    $data[$tableName]['description'] = array(
    'title' => t('Course description'), 
    'help' => t('Course description'), 
    '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[$tableName]['id'] = array(
    'title' => t('Unique identifier'), 
    'help' => t('Primary key for table'), 
    'field' => array('handler' => 'views_handler_field'), 
    'argument' => array('handler' => 'views_handler_argument_numeric'), 
    'filter' => array('handler' => 'views_handler_filter_numeric'), 
    'sort' => array('handler' => 'views_handler_sort_numeric')); 

    return $data; 
} 

Có một cái gì đó trông sai với bản đồ của tôi? Khi tôi tạo Chế độ xem, tôi đang thử một Danh sách chưa được định dạng đơn giản và chỉ hiển thị từng trường có nhãn. Trường duy nhất hiển thị với dữ liệu là id và tất cả các giá trị id từ bảng của tôi đều có ở đó. Tôi đã thử thêm Bộ lọc vào Chế độ xem để Bộ môn học! = trống và Tên khóa học! = trống, không loại bỏ bất kỳ kết quả nào (dựa trên số id s được hiển thị). Dưới đây là các truy vấn xem được tạo ra:

SELECT My_Awesome_Table.title AS My_Awesome_Table_title, 
    My_Awesome_Table.Department AS My_Awesome_Table_Department, 
    My_Awesome_Table.description AS My_Awesome_Table_description, 
    My_Awesome_Table.credits AS My_Awesome_Table_credits, 
    My_Awesome_Table.id AS id 
FROM {My_Awesome_Table} My_Awesome_Table 
WHERE (((My_Awesome_Table.Department NOT LIKE '' ESCAPE '\\') AND 
    (My_Awesome_Table.title NOT LIKE '' ESCAPE '\\'))) 

Khi tôi chạy này trong phpMyAdmin, chỉ cần loại bỏ các {} từ khắp nơi trên My_Awesome_Table, nó sẽ trả về kết quả và có dữ liệu trong mỗi cột.

Chỉnh sửa: có thể có liên quan để nói rằng tôi đã tạo mô-đun Xem tùy chỉnh khác cho một bảng khác trong cùng cơ sở dữ liệu và hoạt động tốt. Tôi đã sử dụng mô-đun đó như là một cơ sở cho thế này, thay đổi tên mô-đun, tiền tố chức năng, vv

+1

Tôi biết điều này có thể hiển nhiên, nhưng bất cứ khi nào tôi gặp vấn đề như vậy thì thường là do tên 'my_module' bị viết sai. – kylex

+2

Thử hỏi @ http://drupal.stackexchange.com/ – Strae

Trả lời

2

Xóa bộ nhớ đệm, vô hiệu hóa mô-đun 'my_module', tiết kiệm, sau đó kích hoạt nó trở lại, tiết kiệm

Trong phát triển của tôi, Tôi phải thêm móc này để làm cho nó hoạt động

function my_module_views_api() { 
    return array('api'=>2.0); 
} 
+0

Điều này đúng, hook_views_api phải được triển khai để cho biết Chế độ xem bạn muốn chú ý đến mô-đun của mình. –

Các vấn đề liên quan