Drupal 7.を使用してプログレスバーを実装する必要があります。これは私が実際に使用しているコードです。
$form[$name][$name.'_enc'] = array(
'#type' => 'submit',
'#value' => t($name.' Enable'),
// '#submit' => array('submit_'.$name.'_enc'),
'#ajax' => array(
'callback' => 'submit_'.$name.'_enc',
'wrapper' => 'ajax-response-goes-here',
'method' => 'replace',
'effect' => 'fade',
'progress' => array (
'type' => 'bar',
'message' => 'convert..',
'url' => 'misc/progress.js',
'interval' => '1500'
)
_['#ajax']['progress']['url']
_として設定した内容が間違っています:これはJavaScriptファイルのURLではなく、進行状況バーがどの程度いっぱいかを判断するために使用するコールバックパスです。メニューコールバックは、操作が完了したか、または10%、20%、50%などで完了したかを示す値を返す必要があります。 progress.js ファイルに含まれているコードを確認してください、値は0から100の間であることが期待されています。
補足として、_['#ajax']['progress']['message']
_で渡される値はt()
に渡される必要があります。
進行状況バーの例:
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Import'),
'#ajax' => array(
'callback' => 'import_submit_callback',
'wrapper' => 'import-form',
'progress' => array(
'type' => 'bar',
'message' => t('Importing..'),
'url' => 'import/progress', //url to fetch current progress percentage
'interval' => '1000' //progress bar will refresh in 1 second
)
),
);
次に、「import/progress」というURLに対して次のようなメニューを作成します。
$items['import/progress'] = array(
'title' => t('Import progress'),
'page callback' => 'import_progress',
'access callback' => TRUE,
'type' => MENU_CALLBACK,
);
次に、このページのコールバック関数で、次のような現在のステータスを示すjsonデータを出力します。
function import_progress() {
$progress = array(
'message' => t('Starting import...'),
'percentage' => -1,
);
$completed_percentage = variable_get('import_status'); // calculate progress percentage here
if($completed_percentage){
$progress['message'] = t('Importing...');
$progress['percentage'] = $completed_percentage ;
}
drupal_json_output($progress);
}
sales/progress
というメニューコールバックを1つ作成しました。ここで私は以下のように1つの関数を呼び出しました
function sales_progress() {
echo '{"percentage":"25","message":"Processing more..."}';
}
ここで、25は静的なパーセント値です。パーセンテージ値とメッセージテキストを希望どおりにカスタマイズできます。
定期的に上記の関数が呼び出されます。そして、プログレスバーの値が更新されます。詳しくは 参考リンク