Как да изведем данни от наша таблица, които са свързани с нод

Как да изведем данни от наша таблица, които са свързани с нод (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.

views с полета обвързани с нод от наша таблица
полета с допълнителни данни за нод