2011-05-19 47 views
0

我不知道如何去做這件事。CakePHP,AJAX - 顯示在後臺運行的方法的進度

我有一個小型圖庫腳本的管理面板。您創建圖庫,然後通過FTP上傳圖像(到指定的文件夾,每個圖庫有100張圖像,使用FTP更容易)。

在畫廊列表中,每個畫廊旁邊都有一個「創建拇指」鏈接,該鏈接轉到/admin/images/thumbnails/gallery_id。一切正常,縮略圖正在創建,方法重定向到與setFlash信息的列表頁面,他們被創建。

但事情是,創建這些小圖像需要時間,並且如果它超過10張圖片 - 可能會令人討厭等待瀏覽器重新加載。

我想添加某種進度條。或者可能只是已經處理的圖像數量。

的方法基本上是這樣的(還有更多,但不相關):

function admin_thumbnails($gallery_id) 
    { 
    $files = $this->File->listDir('/example/www/directory'); 

    foreach ($files AS $file) 
    { 
    $this->Attachment->thumbnail('/example/www/directory/'.$file, '/thumbs/', '150', '100', 'resizeCropTop'); 
    } 

    $this->redirect(array('controller' => 'galleries', 'action' => 'index')); 
    } 

我可以在foreach循環運行的東西,但什麼?以及如何將其展示給用戶?

任何指針都會很棒。

問候, 保羅

回答

1

這不是做一個簡單的事情。 MVC框架需要在發送HTTP響應之前呈現整個視圖。你有兩個選擇。

首先,您可以使用javascript通過ajax調用此函數並顯示進度指示器(動畫gif)以讓用戶知道正在發生的事情。它不會告訴用戶在這個過程中服務器在哪裏,它只會讓他們知道正在進行的工作。這是便宜和容易的,在那裏有很多例子。

第二個選擇是啓動縮略圖創建,然後通過ajax「輪詢」您的服務器,以獲取進度。您將不得不考慮您的服務器如何在創建縮略圖時報告它的進展情況。你也應該可以通過谷歌搜索找到這方面的例子。這裏是another SO question that is similar

+0

我實際上開始研究它,在這一點上,我通過Ajax在後臺執行此操作,並向用戶顯示和ajax-loader.gif。想不到如何實現實際進度指標。 好處是,我將每個圖像(在縮略圖方法中)保存到數據庫。因此,我可以用另一種方法「輪詢」我的服務器,這種方法可以爲我指定與該指定庫相關的圖像計數。謝謝 ! – PawelMysior 2011-05-21 09:12:13

0

一個好的選擇可能是在foreach之前創建一個臨時文件,然後在每個(成功?)迭代中添加一行。在具有簡單輪詢函數的js中,計算行/令牌/任意數量並繪製進度條。當該過程完成時,刪除臨時文件。

我會解決這個問題。