2011-10-25 5 views
12

Escribí un módulo para interactuar con Views 3 usando Drupal 7, pero cuando creo una vista usando mi tabla personalizada como fuente de datos, no aparece ningún dato. Aquí está mi esquema a partir de MySQL:Drupal 7 - vista personalizada con tabla personalizada, sin datos que aparecen

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

Y aquí está la anulación de gancho en 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; 
} 

hace algo mal con mi mirada mapeo? Cuando creo una vista, intento una lista sin formato simple y simplemente visualizo cada campo con una etiqueta. El único campo que aparece con los datos es id, y todos los valores id de mi tabla están allí. Intenté agregar un filtro a la vista para que el Departamento del curso! = en blanco y nombre del curso! = en blanco, que no eliminó ningún resultado (basado en los id s que se muestran). He aquí está generando la consulta Vistas:

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 '\\'))) 

Cuando ejecuto esto en phpMyAdmin, sólo la eliminación de la { y } de todo My_Awesome_Table, devuelve los resultados y hay datos en cada columna.

Editar: es quizás relevante decir que hice otro módulo de vista personalizado para una tabla diferente en la misma base de datos, y funciona bien. Usé ese módulo como una base para éste, cambiando el nombre del módulo, los prefijos de función, etc.

+1

sé que esto es probablemente obvio, pero cada vez que tengo un tema como este por lo general es debido a que el nombre de la función 'mi_módulo' está escrito incorrectamente. – kylex

+2

Intente preguntar @ http://drupal.stackexchange.com/ – Strae

Respuesta

2

Borrar caché, bloquear Módulo 'mi_módulo', Guardar, y permitirle a ella, excepto

En mi desarrollo, tengo que añadir este gancho para que sea funciona

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

Esto es correcto, hook_views_api debe implementarse para indicarle a las Vistas que desea que preste atención a su módulo. –

Cuestiones relacionadas