[Drupal] 用 Views 的 overridden display 覆蓋 master display

雖然 Views 的 master (default) 和 override display 的設計很方便,而且有提供可以 revert override to default 的功能,但有時候是想保留 override display 並覆蓋掉 default display,這時候就尷尬了,因為 Views 沒有提供這麼方便的功能。

在 copy view (overridden) display to master (default) 討論串找到一個很方便的解法,基本用法是透過 Devel 模組的執行 PHP 功能,直接參考下列程式碼並替換掉「machine_name_of_my_view」與「machine_name_of_the_overridden_display」這兩個參數成真正的 views & display machine name 即可。

$view = views_get_view('machine_name_of_my_view');
$source_display = 'machine_name_of_the_overridden_display';
dpm($view, 'view');

foreach (array_keys($view->display[$source_display]->display_options['defaults']) as $key) {
  if (!empty($view->display[$source_display]->display_options[$key])) {
    $view->display['default']->display_options[$key] = $view->display[$source_display]->display_options[$key];
  }
  unset($view->display[$source_display]->display_options[$key]);
}
unset($view->display[$source_display]->display_options['defaults']);
dpm($view, 'new view');

// Uncomment and run once you are sure to save the changes.
//$view->save();

上述程式碼跑完後,如果沒有什麼錯誤訊息,就把最後一行的註解取消掉,再跑一次才會真正執行該段程式碼。 

Categories: 

Add new comment

CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions.