Fügen Sie benutzerdefinierte Ansichtsoptionen hinzu


7

Ich versuche, einige benutzerdefinierte Ansichtsoptionen hinzuzufügen. Ich bin mir nicht mal sicher, ob das, was ich versuche, möglich ist.

Grundsätzlich möchte ich eine benutzerdefinierte Option in die Kategorie Andere einfügen.

Es würde so aussehen:

Meine benutzerdefinierten Optionen : deaktiviert

Wenn der Benutzer auf "deaktiviert" klickt, sollte ein benutzerdefiniertes Formular angezeigt werden, in dem der Benutzer einige Einstellungen für diese Ansicht vornehmen kann.

Ich habe dies untersucht, konnte jedoch nichts finden, mit dem ich hier benutzerdefinierte Optionen hinzufügen könnte.

Geben Sie hier die Bildbeschreibung ein


Welche Einstellungen möchten Sie hinzufügen?
Patrick Kenny

Welche Optionen soll der Benutzer auswählen dürfen?
Jimajamma

1
Es ist schwer, sich eine Ansichtsoption vorzustellen, die noch nicht vorhanden ist;)
David Thomas

Ich erstelle ein neues Modul. In einfachen Worten könnte die Option nur ein wahr / falsch-Wert sein. Der Benutzer kann eine von mir erstellte Funktion aktivieren / deaktivieren. Ich werde einen post_execute () - Hook erstellen, um zu überprüfen, ob der Wert wahr / falsch ist, und dann auf diesen Wert reagieren.
Donutdan4114

Antworten:


1

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

0

Die Formular-ID des Ansichtsbearbeitungsformulars lautet 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>';

  }

}

Das Formularelement für den Abschnitt SONSTIGES lautet

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

In der Funktion wird dieses Formularelement $otherzur Vereinfachung der Verwendung als Referenz in die Variable übernommen .

Dieser fügt einfach einen Link zum Knoten / 1 hinzu, den Sie bearbeiten können, um das zu tun, was Sie wollen. Und das Beispiel berücksichtigt Ajax nicht. Sie können die Variable $ other ausdrucken, um eine Vorstellung davon zu bekommen, was alle Details sind und wie alles funktioniert.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.