web-dev-qa-db-fra.com

Comment modifier les paramètres du champ Vues par programme?

Je voudrais modifier certains paramètres de champ dans une vue donnée créée avec Vues par programmation .

Par exemple, je voudrais changer le " Formateur" et " Style d'image "paramètres d'un Champ d'image. Voici à quoi ressemblent les paramètres de ce champ lorsque j'exporte cette vue:

/* 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',
);

Je voudrais changer le "style d'image" du formateur Colorbox comme ceci:

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

et enregistrez cela. Comment dois-je faire ça?

Comme ici:

Views - change Image field settings


MODIFIER 1.

Je devrais peut-être utiliser views_save_view():
http://api.drupal.org/api/views/views.module/function/views_save_view/7

Il enregistre une vue - alors je devrais peut-être interroger la vue entière, la changer et utiliser cette fonction. Mais comment exactement?

MODIFIER 2.

J'ai trouvé dans views/includes/admin.inc Que la vue donnée est enregistrée comme ceci: $form_state['view']->save(); dans views_ui_edit_view_form_submit().

Je sais déjà comment changer le "Style d'image" d'un champ Image dans un mode d'affichage donné par programme (comme sur l'onglet "Gérer l'affichage" après avoir cliqué sur l'engrenage) , mais maintenant je serais heureux si je pouvais faire quelque chose de similaire avec une vue donnée.

7
Sk8erPeter

MIS À JOUR :

Vous pouvez utiliser cet extrait de code pour modifier une vue sans views_alter:

$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);

Modifiez l'ID d'affichage default si vous souhaitez utiliser un affichage autre que celui par défaut.


Si vous avez exporté la vue en code à l'aide de hook_views_default_views() ou du module Fonctionnalités, il existe un crochet pour modifier les vues par programmation:

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

Par exemple:

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

N'oubliez pas d'effacer le cache et de revenir à la vue pour appliquer les modifications.

18
smartinm