Làm cách nào để thay đổi cài đặt trường Lượt xem theo chương trình?


7

Tôi muốn thay đổi một số cài đặt trường trong chế độ xem được tạo bằng Chế độ xem theo chương trình .

Ví dụ: tôi muốn thay đổi cài đặt "Trình định dạng " và " Kiểu ảnh " của trường Hình ảnh . Đây là cài đặt của trường này trông như thế nào khi tôi xuất chế độ xem này:

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

Tôi muốn thay đổi "Kiểu ảnh" của trình định dạng Colorbox bằng cách nào đó như sau:

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

và lưu nó Tôi nên làm thế nào?

Giống như ở đây:

Chế độ xem - thay đổi cài đặt trường Hình ảnh


CHỈNH SỬA 1.

Có lẽ tôi nên sử dụng views_save_view():
http://api.drupal.org/api/view/view.module/feft/view_save_view/7

Nó lưu một khung nhìn - vì vậy có lẽ tôi nên truy vấn toàn bộ khung nhìn, thay đổi điều đó và sử dụng chức năng này. Nhưng chính xác thì thế nào?

CHỈNH SỬA 2.

Tôi thấy views/includes/admin.incrằng chế độ xem đã cho sẽ được lưu như thế này: $form_state['view']->save();trong views_ui_edit_view_form_submit().

Tôi đã biết cách thay đổi "Kiểu hình ảnh" của trường Hình ảnh trong chế độ xem đã cho theo lập trình (như trên tab "Quản lý hiển thị" sau khi nhấp vào thiết bị) , nhưng bây giờ tôi sẽ rất vui nếu tôi có thể làm điều gì đó tương tự với chế độ xem đã cho .


hãy thử thay đổi nó trên móc , tôi muốn đề xuất hook_view_pre_build
mojzis

Chỉ cần FYI. Bạn bôi đen thuật ngữ phân loại của bạn trong ảnh; Nhưng đó là trong bãi chứa mã bạn cung cấp.
chrisjlee

@mojzis: cảm ơn, nhưng theo tôi biết, nó chỉ thay đổi hiển thị của chế độ xem đã cho, nhưng thực tế nó không lưu những thay đổi này trong cơ sở dữ liệu. Vì vậy, tôi muốn lưu các thay đổi giống như cách tôi thực hiện thông qua Giao diện người dùng, nhưng theo lập trình.
Sk8erPeter

@chrisjlee: vâng, cảm ơn, tôi biết điều đó, nhưng sau đó tôi nhận ra nó không thực sự quan trọng. :)
Sk8erPeter

Tôi mong đợi một câu trả lời từ @Clive ở đây.
niksmac

Câu trả lời:


18

CẬP NHẬT :

Bạn có thể sử dụng đoạn mã này để thay đổi chế độ xem mà không cần 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);

Thay đổi defaultID hiển thị nếu bạn muốn sử dụng màn hình khác với mặc định.


Nếu bạn đã xuất chế độ xem thành mã bằng cách sử dụng hook_views_default_views()hoặc mô-đun Tính năng, có một móc để thay đổi chế độ xem theo chương trình:

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

Ví dụ:

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

Nhớ xóa bộ nhớ cache và thực hiện hoàn nguyên chế độ xem để áp dụng các thay đổi.


cảm ơn, nhưng hook_views_default_views_alter()chỉ để thay đổi "chế độ xem mặc định được xác định bởi các mô-đun khác" , có nghĩa là chế độ xem được tạo (hoặc thậm chí bị ghi đè?) thông qua Giao diện người dùng (chỉ được lưu vào cơ sở dữ liệu) không thể thay đổi theo cách này trong mã, nhưng bây giờ mục đích của tôi là thay đổi một số chế độ xem cụ thể được tạo qua Giao diện người dùng mà không xuất chúng. :-( Còn ý tưởng nào khác không?
Sk8erPeter

Đối với các trường được hiển thị trên Giao diện người dùng, trong views_ui_edit_form_get_bucket(), các trường đang được thêm và liên kết với admin/structure/views/nojs/config-item/$view->name/$display->id/$type/$id, và có thể được thay đổi, có lẽ tôi nên đi theo cách này và theo dõi cái này ... Tôi đã khởi động nó, nhưng vẫn không tìm thấy Giải pháp thực sự.
Sk8erPeter

@ Sk8erPeter Tôi đã cập nhật câu trả lời bằng một giải pháp thay thế.
smartinm

2
wow, sử dụng views_get_view(), thay đổi cài đặt hiển thị phù hợp và sau đó, lưu chế độ xem với views_save_view()giải pháp thực sự! Cảm ơn bạn rất nhiều, smartinm ! :) Bạn xứng đáng với danh tiếng. :) Tôi cũng nêu lên câu trả lời của bạn cho những nỗ lực của bạn. Tôi đã thử nghiệm nó theo cách này: pastebin.com/ukSy0xqM và nó thực sự hiệu quả.
Sk8erPeter

Tôi rất vui vì tôi đã có thể giúp bạn :)
smartinm
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.