Làm cách nào để tạo thanh tiến trình?


9

Tôi cần triển khai một thanh tiến trình bằng Drupal 7. Đây là mã tôi đang thực sự sử dụng.

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

Nó thường thay đổi thuộc tính CSS. Dựa trên phản hồi của máy chủ, hãy tiếp tục tăng chiều rộng cho đến khi bạn đạt 100%
GoodSp33d

2
Bạn đã cân nhắc sử dụng API hàng loạt chưa?
Arosboro

Câu trả lời:


3

Những gì bạn đặt ['#ajax']['progress']['url']là sai: Đây không phải là URL cho tệp JavaScript, nhưng đó là đường dẫn gọi lại để sử dụng để xác định mức độ đầy đủ của thanh tiến trình. Gọi lại trình đơn sẽ trả về một giá trị cho biết nếu thao tác đã được hoàn thành hoặc nó được hoàn thành ở mức 10%, 20%, 50%, v.v. Nhìn vào mã có trong tệp Progress.js , tôi nhận thấy giá trị được mong đợi trong khoảng từ 0 đến 100.

Như lưu ý phụ, giá trị được truyền vào ['#ajax']['progress']['message']phải được chuyển đến t().


1

Ví dụ về thanh tiến trình:

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

Sau đó tạo menu như thế này cho url 'nhập / tiến':

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

Sau đó xuất dữ liệu json cho biết trạng thái hiện tại như thế này trong chức năng gọi lại trang đó:

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

Tôi đã tạo một menu gọi lại gọi sales/progress. Ở đây tôi đã gọi một chức năng như dưới đây

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

Ở đây 25 là một giá trị phần trăm tĩnh. Bạn có thể tùy chỉnh giá trị phần trăm và văn bản tin nhắn theo ý muốn của bạn.

Định kỳ các chức năng trên sẽ được gọi. Và giá trị thanh tiến trình sẽ được cập nhật. Để biết thêm chi tiết liên kết tham khảo

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.