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

Сигурно има много сценарии, при които да имплементираме наши идеи с views. Тук ще разгледам:

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

Как да изведем данни от наша независима таблица - например когато събираме собствени статистически данни

Като си напишем собствен модул (в конкретния случай той се казваt fv_stats и всички следващи hooks в кода са конкретизирани за него), който събира данни от потребителите на сайта ни и ги пише в собствена таблица, е редно да може някъде да можем да разгледаме тези данни. Възможно е да го направим, като създаваме собствени отчети за всяко изискване индивидуално. А може да позволим на views да "вижда" нашата таблица и полета и с него да направим гъвкава отчетна страница с няколко клика.

Ако нашата таблица е

function fv_stats_schema() {
  $schema = array();
 
  $schema['fv_stats'] = array(
    'description' => 'Collect user data',
    'fields' => array(
      'id' => array(
        'description' => 'The id.',
        'type' => 'serial',
        'size' => 'small',
        'unsigned' => TRUE,
        'not null' => TRUE,
      ),
      'sess_id' => array(
        'description' => 'sess_id.',
        'type' => 'varchar',
        'length' => 50,
      ),
      'ip' => array(
        'description' => 'Visitor ip.',
        'type' => 'varchar',
        'length' => 20,
      ),
      'time' => array(
        'description' => 'time',
        'type' => 'varchar',
        'length' => 20,
      ),
      'email' => array(
        'description' => 'Visitor email.',
        'type' => 'varchar',
        'length' => 40,
      ),
      'city' => array(
        'description' => 'Visitor city.',
        'type' => 'varchar',
        'length' => 30,
      ),
      'nationality' => array(
        'description' => 'Visitor nationality.',
        'type' => 'varchar',
        'length' => 30,
      ),
      'browser' => array(
        'description' => 'Visitor browser.',
        'type' => 'varchar',
        'length' => 30,
      ),
      'platform' => array(
        'description' => 'Visitor platform.',
        'type' => 'varchar',
        'length' => 30,
      ),
      'useragent' => array(
        'description' => 'Useragent platform.',
        'type' => 'varchar',
        'length' => 300,
      ),
    ),
    'primary key' => array('id'),
  );
  return $schema;
}

възможно ли да направи views с нейните полета, включително за сортиране и филтри?

Правилно, възможно е :).

достатъчно е в .module файла да включим

function fv_stats_views_api() {
  return array(
    'api' => 3,
    'path' => drupal_get_path('module', 'fv_stats'),
  );
}

и да създадем файл с име fv_stats.views.inc в папката на нашият модул със следния код:

function fv_stats_views_data() {
  $data['fv_stats']['table']['group'] = t('First visit');
  $data['fv_stats']['table']['base'] = array(
    'field' => 'id',
    'title' => t('First visit data'),
    'help' => t('Stores user first visit user input information.'),
    'weight' => 10,
  );
 
  $data['fv_stats']['id'] = array(
    'title' => t('ID'),
    'help' => t('ID of the custom table.'),
    'field' => array(
      'handler' => 'views_handler_field',
      'click sortable' => TRUE,
    ),
    'filter' => array(
      'handler' => 'views_handler_filter_string',
    ),
    'argument' => array(
      'handler' => 'views_handler_argument_string',
    ),
    'sort' => array(
      'handler' => 'views_handler_sort',
    ),
  );
  $data['fv_stats']['ip'] = array(
    'title' => t('IP'),
    'help' => t('IP of the custom table.'),
    'field' => array(
      'handler' => 'views_handler_field',
      'click sortable' => TRUE,
    ),
    'filter' => array(
      'handler' => 'views_handler_filter_string',
    ),
    'argument' => array(
      'handler' => 'views_handler_argument_string',
    ),
    'sort' => array(
      'handler' => 'views_handler_sort',
    ),
  );
  $data['fv_stats']['sess_id'] = array(
    'title' => t('sess_ID'),
    'help' => t('Sess_ID of the custom table.'),
    'field' => array(
      'handler' => 'views_handler_field',
      'click sortable' => TRUE,
    ),
    'filter' => array(
      'handler' => 'views_handler_filter_string',
    ),
    'argument' => array(
      'handler' => 'views_handler_argument_string',
    ),
    'sort' => array(
      'handler' => 'views_handler_sort',
    ),
  );
  $data['fv_stats']['email'] = array(
    'title' => t('E-mail'),
    'help' => t('Email of the custom table.'),
    'field' => array(
      'handler' => 'views_handler_field',
      'click sortable' => TRUE,
    ),
    'filter' => array(
      'handler' => 'views_handler_filter_string',
    ),
    'argument' => array(
      'handler' => 'views_handler_argument_string',
    ),
    'sort' => array(
      'handler' => 'views_handler_sort',
    ),
  );
  $data['fv_stats']['city'] = array(
    'title' => t('City'),
    'help' => t('City of the custom table.'),
    'field' => array(
      'handler' => 'views_handler_field',
      'click sortable' => TRUE,
    ),
    'filter' => array(
      'handler' => 'views_handler_filter_string',
    ),
    'argument' => array(
      'handler' => 'views_handler_argument_string',
    ),
    'sort' => array(
      'handler' => 'views_handler_sort',
    ),
  );
  $data['fv_stats']['nationality'] = array(
    'title' => t('Nationality'),
    'help' => t('Nationality of the custom table.'),
    'field' => array(
      'handler' => 'views_handler_field',
      'click sortable' => TRUE,
    ),
    'filter' => array(
      'handler' => 'views_handler_filter_string',
    ),
    'argument' => array(
      'handler' => 'views_handler_argument_string',
    ),
    'sort' => array(
      'handler' => 'views_handler_sort',
    ),
  );
  $data['fv_stats']['browser'] = array(
    'title' => t('Browser'),
    'help' => t('Browser of the custom table.'),
    'field' => array(
      'handler' => 'views_handler_field',
      'click sortable' => TRUE,
    ),
    'filter' => array(
      'handler' => 'views_handler_filter_string',
    ),
    'argument' => array(
      'handler' => 'views_handler_argument_string',
    ),
    'sort' => array(
      'handler' => 'views_handler_sort',
    ),
  );
  $data['fv_stats']['platform'] = array(
    'title' => t('Platform'),
    'help' => t('Platform of the custom table.'),
    'field' => array(
      'handler' => 'views_handler_field',
      'click sortable' => TRUE,
    ),
    'filter' => array(
      'handler' => 'views_handler_filter_string',
    ),
    'argument' => array(
      'handler' => 'views_handler_argument_string',
    ),
    'sort' => array(
      'handler' => 'views_handler_sort',
    ),
  );
  $data['fv_stats']['useragent'] = array(
    'title' => t('Useragent'),
    'help' => t('Useragent of the custom table.'),
    'field' => array(
      'handler' => 'views_handler_field',
      'click sortable' => TRUE,
    ),
    'filter' => array(
      'handler' => 'views_handler_filter_string',
    ),
    'argument' => array(
      'handler' => 'views_handler_argument_string',
    ),
    'sort' => array(
      'handler' => 'views_handler_sort',
    ),
  );
 
  $data['fv_stats']['time'] = array(
    'title' => t('Date first visit'),
    'help' => t('Date first visit.'),
    '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;
}

Това е. Вече имаме налични всички полета на нашата таблица във views. Когато създаваме нов views, имаме допълнителен тип "First visit data".

Следва:

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