it-swarm.com.de

Wie ändere ich die Feldeinstellungen für Ansichten programmgesteuert?

Ich möchte einige Feldeinstellungen in einer bestimmten Ansicht ändern, die programmgesteuert mit Ansichten erstellt wurde .

Zum Beispiel möchte ich die " Formatierer" und " ändern. Bildstil "Einstellungen eines Bildfeldes. So sehen die Einstellungen dieses Feldes aus, wenn ich diese Ansicht exportiere:

/* Field: Taxonomy term: Natural images */
$handler->display->display_options['fields']['field_gallery_natural_images']['id'] = 'field_gallery_natural_images';
$handler->display->display_options['fields']['field_gallery_natural_images']['table'] = 'field_data_field_gallery_natural_images';
$handler->display->display_options['fields']['field_gallery_natural_images']['field'] = 'field_gallery_natural_images';
$handler->display->display_options['fields']['field_gallery_natural_images']['click_sort_column'] = 'fid';
$handler->display->display_options['fields']['field_gallery_natural_images']['type'] = 'colorbox';
$handler->display->display_options['fields']['field_gallery_natural_images']['settings'] = array(
  'colorbox_node_style' => '',
  'colorbox_image_style' => '',
  'colorbox_gallery' => 'post',
  'colorbox_gallery_custom' => '',
  'colorbox_caption' => 'auto',
  'colorbox_caption_custom' => '',
  'display_empty' => '',
  'custom_text' => '',
  'empty_callback' => 'mymodule_empty_fields_no_data',
);

Ich möchte den "Bildstil" des Colorbox-Formatierers irgendwie so ändern:

$handler->display->display_options['fields']['field_gallery_natural_images']['settings']['colorbox_node_style'] = 'thumbnail';

und speichere das. Wie soll ich das machen

Wie hier:

Views - change Image field settings


BEARBEITEN 1.

Vielleicht sollte ich views_save_view() verwenden:
http://api.drupal.org/api/views/views.module/function/views_save_view/7

Es speichert eine Ansicht - also sollte ich vielleicht die gesamte Ansicht abfragen, diese ändern und diese Funktion verwenden. Aber wie genau?

BEARBEITEN 2.

Ich habe in views/includes/admin.inc Gefunden, dass die angegebene Ansicht folgendermaßen gespeichert wird: $form_state['view']->save(); in views_ui_edit_view_form_submit().

Ich weiß bereits wie man den "Bildstil" eines Bildfeldes in einem bestimmten Ansichtsmodus programmgesteuert ändert (wie auf der Registerkarte "Anzeige verwalten" nach dem Klicken auf das Zahnrad) , aber jetzt würde ich mich freuen, wenn ich könnte Machen Sie etwas Ähnliches mit einer bestimmten Ansicht.

7
Sk8erPeter

AKTUALISIERT :

Mit diesem Code-Snippet können Sie eine Ansicht ohne views_alter Ändern:

$view = views_get_view($view_name, TRUE);
$view->display['default']->display_options['fields']['field_gallery_natural_images']['settings']['colorbox_node_style'] = 'thumbnail';
views_save_view($view);

Ändern Sie die Anzeige-ID default, wenn Sie eine andere als die Standardanzeige verwenden möchten.


Wenn Sie die Ansicht mit hook_views_default_views() oder dem Funktionsmodul in Code exportiert haben, gibt es einen Hook, mit dem Sie die Ansichten programmgesteuert ändern können:

/**
 * Alter default views defined by other modules.
 *
 * This hook is called right before all default views are cached to the
 * database. It takes a keyed array of views by reference.
 *
 * Example usage to add a field to a view:
 * @code
 *   $handler =& $view->display['DISPLAY_ID']->handler;
 *   // Add the user name field to the view.
 *   $handler->display->display_options['fields']['name']['id'] = 'name';
 *   $handler->display->display_options['fields']['name']['table'] = 'users';
 *   $handler->display->display_options['fields']['name']['field'] = 'name';
 *   $handler->display->display_options['fields']['name']['label'] = 'Author';
 *   $handler->display->display_options['fields']['name']['link_to_user'] = 1;
 * @endcode
 */
function hook_views_default_views_alter(&$views) {
  if (isset($views['taxonomy_term'])) {
    $views['taxonomy_term']->display['default']->display_options['title'] = 'Categories';
  }
}

Zum Beispiel:

/**
 * Implements hook_views_default_views_alter()
 */
function MYMODULE_views_default_views_alter(&$views) {
  if (isset($views['VIEW_NAME'])) {
    $views['VIEW_NAME']->display['default']->display_options['fields']['field_gallery_natural_images']['settings']['colorbox_node_style'] = 'thumbnail';
  }
}

Denken Sie daran, den Cache zu leeren und die Ansicht zurückzusetzen, um Änderungen zu übernehmen.

18
smartinm