9.14. Գրելու ինտեգրում Views-ի հետ
Views մոդուլը լայնորեն օգտագործվում է Drupal էկոհամակարգում։ Բովանդակության ցուցակներ, աղյուսակներ, բլոկներ, սլայդշոուներ, տվյալների արտահանում — այս բովանդակությունների տեսքերն, ամենայն հավանականությամբ, ցուցադրվում են Views-ի միջոցով։ Եթե դուք օգտագործում եք Բովանդակության տեսակներ, Բլոկի տեսակներ կամ այլ Էակների տեսակներ, ապա Views-ը արդեն ինտեգրված է դրանց հետ, և դուք կարող եք օգտագործել այն բովանդակության ցուցադրման համար։ Բայց եթե դուք ունեք սեփական մոդուլ, որը ստեղծում է հատուկ տվյալների բազայի աղյուսակ՝ hook_schema()-ի միջոցով, ապա անհրաժեշտ է ձեռքով ինտեգրել այն Views-ի հետ, որպեսզի մոդուլի տվյալները երևան Views ինտերֆեյսում։
Եկեք դիտենք Did this help մոդուլի ինտեգրումը Views-ի հետ՝
https://www.drupal.org/project/did_this_help
Մոդուլը ստեղծում է իր սեփական աղյուսակը՝ տվյալներ պահպանելու համար։ Այս աղյուսակում կան տողեր, ID-ներ, ամսաթվեր, ուստի անհրաժեշտ է սահմանել տարբեր գործիքներ (handlers) Views-ի ինտեգրման համար։
Սկզբում պետք է ստեղծել ֆայլ `MODULENAME.views.inc`, որը ավտոմատ կերպով կբեռնվի և չի պահանջում լրացուցիչ ընդգրկում։ Այդ ֆայլում պետք է կիրառել `hook_views_data()` ֆունկցիան՝
<?php
/**
* @file
* Provide views data for did_this_help.module.
*/
/**
* Implements hook_views_data().
*/
function did_this_help_views_data() {
}
Այս ֆունկցիան պետք է վերադարձնի զանգված, որը նկարագրում է հատուկ աղյուսակի կառուցվածքը։
Սկսում ենք տվյալների աղյուսակի անունով՝
$data['did_this_help'] = [
'table' => [
'group' => t('Did this help?'),
'base' => [
'field' => 'id',
'title' => t('Did this help? entries'),
'help' => t('Contains a list of Did this help? entries.'),
],
],
];
Այս հատվածում նկարագրվում է աղյուսակը՝ $data['did_this_help'] բանալիով։ Եթե ցանկանում եք մի քանի աղյուսակ ինտեգրել, օգտագործեք տարբեր բանալիներ՝ $data['custom_table1'], $data['custom_table2']։
group՝ խմբավորում է դաշտերը նույն բաժնում՝ UI-ում դաշտերի ընտրությունը հեշտացնելու համար։
base՝ հայտարարում է աղյուսակի հիմնական դաշտը, որը կարելի է օգտագործել միացումների (join) համար։
Այնուհետև նկարագրում ենք յուրաքանչյուր դաշտ՝
$data['did_this_help']['id'] = [
'real field' => 'id',
'title' => t('Did this help? record ID'),
'help' => t('Did this help? record.'),
'field' => ['id' => 'standard'],
'sort' => ['id' => 'standard'],
'filter' => ['id' => 'numeric'],
'argument' => ['id' => 'numeric'],
];
real field՝ հայտարարում է տվյալ դաշտին համապատասխանող իրական դաշտի անունը տվյալների բազայում։
title, help՝ դաշտի վերաբերյալ տեղեկատվություն՝ UI-ում ցուցադրելու համար։
field, sort, filter, argument՝ Views մոդուլի գործիքների նույնացուցիչներ՝ դաշտերը ցուցադրելու, ֆիլտրելու և դասավորելու համար։
Դաշտերի (Field) գործիքներ
Օգտագործվում են SQL SELECT արտահայտության համար։
Տեսակների ցանկը՝ views_field_handlers
Օրինակ՝
'field' => ['id' => 'standard']
Դասավորման (Sort) գործիքներ
Օգտագործվում են SQL ORDER BY արտահայտության համար։
Տեսակների ցանկը՝ views_sort_handlers
Ֆիլտրերի (Filter) գործիքներ
Օգտագործվում են SQL WHERE արտահայտության համար։
Տեսակների ցանկը՝ views_filter_handlers
Օրինակ՝ ամսաթվի ֆիլտրման համար՝
$data['did_this_help']['created'] = [
'title' => t('Created date for Did this help? record'),
'help' => t('Created date for Did this help? record'),
'field' => ['id' => 'date'],
'argument' => ['id' => 'date'],
'filter' => ['id' => 'date'],
'sort' => ['id' => 'date'],
];
Relationship գործիք
Օգտագործվում է SQL JOIN արտահայտության միջոցով աղյուսակներ միացնելու համար։ Օրինակ՝ did_this_help աղյուսակը ունի uid դաշտ, որով կարող ենք միանալ users_field_data աղյուսակին՝
$data['did_this_help']['uid'] = [
'title' => t('User ID for Did this help? record'),
'help' => t('User ID for Did this help? record'),
'field' => ['id' => 'standard'],
'sort' => ['id' => 'standard'],
'filter' => ['id' => 'numeric'],
'argument' => ['id' => 'numeric'],
'relationship' => [
'title' => t('User'),
'help' => t('The user on which the log entry as written.'),
'base' => 'users_field_data',
'base field' => 'uid',
'id' => 'standard',
],
];
Այստեղ՝
base - աղյուսակի անուն, որի հետ պետք է միանալ,
base field - դաշտի անուն, որով պետք է միանալ,
title, help - UI-ի համար,
id - handler-ի տեսակ։
Տեսակների ցանկը՝ views_relationship_handlers
Չնայած այն բանին, որ Views-ը տրամադրում է բազմաթիվ գործիքներ՝ field, filter, sort և relationship-ի համար, դուք կարող եք ժառանգել դրանք և գրել ձեր սեփական գործիքները։ Հաջորդ հոդվածում կգրենք սեփական filter handler։