J'ai besoin d'implémenter une barre de progression en utilisant Drupal 7. C'est le code que j'utilise actuellement.
$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'
)
Ce que vous définissez comme ['#ajax']['progress']['url']
Est faux: ce n'est pas l'URL d'un fichier JavaScript, mais c'est le chemin de rappel à utiliser pour déterminer le niveau de remplissage de la barre de progression. Le rappel de menu doit renvoyer une valeur qui indique si l'opération est terminée, ou si elle est terminée à 10%, 20%, 50%, etc. En regardant le code contenu dans le fichier progress.js , Je remarque que la valeur devrait être comprise entre 0 et 100.
En remarque, la valeur passée dans ['#ajax']['progress']['message']
Doit être passée à t()
.
Exemple de barre de progression:
$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
)
),
);
Ensuite, créez un menu comme celui-ci pour l'url 'import/progress':
$items['import/progress'] = array(
'title' => t('Import progress'),
'page callback' => 'import_progress',
'access callback' => TRUE,
'type' => MENU_CALLBACK,
);
Ensuite, sortez les données json indiquant l'état actuel comme celui-ci dans cette fonction de rappel de page:
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);
}
J'ai créé un rappel de menu appelé sales/progress
. Ici, j'ai appelé une fonction comme ci-dessous
function sales_progress() {
echo '{"percentage":"25","message":"Processing more..."}';
}
Ici, 25 est une valeur de pourcentage statique. Vous pouvez personnaliser la valeur du pourcentage et le texte du message selon vos souhaits.
Périodiquement, la fonction ci-dessus sera appelée. Et la valeur de la barre de progression sera mise à jour. Pour plus de détails lien de référence