Author Archives: huypv

Yii2 – ActiveForm – Hiển thị tab lỗi

Khi sử dụng Yii Framework code web bạn sẽ sử dụng ActiveForm để tạo mới, cập nhật một bản ghi. Bình thường, form nhập liệu sẽ được hiển thị liệt kê từ trên xuống. Tuy nhiên với một số model có nhiều thông tin bạn sẽ phải chia nhỏ form ra các tab để nhập liệu thông tin cho gọn và tiện

Ví dụ, bạn có 1 model là Project – dự án bất động sản. Để tạo mới một dự án bạn sẽ phải nhập liệu rất nhiều các thông tin như: tên dự án, chủ đầu tư, giới thiệu chung về dự án, vị trí dự án trên bản đồ, các files ảnh minh họa… Nếu liệt kê tất cả ra để nhập liệu thì nhìn form sẽ rất dài, nhập vẫn được nhưng phải kéo lên kéo xuống, rồi tìm xem ô nào cần nhập giá trị nào, gây khó chịu + mất thời gian. Do đó bạn sẽ chia nhỏ các mục cần nhập ra thành một vài tab.

Khi chia form ra các tab nhập liệu thì sẽ phát sinh vấn đề: Bạn nhập xong hết các tab và ấn nút tạo mới, nhưng do có 1 tab dữ liệu nhập vào không hợp lệ nên form sẽ chưa submit, màn hình đứng yên, tab hiện tại thì đã pass validate không báo lỗi gì!!!

Như vậy code validate mặc định của ActiveForm mà Yii cung cấp sẽ chưa đáp ứng được yêu cầu của bạn lúc này. Bạn phải code thêm để nếu có 1 tab lỗi thông tin nhập liệu thì khi ấn nút Tạo mới tab đó phải được active, báo lỗi cho người nhập nội dung biết để nhập lại.

Cụ thể bạn sẽ viết thêm một hàm và gắn nó vào sau sự kiện validate đã tự động sinh của ActiveForm.

jQuery(‘#active-form’).on(‘afterValidate‘, function() {activeErrorTab();})

// Hàm bạn phải code để hiển thị tab chưa pass validate là activeErrorTab. Gợi ý là gắn id cho các tab, khối nội dung nhập liệu của từng tab. Khối nội dung nhập liệu nào có class has-error thì sẽ là có lỗi validate cần xem lại. Ưu tiên kiểm tra tab từ trái sang phải, tab nào có lỗi thì active hiện ra và break ra luôn.
yii2-active-form-on-afterValidate

Upload, lưu ảnh khi tạo mới gallery

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

Google AdSense Account Disabled

Hello,

With our advertising programs we strive to create an online ecosystem that benefits publishers, advertisers, and users. For this reason we sometimes have to take action against accounts that show behavior towards users or advertisers that may negatively impact how the ecosystem is perceived. In your case, we have detected invalid activity on your AdSense account and as a result it has been disabled.

We are limited in the amount of information we can provide about your specific violation. We understand that you may want more information about your account activity. However, in order to protect our proprietary detection systems, we are unable to provide further details.

In some cases publishers can make significant changes to correct the violation and are willing to comply with the AdSense program policies. For this reason, we offer an appeal process as an opportunity to work with you to resolve the issue. Please be sure to provide a complete analysis of your traffic or other reasons that may have generated invalid activity in your appeal. Submit your appeal using this form and we will follow up accordingly. Before submission, please review the list of the top reasons for account closure.

Thanks for your understanding.

Sincerely,

The Google AdSense Team

Mua tài khoản Mediafire Pro, thanh toán bị lỗi

Có đứa bạn nhờ nâng cấp tài khoản Mediafire từ Free thành Pro, phí khoảng 25 – 26$/year (đang khuyến mãi giảm 50%). Thanh toán bị lỗi: “Credit card declined. Declined high risk rating from MaxMind”

02_error

Nghi là Mediafire nó chặn Việt Nam nên nhờ đứa bạn khác ở bên Anh mua hộ thì vẫn bị lỗi như vậy.

Contact với mediafire thì họ bảo cổng thanh toán thấy rủi ro cao nên không cho thanh toán. Vì sao thì đi mà hỏi ngân hàng phát hành thẻ của bạn!!!

Nhờ thêm 1 thằng bạn nữa cũng ở Anh thì ngon choét luôn. Không rõ là vì sao nữa! Chát với thằng ở Anh (nhờ lần 1 ko được), hai thằng đoán già đoán non là tại thẻ một thằng phát hành ở tỉnh lẻ, thẻ một thằng phát hành ở trung tâm. Thôi thì cứ coi như đấy là lý do đi :))

mediafire-upgrade-pro