// \sites\all\modules\views_bulk_operations\plugins\operation_types\action.class.php // 147~167行のあたりに、以下のオプション追加関数があります public function adminOptionsForm($dom_id, $field_handler) { $form = parent::adminOptionsForm($dom_id, $field_handler); // 拡張オプション定義関数名を以下のように作成 $settings_form_callback = $this->operationInfo['callback'] . '_views_bulk_operations_form'; if (function_exists($settings_form_callback)) { $settings = $this->getAdminOption('settings', array()); $form['settings'] = array( '#type' => 'fieldset', '#title' => t('Operation settings'), '#collapsible' => TRUE, '#dependency' => array( $dom_id . '-selected' => array(1), ), ); $settings_dom_id = $dom_id . '-settings'; $form['settings'] += $settings_form_callback($settings, $this->entityType, $settings_dom_id); } return $form; }
/** * Implements hook_form_alter(). */ function vbo_redirect_option_form_alter(&$form, &$form_state, $form_id) { // VBOの処理かのチェック if( isset($form_state['id']) && $form_state['id'] === "views_bulk_operations"){ // ここで、画面遷移先の保存処理は少し反則 // vbo_settingsに画面遷移先の追加は難しい(クラス構造体内にあるため) // 環境変数に画面遷移先(uri)を保存 if( isset($form_state['input']['options']['vbo_settings'][vbo_redirect_url]) ){ variable_set( 'vbo_redirect_url', $form_state['input']['options']['vbo_settings'][vbo_redirect_url] ) ; } // 画面遷移先のテキストフィールドを追加 $form['options']['vbo_settings']['vbo_redirect_url'] = array( '#type' => 'textfield', '#title' => t('Page to direct to after completion of batch'), '#description' => t('Redirects to the view when finished the operation'), '#default_value' => variable_get('vbo_redirect_url'), ); } }
/** * Implements hook_views_bulk_operations_form_alter(). */ function vbo_redirect_option_views_bulk_operations_form_alter(&$form, &$form_state, $vbo) { $vbo_redirect_url = trim( variable_get('vbo_redirect_url') ) ; if( isset($vbo_redirect_url) && strlen($vbo_redirect_url) >0 ){ // check if vbo operation skip confirmation $skip_confirmation = false ; foreach( $vbo->options['vbo_operations'] as $key => $operation ){ if( $operation['selected'] && $operation['skip_confirmation'] ){ if( isset($form['select'][$key]) ) { $form['select'][$key]['#submit'][] = 'vbo_redirect_after_operation'; $skip_confirmation = true ; } } } // set redirect method when vbo has confirmation step if( !$skip_confirmation ){ $form['actions']['submit']['#submit'][] = 'vbo_redirect_after_operation' ; } } } // callback function to set redirect url function vbo_redirect_after_operation($form, &$form_state){ $vbo_redirect_url = trim( variable_get('vbo_redirect_url') ) ; $form_state['redirect'] = $vbo_redirect_url; }
添付 | サイズ |
---|---|
vbo_redirect_option.zip (1.19 KB) | 1.19 KB |