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


7

私は、特定のビューでいくつかのフィールドの設定を変更したいと作成したビュー をプログラム

たとえば、画像フィールドの「フォーマッタ」と「画像スタイル」の設定を変更したいとします。このビューをエクスポートすると、このフィールドの設定は次のようになります。

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

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

ここのように:

ビュー-画像フィールド設定の変更


編集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()

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



参考までに。あなたは写真で分類法の用語を塗りつぶしました。しかし、それはあなたが提供したコードダンプにあります。
chrisjlee

@mojzis:ありがとう、しかし私の知る限りでは、指定されたビューの表示を変更するだけですが、実際にこれらの変更をデータベースに保存しません。したがって、Views UIを使用して行うのと同じ方法で、プログラムで変更を保存したいと思います。
Sk8erPeter

@chrisjlee:はい、ありがとうございます。知っていますが、後でそれが本当に重要ではないことに気付きました。:)
Sk8erPeter

@Cliveからの回答を期待しています。
niksmac

回答:


18

更新

このコードスニペットを使用して、次のコードなしでビューを変更できます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';
  }
}

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


感謝しますが、「他のモジュールによって定義されたデフォルトのビュー」hook_views_default_views_alter()を変更するためのものです。つまり、ビューUI(データベースにのみ保存されます)を介して作成された(またはオーバーライドされた)ビューは、この方法では変更できず、定義されたビューのみです。コードで、今私の目的はそれらをエクスポートせずにビューUIを介して作成されたいくつかの特定のビューを変更することです :-(その他のアイデアはありますか?
Sk8erPeter

ビューUIに表示されるフィールドについてはviews_ui_edit_form_get_bucket()、フィールドがに追加およびリンクされてadmin/structure/views/nojs/config-item/$view->name/$display->id/$type/$idおり、変更できます。おそらく、この方法でこれをトレースする必要があります...開始しましたが、まだ見つかりませんでした実際のソリューション。
Sk8erPeter

@ Sk8erPeter私は別の解決策で答えを更新しました。
smartinm

2
うわー、使用views_get_view()して、適切な表示設定を変更してから、ビューをviews_save_view()本当に解決して保存します!smartinm、ありがとうございました!:)あなたは賞賛に値します。:)私もあなたの努力にあなたの答えを賛成しました。私はこの方法でそれをテストしました:pastebin.com/ukSy0xqM、そしてそれは本当にうまくいきました。
Sk8erPeter

私はあなたを助けることができてうれしいです:)
smartinm
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.