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

