高考结束了,中考也跟着结束了,马上到了高中新生入学的日子,在新生入学的前夕,我们帮一个高中做了一个学生登记的管理系统。学校负责招生的老师把学生的中考信息导入到数据库后,系统会以学生的中考报名号为用户名,一个随机字符串为密码为学生生成一个用户,然后把密码通过短信发送给学生家长预留的手机号。
上传信息只是第一步,整理使用这些信息才是这个系统最重要的功能,也是做这个系统的目的所在。比如,每个班每个尺寸的校服需要做多少件,哪个学生定的是哪个尺寸的校服?没做这个系统以前,都需要人工收集信息、统计、核对,可是个累人的活。做了这个系统以后,班主任只需要在后台点击一个下载按钮,统计信息就清清楚楚得下载下来了。然后把数据发送给校服供应商、收到校服后,根据打印出来的表格分发给学生,轻松多了。
闲话扯得有点多了,我们来通过代码看一下其中批量导出用户照片的功能。
批量导出用户上传的照片为 Zip 压缩包并自动下载
首先我们需要创建一个文件夹,导出的所有照片都放在这个文件夹里面,方便下一步的生成压缩包。然后我们获取照片,并根据需要重命名照片,把照片复制到上一步创建的文件夹里面。最后就是生成压缩包,供用户下载了,整个流程也就下面几行代码,非常简单。
/**
* 导出用户上传的内容
*/
new Dispatch( [
'export/([a-z]*)' => function ( $request, $status = "fexiang" ) {
$dir = wp_upload_dir() [ 'basedir' ] . '/export';
$archive = wp_upload_dir() [ 'basedir' ] . '/archive.zip';
if ( ! is_dir( $dir ) ) {
mkdir( $dir );
}
// 获取用户提交的内容
$args = [
'post_type' => $status,
'post_status' => 'any',
'posts_per_page' => - 1,
];
$query = new WP_Query( $args );
// 准备需要压缩的目录
$folders = [];
foreach ( $query->posts as $post ) {
if ( $status === 'fexiang' || $status === "zhufu" ) {
$username = get_post_meta( $post->ID, '_name', true );
} else {
$username = $post->post_title;
}
$user_dir = $dir . '/' . $username;
// 创建用户目录
if ( ! is_dir( $user_dir ) ) {
mkdir( $user_dir, 0700 );
}
$folders[ $username ] = $user_dir;
// 获取用户上传的文件
$files = get_post_meta( $post->ID, 'files', false );
// 复制用户上传的文件到用户目录中
foreach ( $files as $file ) {
$image_path = get_attached_file( $file );
$filename = basename( $image_path );
copy( $image_path, $user_dir . '/' . $filename );
}
}
// 先删除存档文件,然后再创建,编辑添加文件到存档中出错
if ( file_exists( $archive ) ) {
unlink( $archive );
}
$zippy = Zippy::load();
$zippy->create( $archive, $folders );
wp_redirect( wp_upload_dir()[ 'baseurl' ] . '/archive.zip' );
exit;
},
] );
根据项目的实际情况,我们可以还有对上面的代码进行进一步的处理,比如当用户的照片不存在时,跳过处理,避免出错;把用户的照片和其他字段一起导出等等,上面的代码是在 WordPress 系统中实现的批量导出照片的功能,在其他系统中,肯定也有类似的辅助功能来帮助我们实现,如有需要,可以参考上面的代码进行实现。