Wie erstelle ich einen Fortschrittsbalken?


9

Ich muss einen Fortschrittsbalken mit Drupal 7 implementieren. Dies ist der Code, den ich tatsächlich verwende.

$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'
)

Die CSS-Eigenschaft ändert sich normalerweise. Basierend auf der Serverantwort nimmt die Breite weiter zu, bis Sie 100% erreichen
GoodSp33d

2
Haben Sie überlegt, die Batch-API zu verwenden ?
Arosboro

Antworten:


3

Was Sie als ['#ajax']['progress']['url']falsch festlegen, ist nicht die URL für eine JavaScript-Datei, sondern der Rückrufpfad, anhand dessen bestimmt wird, wie voll der Fortschrittsbalken ist. Der Menü-Rückruf sollte einen Wert zurückgeben, der angibt, ob der Vorgang abgeschlossen wurde oder bei 10%, 20%, 50% usw. abgeschlossen ist. Wenn ich mir den Code in der Datei progress.js ansehe, stelle ich fest, dass der Wert erwartet wird zwischen 0 und 100 liegen.

Als Randnotiz sollte der übergebene Wert an ['#ajax']['progress']['message']übergeben werden t().


1

Beispiel für einen Fortschrittsbalken:

$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
        )
    ),
);

Erstellen Sie dann ein Menü wie das folgende für die URL 'Import / Fortschritt':

$items['import/progress'] = array(
    'title' => t('Import progress'),
    'page callback' => 'import_progress',
    'access callback' => TRUE,
    'type' => MENU_CALLBACK,
);

Geben Sie dann JSON-Daten aus, die den aktuellen Status wie diesen in dieser Seitenrückruffunktion anzeigen:

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);
}

0

Ich habe einen Menü-Rückruf namens erstellt sales/progress. Hier habe ich eine Funktion wie unten aufgerufen

function sales_progress() { 
   echo '{"percentage":"25","message":"Processing more..."}'; 
}

Hier ist 25 ein statischer Prozentwert. Sie können den Prozentwert und den Nachrichtentext nach Ihren Wünschen anpassen.

In regelmäßigen Abständen wird die obige Funktion aufgerufen. Der Wert des Fortschrittsbalkens wird aktualisiert. Weitere Details finden Sie unter Link

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.