Hướng dẫn lập trình
Yêu cầu: Có gallery. Mỗi gallery có nhiều ảnh. Khi tạo mới gallery phải cho phép upload ảnh luôn, chứ ko phải tạo xong edit mới upload được ảnh.
Thực hiện:
– Cấu trúc DB:
+ Bảng gallery: các cột id, name, created
+ Bảng images: các cột id, id_gallery, path, created, status, is_default
– Khi tạo mới cho chọn nhiều files, submit lên sẽ xử lý mảng $_FILES. Tạo mới bản ghi vào bảng gallery, upload files, tạo mới bản ghi vào bảng images với id_gallery là id của bản ghi gallery đã tạo.
Vấn đề phát sinh: Số lượng files lớn sẽ bị lỗi “413 Request Entity Too Large”
Giải quyết tạm thời: Chia nhỏ ra, tạo mới up 3 files. Vào edit up tiếp 3 files, rồi lại edit up tiếp 3 files!!!
Giải quyết triệt để:
– Sử dụng ajax để upload 3 files một mà không load lại trang.
– Khi sửa thì không vấn đề gì vì ta đã có id của gallery.
– Khi tạo mới sẽ xử lý phức tạp hơn một chút, cụ thể như sau:
+ Upload files qua ajax (hoặc post mà target đặt tới 1 iframe ẩn): Tạo các bản ghi images và để id_gallery = 0. Lưu lại các id của images vào $_SESSION
+ Ajax load lại các ảnh đã up dựa theo danh sách id đã lưu trong $_SESSION (hoàn toàn có thể phân trang nữa nếu muốn)
+ Lưu input dạng hidden danh sách id ảnh đã upload
+ Khi người dùng submit, sẽ tạo mới gallery, có id, đem update lại id_gallery cho các images (id các images cần cập nhật chính là dữ liệu ở input hidden – check cả $_SESSION để validate)
+ Xong xuôi xóa dữ liệu trong $_SESSION đi