Những gì bạn thực sự muốn làm là triển khai plugin Trình mở rộng hiển thị tùy chỉnh ( https://api.drupal.org/api/view/view.api.php/group/view_plugins/7.x-3.x ) .
Nó không đặc biệt tầm thường và tôi đã nhận được hầu hết thông tin của mình từ hướng dẫn tuyệt vời này tại đây: Cách viết Trình xem hiển thị Plugin mở rộng (D7) của Bryan Ollendyke
Đây là một phác thảo cơ bản:
-Tạo một mô-đun tùy chỉnh (hãy gọi nó là mô-đun) và triển khai hook_view_api () .
/**
* Implements hook_views_api().
*/
function mymodule_views_api() {
return array(
'api' => 3,
'path' => drupal_get_path('module', 'mymodule'),
);
}
-Tạo tệp mymodule.view.inc (nhớ thêm tệp vào tệp mymodule.info của bạn) và triển khai hook_view_plugins () . Nó sẽ trông giống như thế này:
/**
* Implements hook_views_plugins().
*/
function mymodule_views_plugins() {
$path = drupal_get_path('module', 'my_module');
$plugins = array();
$plugins['display_extender'] = array(
'mymodule' => array(
'title' => t('Some Setting'),
'help' => t('A description of the setting.'),
'path' => $path,
'handler' => 'mymodule_views_plugin_display_extender',
),
);
return $plugins;
}
-Lưu ý chỉ số "xử lý" trong mảng trên. Bạn sẽ cần phải thực hiện điều đó trong một tệp có tên mymodule_view_plugin_display_extender.inc (một lần nữa, hãy nhớ thêm nó vào tệp mymodule.info của bạn). Việc thực hiện sẽ trông giống như thế này:
class mymodule_views_plugin_display_extender extends views_plugin_display_extender {
/**
* Provide a form to edit options for this plugin.
*/
function options_definition_alter(&$options) {
$options['my_setting'] = array(
'default' => 0,
);
}
/**
* Provide a form to edit options for this plugin.
*/
function options_form(&$form, &$form_state) {
parent::options_form($form, $form_state);
if ($form_state['section'] === 'mymodule') {
$form['my_setting'] = array(
'#type' => 'checkbox',
'#title' => t('Some Setting'),
'#description' => t('A sample checkbox.'),
'#default_value' => $this->display->get_option('my_setting'),
);
}
}
/**
* Handle any special handling on the validate form.
*/
function options_submit(&$form, &$form_state) {
$this->display->set_option('my_setting', $form_state['values']['my_setting']);
}
/**
* Provide the default summary for options in the views UI.
*
* This output is returned as an array.
*/
function options_summary(&$categories, &$options) {
$options['mymodule'] = array(
'category' => 'other',
'title' => t('Some Setting'),
'value' => ($this->display->get_option('my_setting')) ? 'Yes' : 'No',
'desc' => t('Set a setting.'),
);
}
}
Sau tất cả, tập tin mymodule.info của bạn sẽ trông giống như thế này:
name = My Module
description = Sample views display extender
core = 7.x
version = 7.x-1.0
dependencies[] = views
files[] = mymodule.views.inc
files[] = mymodule_views_plugin_display_extender.inc
Nếu tất cả đều ổn, bạn sẽ thấy một cài đặt hiển thị bên dưới "Khác" (bạn có thể thay đổi bằng cách sử dụng 'thể loại' trong triển khai tùy chọn_summary trong mymodule_view_plugin_display_extender.inc.
Sau đó, trong mô-đun của bạn, bạn có thể truy cập tùy chọn từ chế độ xem bằng cách sử dụng một cái gì đó như:
$view->display_handler->get_option('my_setting');
Chẳng hạn, nếu bạn đang triển khai ` hook_view_post_execute () .
/**
* Implements hook_views_post_execute().
*/
function mymodule_views_post_execute(&$view) {
$my_setting = $view->display_handler->get_option('my_setting');
}