2011-05-19 48 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中,计算行/令牌/任意数量并绘制进度条。当该过程完成时,删除临时文件。

我会解决这个问题。