Batch API - Làm sao để lặp không giới hạn ?

Events happening in the community are now at Drupal community events on www.drupal.org.
jcisio's picture

Hi,

Drupal 6 có Batch API khá thuận tiện. Nhưng nó chỉ cho phép tạo một danh sách các hàm để lần lượt thực hiện. Dù có thể gọi cùng một hàm thực hiện 1, 2, 3 lần nhưng làm cách nào để gọi nó n lần (n không biết trước khi chạy). Có ai biết làm không ?

Một ứng dụng cụ thể là cái converter. Làm sao để mỗi lần convert xong 100 mục nó sẽ tự load lại và tiếp tục để tránh timeout ?

Thanks.

Comments

TH chưa hiểu cách lưu

thehong's picture
  1. TH chưa hiểu cách lưu biến $batch của hệ thống ntn, nếu hiểu được, có thể hack biến đó từ hook_init ().
  2. Theo thí dụ này thì người thảo chương (coder) có thể xác định một URL để người dùng được chuyển đến sau khi batch proccess được thực hiện xong. Như vậy có thể áp dụng cách tiếp cận này:
    • Mỗi lần một batch proccess được thực thi, lưu vào một biến (session/database) tình trạng của batch
    • Khi trạng hoàn thành được gọi đến && biến lưu tình trạng != null => thực hiện lại batch từ đầu, dựa vào biến tình trạng để bạtch đi tiếp tục hoặc lặp lại thao tác...

    Không cần lặp vô tận.

Thế Hồng

Điểm hay của Batch API

jcisio's picture

Điểm hay của Batch API là nó có thanh báo trạng thái và nó dùng AJAX để refresh. Nếu tiếp cận cách dùng _finished thì nó hết là batch mất, vì mình hoàn toàn có thể dùng $_SESSION để lưu dữ liệu.

Thông tin công nghệ : Tin tức CNTT, điện tử, viễn thông...

Cái hay hơn của nó

thehong's picture

Cái hay hơn của nó nữa là: browser không support JS, nó vẫn chạy ngon lành.
Theo dõi một chút về quá trình phát triển của Batch API: http://cvs.drupal.org/viewvc.py/drupal/drupal/includes/form.inc?view=log

Thế Hồng

Không có thời gian

jcisio's picture

Không có thời gian đọc CVS commit log, nhưng chắc đó là Form API ?

Batch dùng cho progressive task hay hơn multistep form ở chỗ có thanh chỉ thị. Các ứng dụng kiểu này ít khi dùng (dù dùng ở nhiều site), nên có yêu cầu JS cũng bình thường. Hiện tại có một giải pháp thế này, làm kiểu http://api.drupal.org/api/function/batch_example_batch_2/6 trước khi làm ước lượng trước số step rồi dùng for để add vào mảng $operations.

Đang nghiên cứu để hoàn thiện joomla2drupal. Chứ chạy ở laptop mình mất vài giây nhưng đem lên host mất 5 phút chưa xong. Một phần cũng tại db không đặt ở localhost, dù vẫn trong LAN.

Thông tin công nghệ : Tin tức CNTT, điện tử, viễn thông...

Batch API mình chưa dùng bao

chubinlazy's picture

Batch API mình chưa dùng bao giờ, nó có điểm hay gì nữa ko vậy