カスタムビューオプションを追加する


7

カスタムビューオプションをいくつか追加しようとしています。私がやろうとしていることが可能かどうかさえわかりません。

基本的に、カスタムオプションを[ その他]カテゴリに配置します。

それは次のようになります:

私のカスタムオプション無効

ユーザーが「無効」をクリックすると、ユーザーがそのビューのいくつかの設定を行うことができるカスタムフォームが表示されます。

私はこれを調べましたが、ここでカスタムオプションを追加できるものを見つけることができませんでした。

ここに画像の説明を入力してください


追加する設定は何ですか?
Patrick Kenny

ユーザーに選択を許可するオプションは何ですか?
Jimajamma 2013年

1
まだ存在しないビューオプションを考えるのは難しい;)
デビッドトーマス

新しいモジュールを作成しています。簡単に言えば、このオプションは真/偽の値にすぎません。ユーザーは私が作成している機能を有効/無効にすることができます。私はpost_execute()フックを作成して、値がtrue / falseかどうかを確認してから、その値に基づいて動作します。
donutdan4114 2013

回答:


1

実際に探しているのは、カスタムのViews Display Extenderプラグインを実装することです(https://api.drupal.org/api/views/views.api.php/group/views_plugins/7.x-3.x) 。

それは特に些細なことではなく、私はここのこの素晴らしいチュートリアルから私の情報のほとんどを得ました:Bryan OllendykeによるViews Plugin Display Extender(D7)を書く方法

基本的な概要は次のとおりです。

-カスタムモジュールを作成し(mymoduleとしましょう)、hook_views_api()を実装します。

/**
 * Implements hook_views_api().
 */
function mymodule_views_api() {
  return array(
    'api' => 3,
    'path' => drupal_get_path('module', 'mymodule'),
  );
}

-mymodule.views.incファイルを作成し(このファイルをmymodule.infoファイルに追加することを忘れないでください)、hook_views_plugins()を実装します。次のようになります。

/**
* 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;
}

-上記の配列の「ハンドラ」インデックスに注意してください。これをmymodule_views_plugin_display_extender.incというファイルに実装する必要があります(これもmymodule.infoファイルに追加することを忘れないでください)。実装は次のようになります。

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

}

結局、mymodule.infoファイルは次のようになります。

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

それがすべてうまくいくと、「その他」の下に設定が表示されます(mymodule_views_plugin_display_extender.incのoptions_summary実装の「カテゴリ」を使用して設定を変更できます。

その後、モジュールで、次のようなものを使用してビューからオプションにアクセスできます。

$view->display_handler->get_option('my_setting');

たとえば、 ` hook_views_post_execute()を実装していた場合。

/**
 * Implements hook_views_post_execute().
 */
function mymodule_views_post_execute(&$view) {
  $my_setting = $view->display_handler->get_option('my_setting');
}

0

ビュー編集フォームのフォームIDは 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>';

  }

}

OTHERセクションのフォーム項目は

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

したがって、関数では、このフォーム要素は$other、使いやすさのために参照として変数に取り込まれます。

これは単にnode / 1にリンクを追加するだけで、それを編集して必要な操作を実行できます。また、この例ではajaxは考慮されていません。$ other変数を出力して、すべての詳細が何であり、どのように機能するかを把握できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.