我不知道该如何解决这个问题。
我有一个小型图库脚本的管理面板。您创建图库,然后通过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循环中运行一些东西,但是什么?以及如何向用户显示它?
任何指针都很棒。
此致 保罗
答案 0 :(得分:1)
这不是一件容易的事。 MVC框架需要在发送HTTP响应之前呈现整个视图。你有两个选择。
首先,您可以使用javascript通过ajax调用此函数并显示进度指示器(动画gif)以让用户知道正在发生的事情。它不会告诉用户服务器在进程中的位置,它只会让他们知道正在进行的工作。这很便宜,很容易,有很多例子。
第二个选项是启动缩略图创建,然后通过ajax“轮询”您的服务器以获得进度。您必须考虑服务器如何在创建缩略图时报告它的进展情况。你也应该能够通过谷歌搜索找到它的例子。这是another SO question that is similar。
答案 1 :(得分:0)
一个好的选择可能是在foreach之前创建一个临时文件,然后在每个(成功的?)迭代中创建一个临时文件。在具有简单轮询功能的js中,计算行/标记/数量的数量并绘制进度条。完成此过程后,删除临时文件。
我会这样解决。