カスタムビューオプションをいくつか追加しようとしています。私がやろうとしていることが可能かどうかさえわかりません。
基本的に、カスタムオプションを[ その他]カテゴリに配置します。
それは次のようになります:
私のカスタムオプション:無効
ユーザーが「無効」をクリックすると、ユーザーがそのビューのいくつかの設定を行うことができるカスタムフォームが表示されます。
私はこれを調べましたが、ここでカスタムオプションを追加できるものを見つけることができませんでした。
カスタムビューオプションをいくつか追加しようとしています。私がやろうとしていることが可能かどうかさえわかりません。
基本的に、カスタムオプションを[ その他]カテゴリに配置します。
それは次のようになります:
私のカスタムオプション:無効
ユーザーが「無効」をクリックすると、ユーザーがそのビューのいくつかの設定を行うことができるカスタムフォームが表示されます。
私はこれを調べましたが、ここでカスタムオプションを追加できるものを見つけることができませんでした。
回答:
実際に探しているのは、カスタムの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');
}
ビュー編集フォームのフォーム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変数を出力して、すべての詳細が何であり、どのように機能するかを把握できます。