web-dev-qa-db-ja.com

プログラムでビューのフィールド設定を変更するにはどうすればよいですか?

特定のビューの一部のフィールド設定を変更したいビュー で作成プログラムで

たとえば、 "Formatter"と "Image style "画像フィールドの設定。このビューをエクスポートすると、このフィールドの設定は次のようになります。

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

Colorboxフォーマッターの「画像スタイル」を次のように変更したいと思います。

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

それを保存します。どうすればよいですか?

ここのように:

Views - change Image field settings


編集1。

多分私はviews_save_view()を使うべきです:
http://api.drupal.org/api/views/views.module/function/views_save_view/7

ビューを保存します。ビュー全体をクエリして変更し、この関数を使用する必要があるかもしれません。しかし、正確には?

編集2。

_views/includes/admin.inc_で、指定されたビューが$form_state['view']->save();views_ui_edit_view_form_submit()のように保存されることがわかりました。

私はすでに知っています ギアをクリックした後の「表示の管理」タブのように)特定のビューモードで画像フィールドの「画像スタイル」をプログラムで変更する方法 、しかし今、私はできれば幸いです指定されたビューで同様のことを行います。

7
Sk8erPeter

[〜#〜]更新[〜#〜]

このコードスニペットを使用して、_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);
_

デフォルト以外のディスプレイを使用する場合は、defaultディスプレイIDを変更します。


hook_views_default_views()またはFeaturesモジュールを使用してビューをコードにエクスポートした場合、ビューをプログラムで変更するフックがあります。

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

例えば:

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

キャッシュをクリアし、ビューを元に戻して変更を適用することを忘れないでください。

18
smartinm