Как да изведем данни от наша таблица, които са свързани с нод (sms_node)
Следващият код е от модула sms_node. По същество този модул променя status и promoted на нодове, които по подразбиране са непубликувани, като статус служи за публикуване на непубликуван нод, а промотиран за VIP (или по-подробно - датите на които изтича съответния статус след които този статус се отнема). Модула записва датите за публикуван и промотиран в своя таблица, както и за кой нод се отнася това. Структурата на таблицата е следната:
$schema['sms_node_expire'] = array( 'description' => 'Length in days to assign each role by default.', 'fields' => array( 'nid' => array( 'type' => 'int', 'description' => 'The role_id.', ), 'expiry_timestamp' => array( 'type' => 'int', 'not null' => TRUE, 'default' => 0, 'description' => 'post Publish expiration time.', ), 'expiry_vip_timestamp' => array( 'type' => 'int', 'not null' => TRUE, 'default' => 0, 'description' => 'post Promote/VIP expiration time.', ), 'status' => array( 'type' => 'int', 'default' => 0, 'description' => 'status Publish', ), 'promote' => array( 'type' => 'int', 'default' => 0, 'description' => 'status Promote', ), ), 'primary key' => array('nid'), );
По същия начин като в предния пост в .module добавяме
/** * Implements hook_views_api(). (). */ function sms_node_views_api() { return array( 'api' => 2, 'path' => drupal_get_path('module', 'sms_node'), ); }
в отделен файл с име sms_node.views.inc в папката на модула е следния код, който прави видими за views полетата на нашата таблица в подходящата зависимост:
function sms_node_views_data() { $data['sms_node_expire'] = array( 'table' => array( 'group' => 'SMS Node', 'title' => 'SMS node expire', 'join' => array( 'node' => array( 'left_field' => 'nid', 'field' => 'nid', ), ), ), 'expiry_timestamp' => array( 'title' => t('sms publish expire'), 'help' => t('A date-time of node Publish expiration.'), 'field' => array( 'handler' => 'views_handler_field_date', 'click sortable' => TRUE, ), 'sort' => array( 'handler' => 'views_handler_sort_date', ), 'filter' => array( 'handler' => 'views_handler_filter_date', ), ), 'expiry_vip_timestamp' => array( 'title' => t('sms VIP expire'), 'help' => t('A date-time of node VIP expiration.'), '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; }
Ключовият елемент тук е дефиницията на таблицата и нейните зависимости с таблицата node по nid
'table' => array( 'group' => 'SMS Node', 'title' => 'SMS node expire', 'join' => array( 'node' => array( 'left_field' => 'nid', 'field' => 'nid', ), ), ),
Така когато съдадем views за node двете допълнителни полета от нашата таблица са налични като fields, във филтри и сортиране.
Този код е за drupal 6 views 2, но тези неща работят по еднакъв начин за drupal 6 и drupal 7.

