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:
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?
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.
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.