Thêm tùy chọn chế độ xem tùy chỉnh


7

Tôi đang cố gắng thêm một số tùy chọn xem tùy chỉnh. Tôi thậm chí không chắc chắn nếu những gì tôi đang cố gắng làm là có thể.

Về cơ bản tôi muốn đặt một tùy chọn tùy chỉnh trong danh mục Khác .

Nó sẽ trông như:

Tùy chọn tùy chỉnh của tôi : bị vô hiệu hóa

Khi người dùng nhấp vào "bị vô hiệu hóa", nó sẽ hiển thị một biểu mẫu tùy chỉnh nơi người dùng có thể đặt một số cài đặt cho chế độ xem đó.

Tôi đã xem xét điều này, nhưng không thể tìm thấy bất cứ điều gì cho phép tôi thêm các tùy chọn tùy chỉnh ở đây.

nhập mô tả hình ảnh ở đây


Bạn đang có ý định cài đặt gì?
Patrick Kenny

Những tùy chọn nào bạn muốn người dùng được phép chọn?
Jimajamma

1
Thật khó để nghĩ đến một tùy chọn Lượt xem chưa có;)
David Thomas

Tôi đang tạo ra một mô-đun mới. Nói một cách đơn giản, tùy chọn có thể chỉ là giá trị đúng / sai. Người dùng sẽ có thể bật / tắt một tính năng mà tôi đang tạo. Tôi nghĩ rằng tôi sẽ tạo một hook post_execute () để kiểm tra xem giá trị đó có đúng / sai hay không, và sau đó hành động theo giá trị đó.
donutdan4114

Câu trả lời:


1

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');
}

0

ID biểu mẫu của biểu mẫu chỉnh sửa chế độ xem là views_ui_edit_form

function mymodule_form_alter(&$form, $form_state, $form_id) {
  if ($form_id == 'views_ui_edit_form')
  {
        $other = &$form['displays']['settings']['settings_content']['tab_content']['details']['columns']['third']['collapse']['other'];
        $other['custom']['#theme'] = 'views_ui_display_tab_setting';
        $other['custom']['#description'] = 'Custom';
        $other['custom']['#link'] = '<a href="' .  base_path() . '/node/1" title="Get information on how to theme this display" id="views-page-1-custom">Custom</a>';

  }

}

Mục biểu mẫu cho phần KHÁC là

['displays']['settings']['settings_content']['tab_content']['details']['columns']['third']['collapse']['other']

Vì vậy, trong hàm, phần tử biểu mẫu này được đưa vào $otherbiến làm tham chiếu để dễ sử dụng.

Điều này chỉ cần thêm một liên kết đến nút / 1 bạn có thể chỉnh sửa nó để làm những gì bạn muốn. Và ví dụ này không khiến ajax lo ngại, bạn có thể in ra biến $ khác để có ý tưởng về tất cả các chi tiết được đưa ra và cách tất cả hoạt động.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.