Was Sie tatsächlich tun möchten, ist die Implementierung eines benutzerdefinierten Views Display Extender-Plugins ( https://api.drupal.org/api/views/views.api.php/group/views_plugins/7.x-3.x ). .
Es ist nicht besonders trivial und ich habe die meisten meiner Informationen aus diesem wunderbaren Tutorial hier erhalten: Wie schreibe ich einen Views Plugin Display Extender (D7) von Bryan Ollendyke
Hier ist eine grundlegende Übersicht:
-Erstelle ein benutzerdefiniertes Modul (nennen wir es mymodule) und implementiere hook_views_api () .
/**
* Implements hook_views_api().
*/
function mymodule_views_api() {
return array(
'api' => 3,
'path' => drupal_get_path('module', 'mymodule'),
);
}
-Erstellen Sie eine Datei mymodule.views.inc (denken Sie daran, die Datei zu Ihrer Datei mymodule.info hinzuzufügen) und implementieren Sie hook_views_plugins () . Es sollte ungefähr so aussehen:
/**
* 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;
}
-Notieren Sie den "Handler" -Index im obigen Array. Sie müssen dies in einer Datei mit dem Namen mymodule_views_plugin_display_extender.inc implementieren (denken Sie auch hier daran, dies in Ihre Datei mymodule.info aufzunehmen). Die Implementierung sollte ungefähr so aussehen:
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.'),
);
}
}
Nach all dem sollte Ihre mymodule.info-Datei ungefähr so aussehen:
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
Wenn das alles klappt, sollte unter "Andere" eine Einstellung angezeigt werden (Sie können diese mithilfe der Kategorie in der Implementierung von options_summary in mymodule_views_plugin_display_extender.inc ändern.
Danach können Sie in Ihrem Modul über die Ansicht auf die Option zugreifen, indem Sie Folgendes verwenden:
$view->display_handler->get_option('my_setting');
Zum Beispiel, wenn Sie ` hook_views_post_execute () implementieren .
/**
* Implements hook_views_post_execute().
*/
function mymodule_views_post_execute(&$view) {
$my_setting = $view->display_handler->get_option('my_setting');
}